C programming - execute another program with sudo privileges

回眸只為那壹抹淺笑 提交于 2019-12-25 02:46:40

问题


i have a C program that opens an mp3 and extract the jpg artwork in the same folder. If i execute this program with no root privileges i get a crash. If i execute it with sudo it works normally.

Now, i need another C programs who launch the previous program when it needs a jpg artwork for the selected mp3.

I tried to call popen("./firstProgram test.mp3" , "r") function or system("/(absolute path)/firstProgram test.mp3") function by calling them even with sudo in the command or not and either with relative or absolute paths. But no version seems to work.

How can i launch the first program from the second one with success?

Thanks!


回答1:


fork and then use execl

char sudo[]="/usr/bin/sudo";
char pbin[]="/usr/local/bin/puppet";
NOTICE("running puppet: %s %s",sudo,pbin);
errno=0;
execl(sudo,sudo,pbin,(char *)NULL);
/* we should never get as far as this */

obviously I recommend reading man execl for further info




回答2:


Unix (Linux) systems have contained a C Programming Manual in them since possibly forever. Look in Section 2, "System Calls".

This Wikipedia Page explains the Unix Manual "sections"

It is section 2 of the manual you can read about "System Calls"

Try the command: man 2 setuid

This will give you the manual for the setuid() system call which I think is what you want.

That manual page will also list references to other related system calls that may be what you want.

Remember when compiling C programs and using system calls that do low-level hardware access, to use the -O2, or -O3 option to gcc. There is a mention of it in the manual.

Ultimately the setuid() system call makes a running process started by one user change the UID of that running process to be running as some other user. (For example, you may see the Apache running as "apache", even though it was started by root).

setuid(0) lets you be root.



来源:https://stackoverflow.com/questions/48791210/c-programming-execute-another-program-with-sudo-privileges

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!