问题描述
我想问题是关于 RHEL 操作系统的配置,或添加自定义脚本。 我想允许 user1 启动我的程序来读取另一个用户拥有的设置文件。 最终范围是:
我认为我的程序和我的设置文件可能归 root 所有,从而赋予 user1 执行程序的权利。但是如果我这样做,程序是否能够读取root拥有的设置文件?
是否有解决此问题的方法,无需自定义我的程序可执行文件?
编辑: 范围是保护设置文件内容,但允许用户使用应用程序。用不同的问题解决同一问题的另一种方法是: 假设我给 exe 和设置文件以 root 权限,然后在引导过程中自动启动 exe。用户 1 将无法读取设置文件(这就是我想要的)。假设 exe 是一个终端应用程序,它打印标准输出并期望命令作为标准输入。有没有办法让用户 1 读取标准输出并将标准输入写入先前由 root 启动的 exe?
解决方法
尝试回答。想象一下 /home/user/program
是应该由 user1
运行的程序,而 /home/user/private-config-file
是程序应该能够读取(代表 user1
)但不能直接读取的文件来自user1
。
在这些配置中,我认为以下应该起作用:
- 创建自定义组
private-group
(以 root 身份):
~ addgroup private-group
- 使配置文件属于
private-group
并且组可读(可能以 root 身份,除非您的普通用户也设置为属于该组):
~ chown :private-group /home/user/private-config-file
~ chmod g+r /home/user/private-config-file
- 使可执行文件属于该组并设置 gid(也可能由 root 用户):
~ chown :private-group /home/user/program
~ chmod g+s /home/user/program
程序应该不使用脚本语言,因为在这种情况下 setuid/setgid 不起作用。
使用这个,程序在运行时会有一个有效的组ID private-group
,应该足以让它读取配置文件。
据我所知,这应该能让你继续前进,但你需要记住:
- 如果
user1
有办法使用该程序读取任意文件,则可以打开您的配置文件; - 程序可能会在特定位置以
user1
可读的方式重写其配置文件,包括私有位; -
任何可以执行
/home/user/program
的用户都可以使用配置文件(即使没有读取它)。 - 重要 setuid/setgid 进程比您想象的更难以安全的方式编写和使用...
我要再次强调,如果泄露配置文件的内容对您的安全有重大影响,您真的应该非常仔细地思考和操作。