我使用 setfacl 命令授予读取目录中文件的读取权限,但无法使用 ls 查看文件。我试过
setfacl -Rdm g:grouptoadd:rx /path/directory/
但是,我可以读取文件(当我使用文件的直接路径时,例如“/path/directory/myfile”)并且无法列出目录(ls /path/directory/)
答案1
您正在设置默认 ACL通过-d
标志,而不是有效的 ACL。默认 ACL 是为在为其设置默认 ACL 的目录中创建的文件和目录设置 ACL 的机制。-d
如果要将 ACL 应用到目录本身,请删除该选项。
如果这样做,getfacl
您将看到“默认”条目。我建议阅读有关 Linux ACL 的更多信息。
[lzap@x1 foreman-packaging-rpm]$ getfacl /tmp/test
# file: tmp/test
# owner: lzap
# group: lzap
user::rwx
group::rwx
other::r-x
[lzap@x1 foreman-packaging-rpm]$ setfacl -dm u:lzap:rx /tmp/test
[lzap@x1 foreman-packaging-rpm]$ getfacl /tmp/test
# file: tmp/test
# owner: lzap
# group: lzap
user::rwx
group::rwx
other::r-x
default:user::rwx
default:user:lzap:r-x
default:group::rwx
default:mask::rwx
default:other::r-x
[lzap@x1 foreman-packaging-rpm]$ setfacl -m u:lzap:rx /tmp/test
[lzap@x1 foreman-packaging-rpm]$ getfacl /tmp/test
# file: tmp/test
# owner: lzap
# group: lzap
user::rwx
user:lzap:r-x
group::rwx
mask::rwx
other::r-x
default:user::rwx
default:user:lzap:r-x
default:group::rwx
default:mask::rwx
default:other::r-x
要查看默认 ACL 的运行情况,只需在具有默认 ACL 的目录中创建一个文件即可。就我而言touch /tmp/test/a_file
,它将继承u:lzap:r-x
ACL。
答案2
我相信“要添加的组”没有执行权限小路目录。ls /path/directory/
仅当您对构成路径的所有目录具有执行权限时才可以。
尝试$ getfacl /path
并确保“添加组" 具有执行权限。
如果没有,您可以简单地添加它:$ setfacl -m g:grouptoadd:x /path
。
另外,使用setfacl
不带选项的命令-d
。
答案3
正如我测试的,当我不使用d
选项(这意味着默认)时它可以工作。
setfacl -Rdm g:grouptoadd:rx /path/directory/
该命令允许目录中的新文件rx
权限。
setfacl -Rm g:grouptoadd:rx /path/directory/
该命令允许grouptoadd
组列出和读取目录。