我是unix的新手,需要一些帮助。
我有另一个程序调用projectc,它是位于另一个用户调用userb上的suid程序。 userb有一个目录传递,只有它的所有者(userb)
具有写入和读取权限我正在尝试使用printf通过argv参数执行命令printf(system("cat /home/userb/pass"))
我可以直接在c代码printf(system("cat /home/userb/pass"))
中执行此操作,但在argv参数中执行此操作,我无法执行此操作。)
无论如何要将argv[1]
参数解析为命令吗?
这是我尝试在unix中运行的程序。
int main( int argc, char **argv){
printf(argv[1]);
return 0;
}
答案 0 :(得分:3)
printf(system("cat /home/userb/pass"))
这似乎起作用的原因是因为产生的子进程打印在屏幕上。 printf
不仅不必要,而且实际上是一个错误。 printf
的第一个参数是字符串(char*
),而来自system
的retrn值是int
。
正确的电话会是:
int success = system("cat /home/userb/pass");
如果argv[1]
是您要运行的命令,则可以致电:
int status = system(argv[1]);
然后您可以像这样运行您的程序:
myprogram "cat /home/userb/pass"
请注意双引号 - 它们确保整个命令作为单个参数传递。没有引号,它将分为两个参数。
请调高编译器警告级别。编译时printf(system("cat /home/userb/pass"))
应该给出一些重要的警告/错误。