我有一个由我拥有的目录(例如/sync
)和一个由我运行的进程,我希望对该目录具有完全的读写访问权限(在我的例子中,该进程是 Resilio Sync,以前称为 BitTorrent Sync)。该目录中的所有文件都是个人项目和文档。其中99%都归我所有,但有时,出于不可避免的原因,某些目录和文件是由root创建的。我将如何以某种方式让进程更改、移动和/或删除此类目录和文件?
g+s
我尝试了粘滞位(设置为 on /sync
,以便所有文件继承该组)和自定义 ACL 规则(尝试将粘滞位自动传播到新创建的目录)的组合,但是,如中所述这个答案及其评论,如果没有 inotify 就无法完成(为简单起见,我想避免使用 inotify)。
不过,我想知道,也许还有其他方法可以解决这个问题吗?就像在某个目录及其中的所有内容中赋予一个特定进程更多权力,而忽略所有文件权限?如果可能的话,我是否需要注意任何安全隐患?
答案1
我认为这个目标不需要粘性位。假设该进程以用户 的身份运行,resilio
并且您的用户帐户是olegs
。 (我看到是您的帐户在运行该过程;我添加此内容是为了演示。)
# Change all ownership to root:root
chown -R root:root /sync
# Make sure only root (and group members of root) can get a directory listing.
chmod 0750 /sync
# Now, let's augment standard permissions with ACLs.
# Set default masks for all new file system objects in /sync.
# (The root user already has permission.)
setfacl -d -m u:resilio:7 /sync
setfacl -d -m u:olegs:7 /sync
# Apply a mask to all existing files (and dirs) to give full control
# to the directory contents to olegs and resilio.
setfacl -m -R u:resilio:7 /sync
setfacl -m -R u:olegs:7 /sync
现在,这些用户可以完全控制目录:root
、olegs
和resilio
。否则,其他用户无法看到该目录的内容/sync
。尽管掩码指定了7
(读/写/执行),但目录变为 rwx,文件实际上变为6
(读/写)。