我知道有很多关于 ACL 和权限的问题和答案,但说实话,它们太弱了,无法做出任何连贯的理解!它就像是无组织信息的混合体。
希望这个问题能够结束这种混乱
问题:
在我的 Ubuntu 14.04 Web 服务器上,我想:
- 使所有
files/future_files
权限640
, - 全部
folders/future_folders
有750
权限, - 并做出
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
,当我创建新目录时,它不会770
吗750
?当我创建新文件时,它得到 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----- )
看这里更多细节。
我不知道这个答案是否阐明了原因的行为,但这是一个可能的解决方案。
请注意,您的getfacl
include default:mask::rwx
,您可能会更改为default:mask::r-x
,尽管这不太可能是问题。