使ACL完美工作

使ACL完美工作

我知道有很多关于 ACL 和权限的问题和答案,但说实话,它们太弱了,无法做出任何连贯的理解!它就像是无组织信息的混合体。

希望这个问题能够结束这种混乱

问题:

在我的 Ubuntu 14.04 Web 服务器上,我想:

  • 使所有files/future_files权限640
  • 全部folders/future_folders750权限,
  • 并做出Admin:www-data唯一的默认所有者

我的解决方案:

我使用 ACL:

setfacl -Rdm u:admin:rwX /path/to/parent //capital X apply for folders
setfacl -Rdm g:www-data:rX /path/to/parent
setfacl -Rdm o::- /path/to/parent 

现在已经存在文件和文件夹完全遵循规则。

问题:

现在我以用户身份登录admin,当我创建新目录时,它不会770750?当我创建新文件时,它得到 660 而不是 640?为什么不采用规则!?


这是getfacl输出:

# owner: admin
# group: www-data
# flags: ss-
user::rwx
group::r-x
other::---
default:user::rwx
default:user:admin:rwx
default:group::r-x
default:group:www-data:r-x
default:mask::rwx
default:other::---

看起来规则之间存在一些冲突!尽管我在应用新规则之前删除了所有 ACL。

PS 我记得将它们组合在一个命令中,如下所示,以前可以工作......但事实并非如此!

etfacl -Rdm u:admin:rwX,g:www-data:rwX,o::- /path/to/parent

如果您知道正确的简短版本,请随时提供:)

答案1

我最终找到了解决方案,完全忘记在这里更新解决方案如下:

1:为所有人定义所有者并使所有者组可继承

- sudo chown -R admin:www-data /var/www/html 
- sudo chmod g+s  /var/www/html (inherit owner group)

2:对文件夹和文件应用默认权限(分别为750和640;默认是受保护的)

- sudo chmod -R 750 /var/www/html
- sudo find /var/www/html -type f -print0 | sudo xargs -0 chmod 640 (apply for files only)

** repeat file permissions for each sub-directory

3:为可写文件和文件夹申请权限

- sudo chmod -R 770 /var/www/html/images
- sudo find /var/www/images -type f -print0 | sudo xargs -0 chmod 660

4:应用自动继承规则(ACL)

- setfacl -Rdm u::rwX,g::rwX,o::- /path/to/parent  (Capital X only apply to directories)

5:验证ACL:

- getfacl /var/www/html

希望这能回答问题

答案2

一个可能的问题和解决方案,扩展了@Engineeroholic的答案

这是可能出现的问题

$ whoami
admin
$ umask
0000

0000只是一个可能的值——您可能会看到的值。让我们知道您的情况看。

使用以下选项之一来修复它。我认为这应该可以解决您的问题,即使上述问题最终不是您的问题。

# option 1: one session
$ umask 0027

或者(确保附加,>>。不要用单个大于号覆盖。)

# option 2: system-wide, note that you might need /etc/bash.profile, 
#           /etc/bash.bashrc, or something else called at login
#           if your system doesn't have /etc/.profile

$ echo -e "\n\n##New folders 0750, new files 0640" >> /etc/.profile
$ echo "umask 0027" >> /etc/.profile
$ source /etc/.profile

或者(确保附加,>>。不要用单个大于号覆盖。)

# option3: for `admin` only. Make sure that you are writing to 
#          a file called at login, in case ~/.bashrc isn't 
#          called at that point.

$ echo -e "\n\n##New folders 0750, new files 0640" >> ~/.bashrc
$ echo "umask 0027" >> ~/.bashrc
$ source ~/.bashrc

现在您可以创建具有所需权限的文件。

您将得到一些人所描述的“0770 - 0027 = 0750哪里0-7去了” 0

更准确地说,你有

   Octal1   Octal2   Binary1             Binary2
                       (    rwxrw---- )
      0770    0770         0111111000      0111111000
& NOT 0027  & 1750   & NOT 0000010111    & 1111101000
----------  ------   ----------------    ------------
      0750    0750         0111101000      0111101000
      ^                                 (   rwxr-x--- )
      |
      |
       `This one isn't really octal (I think.)

为您的目录。

对于您的文件:

  Octal     Binary1              Binary2
            (      rw-rw---- )
      0660        0110110000      0110110000
& NOT 0027  & NOT 0000010111    & 1111101000
----------    ----------------   ------------
      0640        0110100000      0110100000
                                (  rw-r----- )

这里更多细节。

我不知道这个答案是否阐明了原因的行为,但这是一个可能的解决方案。

请注意,您的getfaclinclude default:mask::rwx,您可能会更改为default:mask::r-x,尽管这不太可能是问题。

相关内容