我在Linux(Debian)上开发了C代码。有时,我需要通过执行一些命令system()
system()
我想知道是否可以通过system()root用户执行命令。如果不是这种情况,是否有任何功能可以我在C代码上以root身份执行命令(或运行二进制文件)?
在遇到普通用户要执行root命令之前,我们遇到了这种情况,这是我们的解决方案(使用setuid / SUID):
假使,假设:
Tom
gTom
my_pro.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); }
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
... 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。
yum install
sudo