폴더 C 안에 폴더 A가 있습니다(모두 동일한 파일 시스템에 있음). A를 B에서 C로 전송하고 싶지만 권한 거부 오류가 발생합니다.
B 내에서 A를 mv할 수 있습니다(예: A의 이름 바꾸기).
이제 루트 사용자로 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_(유닉스)
한 상위 디렉터리에서 다른 상위 디렉터리로 디렉터리를 이동하려면 이동 중인 디렉터리에 대한 쓰기 권한과 이전 상위 디렉터리 및 새 상위 디렉터리를 수정할 수 있는 권한이 필요합니다. 이는 이름 바꾸기로 인해 디렉토리 항목 ".."(모든 컨텍스트에서 현재 디렉토리의 상위 디렉토리에 대한 별칭으로 사용할 수 있음)의 i 번호가 변경되었기 때문입니다.