我喜欢通过 cron 修复文件服务器上的权限。一般来说,我喜欢将所有内容设置为 umask 027,忽略用户所做的任何更改。对于某些子文件夹,我喜欢应用 umask 077。
问题不在于如何设置和使用 umask,而在于如果用户更改了某些内容,则通过 cronjob 反复更正权限。
例如最后它应该看起来像
drwx------ /home/user/.ssh
drwxr-x--- /hom/user/foobar
drwx------ /hom/user/Mail
困难的方法(我想避免)如下所示:
chmod -R o-rwx /home/user
chmod -R g+r /home/user
find /home/user -typer d -exec chmod g+x '{}' \;
chmod go-rwx /home/user/{Mail,.ssh}
答案1
以下是我们用于类似操作的方法(针对所有不属于 root 的文件夹)。看似不必要的find
命令是为了确保我们不对已正确设置的任何文件夹设置权限。之前的一个脚本盲目地对chmod
所有文件夹进行了 -ed 操作,这会导致我的一些备份认为文件在备份过程中发生了变化,而我每天都在备份相同的文件,这浪费了大量的介质。
得到的权限集:
- 主目录采用模式 711,以防止随意浏览,但仍允许 Apache 查看用户的 public_html 文件夹
- public_html 的模式是 755,public_html 内的所有文件夹也是如此除了用于存储原本是巨型电子邮件附件的内容的顶级私人文件夹
- public_html 中的所有文件都是模式 644
#!/bin/sh
cd /home/CAE
# For all directories except those owned by root
for user in `ls -l | grep -v ' root ' | egrep '^d' | awk '{print $NF}'`; do
cd /home/CAE
# Fix top-level permissions to avoid people browsing accounts, but
# to allow normal Web access to public_html
find . -mindepth 1 -maxdepth 1 -name ${user} -type d ! -perm 0711 -print0 | xargs -r -0 chmod 711
# Make sure user has a Web directory (and a private one, also)
if [ ! -d ${user}/public_html/private ]; then
mkdir -p ${user}/public_html/private
chown -R ${user}:users ${user}/public_html
fi
cd ${user}/public_html
# Set top-level private folder to mode 711 if it isn't already
find . -mindepth 1 -maxdepth 1 -name private -type d ! -perm 0711 -print0 | xargs -r -0 chmod 711
# Set all directories except top-level private to mode 755 that aren't already
find . -maxdepth 1 -type d ! -name private ! -perm 0755 -print0 | xargs -r -0 chmod 755
find . -mindepth 2 -type d ! -perm 0755 -print0 | xargs -r -0 chmod 755
# Set all files mode 644 that aren't already
find . -type f ! -perm 0644 -print0 | xargs -r -0 chmod 644
done
答案2
如果我没理解要点,请原谅我,但看起来您想要一个 crontab 条目来频繁运行以下命令:
chmod -R go-rwx /home/user/.ssh
chmod -R g-w /home/user/foobar
chmod -R o-rwx /home/user/foobar
chmod -R go-rwx /home/user/Mail
或者这不是您要问的该怎么做?
答案3
您可以挂载具有 acl 支持的分区,并使用 getfacl 和 setfacl 命令制作和恢复备份。