我正在编写一组脚本来配置游戏服务器。
我将每个游戏服务器作为单独的用户安装,以便它们都是隔离的并且无法访问彼此的文件。
处理配置的守护进程/服务器作为非特权用户运行,具有创建用户的 sudo 权限。
我现在正在开发一项功能,要求守护进程能够代表用户编辑文件后服务器已配置。
我正在考虑将守护进程添加到像“admin”这样的组中,将所有用户文件上的组设置为具有组权限的“admin”,以便守护进程可以读取和写入他们的文件 - 尽管将单个用户排除在“admin”之外" 组,这样他们就无法读取彼此的文件。
这适用于首次安装,我可以设置 setgid 位以确保新文件和文件夹继承“admin”组。然而,用户可以“chgrp”到他们自己的组,这会破坏这个系统。守护进程无法再访问这些文件,甚至用户也无法将组恢复为“admin”,因为他们不属于该组。
有没有办法:
- 为了防止游戏服务器用户将其文件组更改为“admin”以外的任何组,因此上述方法将起作用;或者
- 有没有更好的方法来实现我在这里想要实现的目标?
答案1
所有权访问包括设置组 ID、权限位和 ACL 的访问权限;因此,您无法阻止文件所有者设置这些内容。
当然,这句话中隐藏着两种不同方法的种子:
- 首先不要授予所有权访问权限。 不要使用户帐户成为文件的所有者。相反,使用ACL
setfacl
授予单个用户帐户(或其他帐户)访问权限。rwx
使它们归其他某个帐户所有,分配给该帐户不属于的组,并且无法全局访问。这里的缺点是磁盘配额之类的事情。 - 使用所有者可以重新打开的访问控制形式。使单个用户帐户成为所有者,但用于在 ACL 中
setfacl
授予守护程序帐户(或其他帐户)访问权限。rw-
这里的缺点是用户帐户可以首先关闭访问权限。
根据需要评估权衡。如果要在所有创建的文件上自动设置这些 ACL,请使用父目录中的默认 ACL。