我在文件夹 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
这对我来说没有意义,因为我知道移动目录只需要当前父目录和目标目录的写权限。因为我可以重命名两个目录中的目录,所以我当然应该能够将它从一个目录移动到另一个目录!
补充笔记:
- 该权限是通过名为用户条目 (myuser) 的 ACL 授予的,该条目存在于 B 和 C 上并且具有 rwx 权限
- 这些文件夹包含在 Samba 共享中 - 但即使我停止 smb 服务,我仍然遇到同样的问题,所以我认为这不会产生任何影响。
- SELinux 处于宽容模式
- C 中不存在也名为 A 的文件夹
- 如果我执行 sudo chmod g+w A,那么我可以成功移动 A。但为什么要移动的文件夹的权限会产生影响呢?
- 操作系统为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 编号(可以在任何上下文中用作当前目录的父目录的别名)由于重命名而发生变化。