RHEL:允许用户 1 启动读取另一个用户拥有的设置文件的程序

问题描述

我想问题是关于 RHEL 操作系统的配置,或添加自定义脚本。 我想允许 user1 启动我的程序来读取另一个用户拥有的设置文件。 最终范围是:

我认为我的程序和我的设置文件可能归 root 所有,从而赋予 user1 执行程序的权利。但是如果我这样做,程序是否能够读取root拥有的设置文件

是否有解决此问题的方法,无需自定义我的程序可执行文件

编辑: 范围是保护设置文件内容,但允许用户使用应用程序。用不同的问题解决同一问题的另一种方法是: 假设我给 exe 和设置文件以 root 权限,然后在引导过程中自动启动 exe。用户 1 将无法读取设置文件(这就是我想要的)。假设 exe 是一个终端应用程序,它打印标准输出并期望命令作为标准输入。有没有办法让用户 1 读取标准输出并将标准输入写入先前由 root 启动的 exe?

解决方法

尝试回答。想象一下 /home/user/program 是应该由 user1 运行的程序,而 /home/user/private-config-file 是程序应该能够读取(代表 user1)但不能直接读取的文件来自user1

在这些配置中,我认为以下应该起作用:

  1. 创建自定义组 private-group(以 root 身份):
~ addgroup private-group
  1. 使配置文件属于 private-group 并且组可读(可能以 root 身份,除非您的普通用户也设置为属于该组):
~ chown :private-group /home/user/private-config-file
~ chmod g+r /home/user/private-config-file
  1. 使可执行文件属于该组并设置 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 进程比您想象的更难以安全的方式编写和使用...

我要再次强调,如果泄露配置文件的内容对您的安全有重大影响,您真的应该非常仔细地思考和操作。