我正在创建一个文件系统管理器,它具有自动创建项目的扩展,...文件系统可执行文件应该只能编辑或删除以下文件/home/USER/00_Files
我创建了一个用户和组sudo adduser --system --no-create-home --group filesystem
。
之后我将主文件夹更改/etc/passwd
为filesystem:x:131:140::/nonexistent:/usr/sbin/nologin
. (不知道这是否是一个好主意)
我目前的理解是,应该以我创建的用户身份运行文件系统可执行文件,并使组文件系统拥有00_Files
.
其他程序(例如我的 IDE)(或终端中的我)将编辑、添加和删除00_Files
.
现在的问题是:
如何以用户身份运行可执行文件filesystem
?
如何自动让该组filesystem
拥有 中的所有文件00_Files
?
我还应该设置其他文件权限吗?
答案1
以用户身份运行可执行文件filesystem
# execute as root
chown filesystem /path/to/executable
chmod u+s /path/to/executable
# execute as any user
/path/to/executable
不过,使用 SGID 运行它比使用 SUID 更有意义(这样用户filesystem
就无法修改这个可执行文件):
# execute as root
chown root:filesystem /path/to/executable
chmod u-s,g+s /path/to/executable
# execute as any user
/path/to/executable
在这两种情况下,您可能必须使该组/home/USER
可搜索(x
权限)filesystem
(通过使其成为该目录的组或使用 ACL)。
让一个组拥有所有新文件
使其成为所有现有文件和目录的组
chgrp -R /home/USER/00_Files
为所有目录设置 SGID 位:
find /home/USER/00_Files -type d -exec chmod g+s {} \;
其他要设置的文件权限
使所有现有文件和目录可由该组写入:
chmod -R g+w /home/USER/00_Files
授予组对所有未来文件和目录的写权限:
find /home/USER/00_Files -type d -exec setfacl -m d:g::rwx {} \;
为了安全起见
为了安全起见,filesystem
此目录树之外的用户/组不得有任何具有写入权限的文件或目录。
一种完全不同的方法是在其自己的安装命名空间 /chroot 中运行可执行文件,该命名空间仅包含目标目录树。如果可执行文件是静态链接的,这应该很简单。不过,我不确定root
创建命名空间是否需要特权。