对于具有 ACL 的目录,无法解释的 mv 权限被拒绝

对于具有 ACL 的目录,无法解释的 mv 权限被拒绝

我在文件夹 B 中有一个文件夹 A,而文件夹 B 又在文件夹 C 中(全部位于同一文件系统上)。我想将 A 从 B 转移到 C,但收到权限被拒绝错误。

我可以在B内mv A(即重命名A)

现在我以root用户身份将A转移到C(成功)

我现在可以在 C 中 mv/重命名 A

└── [drwxrwx---]  C
    ├── [drwxrwx---]  B
    │   └── [drwxr-x---]  A

getfacl C
# file: C
# owner: root
# group: root
user::rwx
user:myuser:rwx
group::rwx
mask::rwx
other::---

getfacl B
# file: B
# owner: root
# group: root
user::rwx
user:myuser:rwx
group::rwx
mask::rwx
other::---

getfacl A
# file: A
# owner: otheruser
# group: othergroup
user::rwx
user:myuser        #effective:r-x
group::rwx         #effective:r-x
mask::r-x
other::---

mv A ..
mv: cannot move ‘A’ to ‘C’: Permission denied

这对我来说没有意义,因为我知道移动目录只需要当前父目录和目标目录的写权限。因为我可以重命名两个目录中的目录,所以我当然应该能够将它从一个目录移动到另一个目录!

补充笔记:

  1. 该权限是通过名为用户条目 (myuser) 的 ACL 授予的,该条目存在于 B 和 C 上并且具有 rwx 权限
  2. 这些文件夹包含在 Samba 共享中 - 但即使我停止 smb 服务,我仍然遇到同样的问题,所以我认为这不会产生任何影响。
  3. SELinux 处于宽容模式
  4. C 中不存在也名为 A 的文件夹
  5. 如果我执行 sudo chmod g+w A,那么我可以成功移动 A。但为什么要移动的文件夹的权限会产生影响呢?
  6. 操作系统为CentOS 7,文件系统为ext4。文件系统未通过 acl 支持显式挂载(但 acl 似乎仍然可以工作 - 除了这一问题)。 une2fs -l 显示“默认安装选项:user_xattr acl”

答案1

我假设您的意思是(相对目标路径)或(绝对目标路径)mv A C之类的简写。mv A ..mv A /some/path.../C

如果是这样,C 中是否存在另一个您不可写的 A 实例?这可以解释“权限被拒绝”错误:如果您无法写入现有的.../C/A,则无法将 的内容移动.../C/B/A到其中,从而导致mv操作失败。

但如果你的命令是mv A C 没有指定路径,那么该命令将尝试将其重命名.../C/B/A.../C/B/C,而不是将其移动到.../C/A。同样,如果存在.../C/B/C您不可写入的现有内容,则会导致操作mv失败并显示permission denied错误消息。

答案2

https://en.wikipedia.org/wiki/Mv_(Unix)

将目录从一个父目录移动到另一父目录需要所移动目录的写入权限,以及修改旧父目录和新父目录的权限。这是因为目录条目“..”的 i 编号(可以在任何上下文中用作当前目录的父目录的别名)由于重命名而发生变化。

相关内容