我从 bash shell 脚本创建一个文件夹并将 mysqldump 存储在其中。我确信我的脚本中没有与权限相关的命令。为了允许其他用户访问这些文件,我使用了 ACL,但是当他尝试访问该文件时,他遇到了权限被拒绝的问题,问题出在effective
ACL 的权限上。
该目录的所有者是ola
,尝试访问该文件夹的新用户是,uber
文件夹是gettaxi
父目录的权限
[/omega/olabooktmp]# getfacl .
# file: .
# owner: ola
# group: ola
user::rwx
user:uber:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:uber:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
子目录的权限
[/omega/olabooktemp]# getfacl gettaxi/
# file: gettaxi/
# owner: ola
# group: ola
user::rwx
user:uber:rwx #effective:---
group::r-x #effective:---
mask::---
other::---
default:user::rwx
default:user:uber:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
我看到新的目录gettaxi
掩码权限是mask::---
,所以我认为这导致了问题,但我无法完全理解以及如何解决这个问题。
任何建议都非常感谢。
谢谢。
答案1
您可以使用以下命令更改掩码:
setfacl -m m:rwx filename/directory
答案2
如果我很好地理解你的问题,用户ola
正在目录中创建文件:/omega/olabooktmp/gettaxi
并且您想要限制对这些文件的访问,但向用户授予访问权限uber
。
注:/omega/olabooktmp/gettaxi
拥有者为ola
让我们从没有 ACL 的情况开始:
ls -ld /omega/olabooktmp/gettaxi
drwxr-x--- 2 ola ola 4096 mars 21 08:16 /omega/olabooktmp/gettaxi
为了授予使用 ACL 的rwx
权限uber
,您可以使用:
setfacl -m u:uber:rwx,d:u:uber:rwX,o:--- /omega/olabooktmp/gettaxi
这将允许用户对文件夹的权限uber
,并且还授予和。它授予对文件夹中先前存在的文件的权限,并向文件授予继承的授权。当然,还要删除其他所有权限以进行限制。所有者仍然拥有自己的许可。rwx
/omega/olabooktmp/gettaxi
rwx
default
d:
X
other
结果:
getfacl /omega/olabooktmp/gettaxi
getfacl: Removing leading '/' from absolute path names
# file: omega/olabooktmp/gettaxi
# owner: ola
# group: ola
user::rwx
user:uber:rwx
group::r-x
mask::rwx
other::---
default:user::rwx
default:user:uber:rwx
default:group::r-x
default:mask::rwx
default:other::---
测试:
ola
创建一些文件(以 root 身份运行):
su - ola -c "for i in {1..3}; do date > /omega/olabooktmp/gettaxi/$RANDOM; done"
结果:
ls -l /omega/olabooktmp/gettaxi/
total 32
-rw-r----- 1 ola users 32 mars 21 08:43 17606
-rw-r----- 1 ola users 32 mars 21 08:43 22286
-rw-r----- 1 ola users 32 mars 21 08:42 31484
-rw-r----- 1 ola users 32 mars 21 08:43 31848
-rw-r----- 1 ola users 32 mars 21 08:42 667
-rw-r----- 1 ola users 4 mars 21 08:16 one
-rw-r----- 1 ola users 6 mars 21 08:16 three
-rw-r----- 1 ola users 4 mars 21 08:16 two
普通用户无法访问(以 root 身份运行):
su - debian -c "ls -l /omega/olabooktmp/gettaxi"
ls: cannot open directory '/omega/olabooktmp/gettaxi': Permission denied
但 uber 可以(以 root 身份运行):
su - uber -c "ls -l /omega/olabooktmp/gettaxi"
total 32
-rw-r----- 1 ola users 32 Mar 21 08:43 17606
-rw-r----- 1 ola users 32 Mar 21 08:43 22286
-rw-r----- 1 ola users 32 Mar 21 08:42 31484
-rw-r----- 1 ola users 32 Mar 21 08:43 31848
-rw-r----- 1 ola users 32 Mar 21 08:42 667
-rw-r----- 1 ola users 4 Mar 21 08:16 one
-rw-r----- 1 ola users 6 Mar 21 08:16 three
-rw-r----- 1 ola users 4 Mar 21 08:16 two
如果您通过某些测试破坏了 ACL,则可以使用以下命令删除所有 ACL:
setfacl -R -b /omega/olabooktmp/gettaxi
并重新开始。
答案3
是的,面具正在降低权限。有效权限是权限和掩码的和。 (user::
(拥有用户),并且other
不受掩码影响)。
您可以使用以下命令更改掩码:例如setfacl -m m:r-x file-name
。
当您执行 a 时ls -l
,如果模式以 a 结尾+
,则中间模式位(传统上为组位)就是掩码。
有时,模式位根据 中的组位进行设置umask
。我还没有制定出关于何时发生这种情况以及何时使用默认掩码的规则。用于cp
复制文件,似乎使用umask
.
解决方法
确保用户有自己的组,并且将其设置为默认组。然后将umask
设为 007
。
答案4
我怀疑这种行为是一个错误。我上个月发布了此内容(请参阅 unix.stackexchange.com/questions/570795)。发生的情况是 cp 命令将源文件的文件权限复制到 acl 掩码中。这是我对 cp -p 的期望,而不是 cp。我发现我可以使用 cat 进行复制
cat afile > bfile
或通过焦油管道
(cd A; tar -cf -)|(cd B; tar-xf -)
并且 acls 按预期受到尊重。
我还悬赏以解释这种 cp 行为。没有人解释一下。我正在考虑提交错误报告。也就是说,这应该是“cp -p”行为,而不是普通的 cp 行为。 (而且没人能回答,系统却扣掉了悬赏分。我也很惊讶。)