[unix] 디렉토리 권한이 정확하지만 mv를 사용할 때 권한이 거부되는 이유는 무엇입니까?

디렉토리 소유자가 내 사용자로 설정되어 있고 사용자 권한이 7로 설정되어 있지만 폴더 Music를 통해 폴더 를 이동하려고 할 때 권한이 거부 mv되었습니다.

(나는 sudo를 사용할 수 있다는 것을 알고 있지만 무엇이 잘못되었는지 알고 싶다. 여기서는 비린내가 나는 냄새가 난다). 추신 : 저는 Mac OS X El Capitan을 사용하고 있습니다.

터미널 스크린 샷



답변

때 폴더에있는 것을 참고 수행 a이동 b하는 c의 폴더 권한이 a결정 당신이 할 수있는 일을.

이 경우 사용 권한 .이 가장 중요합니다.

권한이 단순히보다 복잡하다는 것을 관찰하십시오 rwx. 귀하의 music폴더는이가 @마지막에 .폴더가있다 +끝.

  • xattr -h@ 기호에 대한 복잡한 권한을 결정하는 데 사용 합니다.
  • getfacl+ 기호의 ACL을 결정하는 데 사용 합니다.

답변

Linux 용 Windows 하위 시스템을 사용하고있었습니다. 다른 bash 인스턴스에서 디렉토리를 열었습니다. 닫으면 디렉토리를 이동할 수 있습니다.


답변

해당 디렉토리의 어딘가에 올바른 권한이없는 파일이 하나 이상있는 것처럼 보입니다.

그래서 내가 한 일은 :

sudo chown -R valmar ./Music
sudo chmod -R 755 ./Music

이제 작동합니다.


답변

여기서 문제는 음악 폴더의 ACL (액세스 제어 목록)과 관련이있을 수 있습니다. ACL은 일반적으로로 나열되는 일반 POSIX에 대한 별도의 권한 시스템 ls -l입니다. 홈 폴더 및 다른 곳의 일부 다른 디렉토리에도 ACL이 있습니다.

홈 디렉토리 내에서 ACL을 보려면 다음을 사용하십시오.

/bin/ls -le ~

0: group:everyone deny delete음악 디렉토리 와 같은 규칙이 표시 될 수 있습니다. 언급했듯이로 문제를 무시할 수 있습니다 sudo. 그렇게하지 않으려면 (또는 할 수없는 경우) 파일의 소유자라는 다른 옵션이 있습니다. 색인 (위의 예에서 0)에 따라 Music 디렉토리의 ACL에서 문제가되는 항목을 제거 할 수 있습니다.

/bin/chmod -a# 0 Music

또는 ACL의 모든 항목을 제거 할 수 있습니다.

/bin/chmod -N Music

이제 일반 POSIX 권한에 따라 디렉토리를 이동할 수 있습니다. 이동 후 ACL을 다시 넣으려면 다음을 사용할 수 있습니다.

/bin/chmod +a "group:everyone deny delete" Music_tmp

그리고 /bin/ls -le다시 사용 하여 원하는 ACL을 확인하십시오. man chmod자세한 정보 는 ACL 예제를 확인하십시오 . 특히이 소개는 도움이됩니다.

각 파일에는 정렬 된 항목 목록이 포함 된 하나의 ACL이 있습니다. 각 항목은 사용자 또는 그룹을 나타내며 일련의 권한을 부여하거나 거부합니다. 사용자와 그룹이 동일한 이름으로 존재하는 경우 이름 유형을 지정하기 위해 사용자 / 그룹 이름 앞에 “user :”또는 “group :”을 붙일 수 있습니다.

ACL 순서

매뉴얼 페이지 가 주문에 관한 규칙을 설명 하지는 않지만 이 페이지 는 ACL의 주문 규칙을 명확하게 설명합니다. 특히 명시 적 deny규칙이 명시 적 규칙보다 먼저 적용됩니다 allow. 따라서 group:everyone deny delete항목이 제자리에 있으면 allow규칙 으로 삭제할 수있는 권한을 사용자에게 부여 할 수 없습니다 . everyone사용자를 포함 하는 그룹 에 대한 권한이 거부되었으므로 해당 규칙이 먼저 적용됩니다.


답변

제거하려는 디렉토리에서 일련의 프로그램이 실행 중일 때이 문제가 발생했습니다. 디렉토리를 이동하려면 먼저 해당 디렉토리에서 실행중인 모든 프로그램을 종료해야했습니다.

다음 명령에서 프로그램 이름을 선택하는 방법에 매우주의 하십시오. 참조를 위해 다음 명령을 사용했습니다.

ps aux | grep -i [NAME_OF_ANNOYING_PROGRAM] | grep -v grep
# make sure that you are only about to kill the programs you want to kill

ps aux | grep -i [NAME_OF_ANNOYING_PROGRAM] | grep -v grep | awk '{print $2}' | sudo xargs kill -9
sudo mv /usr/local/[DIR_FOR_ANNOYING_PROGRAM] /usr/local/[DIR_FOR_ANNOYING_PROGRAM]2

일반적인 절차는 다음과 같습니다.

  1. 문제의 디렉토리에서 실행중인 모든 프로그램을 종료
  2. 디렉토리 이름을 바꾸려고 시도
  3. 즉, (강제 연속 실패하는 경우 kill -9가 많은 주의 ) 디렉토리에서 모든 프로그램을
  4. 디렉토리 이름을 바꾸려고 시도
  5. 실패하면 프로그램이 다시 실행 중인지 확인하십시오. 즉, 다른 디렉토리에서 실행중인 일부 디먼 프로그램에 의해 다시 시작되었는지 확인하십시오.
  6. 성가신 프로그램을 다시 시작하는 데몬 프로그램 강제 종료
  7. 성가신 프로그램을 강제 종료
  8. 디렉토리 이름 바꾸기
  9. 이익

답변

내부 파일 중 하나가 쓰기 방지 된 경우에도 발생할 수 있습니다. 필자 access.log는 이미 중단 된 Apache에 대한 쓰기 방지가 적용된 최후의 사례가있었습니다 . 방금이 파일을 제거 했으므로 부모 디렉토리를 더 이동할 수있었습니다.


답변