在遇到普通用户要执行root命令之前,我们遇到了这种情况,这是我们的解决方案(使用setuid / SUID):
假使,假设:
- 用户名 :
Tom
- 组别 :
gTom
- C程序文件 :
my_pro.c
my_sudo.c
步骤2:编译...int main(int args, char *argv[]) { if (args < 2) printf("Usage: my_sudo [cmd] [arg1 arg2 ...]"); // cmd here is the shell cmd that you want execute in "my_pro" // you can check the shell cmd privilege here // example: if (argv[1] != "yum") return; we just allow yum execute here char cmd[MAX_CMD]; int i; for ( i = 2; i < args; i ++) { // concatenate the cmd, example: "yum install xxxxx" strcat(cmd, " "); strcat(cmd, argv[i]); } system(cmd);}
my_sudo.c以获取
my_sudo可执行文件
步骤3:在您的C代码中sudo chown root:gTom my_sudo // user root && gTom group sudo chmod 4550 my_sudo // use SUID to get root privilege #you will see my_sudo like this(ls -l) #-r-sr-x--- 1 root my_sudo 9028 Jul 19 10:09 my_sudo* #assume we put my_sudo to /usr/sbin/my_sudo
步骤4:执行...int main() { ... system("/usr/bin/mysudo yum install xxxxx"); ...}#gcc && ls -l#-rwxr--r-- 1 Tom gTom 1895797 Jul 23 13:55 my_pro
./my_pro
您可以执行
yum installno
sudo。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)