フォルダC内にフォルダAがあります(すべて同じファイルシステムにあります)。 AをBからCに転送したいのですが、許可拒否エラーが発生します。
B内でAをmvできます(たとえば、Aの名前を変更するなど)。
これで、rootユーザーとしてAをCに送信します(成功)。
これで、CでAをmvしたり名前を変更したりできます。
└── [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
ディレクトリを移動するには、現在の親ディレクトリと宛先ディレクトリへの書き込み権限だけが必要であることがわかっているので、これは私には理解できません。両方のディレクトリでディレクトリの名前を変更できるので、もちろん、あるディレクトリから別のディレクトリに移動できる必要があります。
その他の注意:
- この権限は、BとCに存在し、rwx権限を持つユーザーエントリ(myuser)というACLによって付与されます。
- フォルダはSamba共有に含まれていますが、smbサービスを停止しても同じ問題があるため、これは何も影響しません。
- SELinuxが許可モードになっています。
- Aという名前のフォルダがCに存在しません。
- 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番号が変更されたためです。