免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2172 | 回复: 4
打印 上一主题 下一主题

[其他] 进程执行文件访问权限 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-01-03 11:46 |只看该作者 |倒序浏览
我想实现的功能是:以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。



论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
2 [报告]
发表于 2017-01-03 16:58 |只看该作者
回复 1# Swayer_Chen

我在当前目录用root用户创建了一个空白文本文件test.txt。权限为644。

然后在普通用户下用c语言写了一段代码, 打开如上的test.txt.并向其中写入字符,代码如下:

  1. #include<fcntl.h>
  2. #include<unistd.h>
  3. int main()
  4. {
  5.     setuid(0);
  6.     sleep(10);
  7.     int f1=open("./test.txt",O_CREAT|O_RDWR);
  8.     write(f1,"hello,world\n",8);
  9.     close(f1);
  10.     return 0;
  11. }
复制代码

编译执行如上代码生成可执行文件 a.out,由于如上代码的源文件的宿主是普通用户,编译后的可执行文件a.out的宿主也是普通用户,又以普通用户的身份执行这个a.out    执行后文件test.txt依旧空白。

用chown 命令改变a.out宿主为root, 依旧依普通用户执行a.out , 用ps命令看到a.out的进程的拥有者还是普通用户,并且命令执行完毕后 test.txt依旧空白。

最后用sudo 执行a.out   命令结束后text  .txt文件中被写入了字符。

论坛徽章:
0
3 [报告]
发表于 2017-01-04 09:31 |只看该作者
回复 2# cao627

你好,我这里的环境是嵌入式的,所以没有办法以普通用户去执行或者引导a.out。现在的模式是将一个进程文件导入到嵌入式设备中,用嵌入式设备中的一个主进程引导这个a.out进程启动,所以引导进程启动的肯定是root用户,即RUID肯定是root。
所以,问题来了, 以root用户引导启动的进程,怎么让他彻底抛弃root权限?
环境:
1、系统文件(待访问的文件)都是root或者非heop用户。
2、需要引导的进程用root用户启动。
3、可以修改待引导进程文件宿主为heop。


论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
4 [报告]
发表于 2017-01-04 16:45 |只看该作者
回复 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没有写权限。

论坛徽章:
0
5 [报告]
发表于 2017-01-12 10:19 |只看该作者
回复 4# cao627

好吧。。。。谢谢~~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP