我运行一个 unRAID 服务器(unRAID 基于 Slackware),并且想找到一种方法来自动更改添加到特定目录的每个文件的权限和所有权。
具体来说,我想.torrent
使用 SFTP 将文件从我的笔记本电脑上传到我服务器上的特定“监视”文件夹。问题是监视该目录的 rTorrent docker 容器无法加载上传的.torrent
文件,因为它们的owner:user
组与容器的组不同——root:root
对于.torrent
通过 SFTP 发送的文件和nobody:users
容器来说都是如此。
我怀疑文件权限也可能是一个问题,因为上传的.torrent
文件有0644
权限,我相信它们需要有0755
权限。我已经能够.torrent
通过手动 chown tonobody:users
和 chmod to让 rTorrent 自动加载这些文件0755
,所以我知道 Autowatch 可以在这些更改后正常工作。
因此,我希望有一种简单的方法可以自动 chown 和 chmod 添加到此目录的每个文件。有什么想法吗?
答案1
您可以使用内置工具通过另外两种方式实现目标
首先你可以使用 ACL
- 这里有一些使用方法的参考:https://www.computerhope.com/unix/usetfacl.htm
- 您可以在文件上传文件夹的默认 ACL 中添加具有必要权限的用户 root:root。
第二个(我个人认为更优雅):
- 运行 rTorrent docker 容器,其 UID 与文件自己的 UID 匹配,我发现这个页面很好地解释了这一点:https://www.computerhope.com/unix/usetfacl.htm
答案2
正如我昨天在 SO 的评论中提到的那样,使用 inotify 来实现这一点相当简单。
#!/bin/sh
if [ -x /tmp/watchy ]; then
rm -rf /tmp/watchy
fi
while inotifywait -e close_write -o /tmp/watchy --format %w%f /path/to/watch
do
found=$( tail -n1 /tmp/watchy | grep -E '.torrent$' ) && chown root $found
done
答案3
这可能会有帮助:https://techarena51.com/blog/inotify-tools-example/
当目录更新时,intotify 可以让你触发一个脚本。该脚本可以动态管理你的 chown 和 chmod。