在目录结构上应用 unix 权限方案

在目录结构上应用 unix 权限方案

我喜欢通过 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 命令制作和恢复备份。

相关内容