如何在不更改文件夹权限的情况下应用所有文件(子目录中的文件)的 acl 权限?

如何在不更改文件夹权限的情况下应用所有文件(子目录中的文件)的 acl 权限?

需要在 Linux 服务器上授予新用户 acl 权限,而不更改现有的 chmod 权限。新用户不属于任何组,也不拥有文件。用户需要能够写入和读取文件。在提供文件写入和读取时需要使用有效权限。文件夹需要具有此用户的读取和执行 acl 权限。我面临的问题是,当我使用 -R 更改文件 acl 权限时,它也会更改文件夹。我不需要/不想要那样。如何在不更改文件夹权限的情况下将下面的 acl 权限应用于所有文件(子目录中的文件)?

新用户需要对文件具有写权限,这意味着用户需要对包含的文件夹具有读取+执行权限,并对文件具有读取+写入权限。

# assigned read + execute to all the folders on server (includes subfolders)
setfacl  -m user:robinhood:r-X  /server/root/

# assign read + write to ALL the files (not folder) on server
# set file permissions using effective permissions
# this assigns file permissions to all files in root directory, but not files in all subfolders.
# What's the best way to apply the command to all the files
# including those in subdirectories and not to the folders?
# The folders are not to have effective permissions.

setfacl -m mask:rw-,user:robinhood:rwx /server/root/*

答案1

find是你的朋友:

find /server/root -type f -execdir setfacl -m mask:rw-,user:robinhood:rwx {} \;

此命令查找/server/root文件类型为 ( -type f) 的所有文件,并在文件目录中执行此命令:

setfacl -m mask:rw-,user:robinhood:rwx {} \;

其中{}是 find 结果列表中当前项的占位符,并标记参数\;的结束。-execdir

它需要多一点的时间,但只设置文件的 ACL,而不设置其他任何内容。

如果您需要修改 robinhood 子目录的 ACL/server/root以访问子目录的内容,只需使用find -type d并相应地编辑setfacl命令。

相关内容