在我们想要普通用户执行root命令之前我们遇到了这种情况,这是我们的解决方案(使用setuid / SUID):

假使,假设:

>用户名:汤姆

>组:gTom

> C程序文件:my_pro.c

第1步:编写C代码工具:my_sudo.c

...

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);

}

第2步:编译my_sudo.c以获取my_sudo可执行文件

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

第3步:在您的C代码中

...

int main() {

...

system("/usr/bin/mysudo yum install xxxxx");

...

}

#gcc && ls -l

#-rwxr--r-- 1 Tom gTom 1895797 Jul 23 13:55 my_pro

第4步:执行./my_pro

您可以在没有sudo的情况下执行yum安装.

Logo

更多推荐