$ setfacl

$ setfacl

我一直在寻找完美的基于 Web 的权限,我已经用过几种方法了。这篇文章并不复杂,只是有点长,我想提供一些示例。

我搜索了很久,但不知道是否存在事实上的标准。谢谢您的时间。

问:有人可以根据以下基本权限目标建议我最好的方法吗?

  • 权限目标:
    • 预防0777模式
    • 默认群组www-data具有粘性
    • 默认用户myself保持原样(如果可能的话,我认为 setfacl 中不存在默认值)
  • 悬崖笔记
    • 使用:Ubuntu 16.0416.10 (目前为桌面版本)

$ chmod g + rws

我已经设置好了,我确实想知道为什么用橙色高亮显示我的文件,这让我很担心. 目标是保持当前文件和新文件尽可能一致www-data

sudo chgrp -R www-data /var/www
sudo chmod -R g+rws /var/www  # <-- s or S?

上述方法大部分都有效,但是我读过它不好用,为什么?所以我尝试了setfacl

$ setfacl

在这里setfacl,问题是它会+x为用户制作所有当前文件,我不想要那样。

# For Current Files | User/Group
sudo setfacl -Rm u:myself:rwx /var/www
sudo setfacl -Rm g:ww-data:rwx /var/www

# For Future Files | User/Group
sudo setfacl -Rmd u:myself:rwx /var/www
sudo setfacl -Rm g:www-data:rwx /var/www

.bashrc 分别设置文件/目录

所以我有一个疯狂的想法,就是创建一个.bashrc函数,虽然它还不完全正确,但你明白我的意思了。

function facl_file() {
    echo "(+) Set ACL for $USER:www-data rw [Files Only, Persist]"

    # Files cannot have defaults -d permissions
    while IFS= read -r -d $'\0' file; do
        echo "  Setting $file"
        # Default Mode: RW
        mode="rw"

        # If Executable, Add RWX
        if [[ -x "$file" ]]; then
            mode="rwx"
        fi
        sudo setfacl  -m u:$USER:$mode $file
        sudo setfacl  -m g:www-data:$mode $file
    done < <(find $CREATE -type f -print0)
    echo "(+) Done with Files"
}

function facl_dir() {
    echo "(+) Set ACL for $USER:www-data rwx [Directories Only, Persist]"
    while IFS= read -r -d $'\0' dir; do
        echo "  Setting $dir"
        sudo setfacl  -m u:$USER:rwx $dir
        sudo setfacl -dm u:$USER:rwx $dir
        sudo setfacl  -m g:www-data:rwx $dir
        sudo setfacl -dm g:www-data:rwx $dir
    done < <(find $CREATE -type d -print0)
    echo "(+) Done with Directories"
}

上述的目标是防止Directories丢失+x,并防止不存在的文件+x成为它。


如果我在这方面做错了,任何建议都会很感激。我似乎找不到一个感觉合适的“粘性标准”。

答案1

我没有意识到这个帖子还在这里,所以我会回答我自己的问题。尝试使用X而不是x。我会先用测试文件夹来做:

cd ~; mkdir test; touch test/{default,run.sh};chmod +x test/run.sh

# Ensure this fellow is in here!
sudo usermod -aG www-data $USER 

sudo setfacl -R -m g:www-data:rwX ~/test
sudo setfacl -Rd -m g:www-data:rwX ~/test
sudo getfacl ~/test

这将设置保留文件夹 x 和 run.sh x——唯一可见的变化是末尾的 +,如:-rwxrwxr-x+- 它只是意味着它有 addtl `facl set。

希望这可以帮助。

相关内容