以用户身份运行可执行文件filesystem

以用户身份运行可执行文件filesystem

我正在创建一个文件系统管理器,它具有自动创建项目的扩展,...文件系统可执行文件应该只能编辑或删除以下文件/home/USER/00_Files

我创建了一个用户和组sudo adduser --system --no-create-home --group filesystem
之后我将主文件夹更改/etc/passwdfilesystem: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创建命名空间是否需要特权。

相关内容