进程执行文件访问权限
我想实现的功能是:以root用户执行一个进程process,但是需要此进程对系统文件访问权限不能有root权限,对其他文件只能拥有只读权限(root用户可读写)。方案:
1、将可执行文件process,通过命令chown修改起文件所用着为用户heop,并设置可执行文件的setuid位,即+s。
2、修改系统文件的权限为644(root用户存在读写权限,其他用户只读)。
3、然后运行可执行文件process。
这样基本可以实现进程process对系统文件的只读操作。
但是存在一个问题,如果进程process调用setuid将uid设置为root,这样进程就拥有了root权限了,请问有没有哪位大神能有更好的方案。
是不是设置执行文件的setuid位,不能彻底的抛弃root权限?
我这里测试发现,按照我方案步骤实现,在运行程序的时候ps命令出来看到进程usr为heop。
如果在process中调用setuid(0)将uid设置为root,进程运行后ps命令看到的进程usr变为root。
回复 1# Swayer_Chen
我在当前目录用root用户创建了一个空白文本文件test.txt。权限为644。
然后在普通用户下用c语言写了一段代码, 打开如上的test.txt.并向其中写入字符,代码如下:
#include<fcntl.h>
#include<unistd.h>
int main()
{
setuid(0);
sleep(10);
int f1=open("./test.txt",O_CREAT|O_RDWR);
write(f1,"hello,world\n",8);
close(f1);
return 0;
}
编译执行如上代码生成可执行文件 a.out,由于如上代码的源文件的宿主是普通用户,编译后的可执行文件a.out的宿主也是普通用户,又以普通用户的身份执行这个a.out 执行后文件test.txt依旧空白。
用chown 命令改变a.out宿主为root, 依旧依普通用户执行a.out , 用ps命令看到a.out的进程的拥有者还是普通用户,并且命令执行完毕后 test.txt依旧空白。
最后用sudo 执行a.out 命令结束后text.txt文件中被写入了字符。
回复 2# cao627
你好,我这里的环境是嵌入式的,所以没有办法以普通用户去执行或者引导a.out。现在的模式是将一个进程文件导入到嵌入式设备中,用嵌入式设备中的一个主进程引导这个a.out进程启动,所以引导进程启动的肯定是root用户,即RUID肯定是root。
所以,问题来了, 以root用户引导启动的进程,怎么让他彻底抛弃root权限?
环境:
1、系统文件(待访问的文件)都是root或者非heop用户。
2、需要引导的进程用root用户启动。
3、可以修改待引导进程文件宿主为heop。
回复 3# Swayer_Chen
不管这个a.out文件的宿主是谁,只要以root身份运行它,它包含的对系统的操作,就是在以root的身份在做。
在我的桌面linux上
将如上代码中的setuid改写为setuid (1000)
那么即使用sudo命令执行a.out,也不能向test.txt文件写入字符串。因为以sudo命令启动a.out ,那么a.out的运行身份就是root 。然后,当a.out执行到setuid (1000) ,a.out身份就跳到id为1000的那个用户,由于id为1000的用户为系统中的一个普通用户,对宿主为root,权限为644的test.txt没有写权限。
回复 4# cao627
好吧。。。。谢谢~~~~
页:
[1]