폴더의 특정 사용자 및 그룹에 대한 실행을 추가하고 파일에서 제거합니다.

폴더의 특정 사용자 및 그룹에 대한 실행을 추가하고 파일에서 제거합니다.

이 명령을 실행하려고 하는데 예상한 결과가 나오지 않습니다.

chmod -R u-x+Xrw,g-x+Xrw,o-x+Xr *

내 모든 디렉터리는 실행 가능하고 모든 파일은 실행 가능하지 않기를 원합니다. 이것은 웹 서버용 저장 폴더이고 누구도 이 폴더에서 아무 작업도 수행하지 않기를 바랍니다. 읽고 쓰기만 하면 됩니다. 하지만 해당 디렉토리를 탐색할 수 있기를 원합니다.

어떤 이유로 이러한 파일도 실행 가능해집니다. 제가 뭘 잘못하고 있는 걸까요?

편집하다:다른 답변에 표시된 솔루션을 사용하여 문제를 해결하는 방법을 알고 있지만 여기에 작성된 명령이 파일을 제거하는 것처럼 보이지만 왜 파일에 x 플래그를 남겨두는지 궁금합니다.

답변1

파일(읽기 및 쓰기)이 디렉터리(읽기 및 실행)와 다른 권한을 갖기를 원하므로 두 명령을 하나로 결합하는 것보다 두 개의 별도 명령을 사용하는 것이 좋습니다. 와일드카드는 *파일 및 디렉터리와 일치합니다.

둘째, X권한에 "실행"을 추가하십시오 ...

파일이 디렉터리이거나 이미 일부 사용자에 대한 실행 권한이 있는 경우

...따라서 파일이 임의의(사용자, 그룹 또는 기타) 실행 권한으로 시작되면 실행 권한으로 끝납니다.

두 가지 개별 명령을 고려하십시오.

find /base/path -type d -exec chmod u+rx,g+rx,o+rx {} +

그리고

find /base/path -type f -exec chmod u-x+rw,g-x+rw,o=r {} +

위 명령에 따라 권한 집합을 조정합니다.

  • 디렉토리에서:다음에 추가누구나 읽고 실행할 수 있도록
  • 파일 정보:삭제사용자 및 그룹에 대해 실행
  • 파일 정보:다음에 추가사용자 및 그룹에 대한 읽기 및 쓰기
  • 파일 정보:세트다른 것들은 읽기 전용입니다.

답변2

몇 가지 테스트 후에 다음 chmod 명령이 예상된 동작을 제공해야 한다는 것을 발견했습니다.

chmod -R ugo-x+Xr,ug+w FILE

예를 들어, 775 권한을 가진 디렉터리와 파일로 시작합니다.

[root@testvm1 ~]# ls -ld testdir/
drwxrwxr-x. 2 root root 22 Dec 14 16:47 testdir/
[root@testvm1 ~]# ls -l testdir/testfile
-rwxrwxr-x. 1 root root 0 Dec 14 16:47 testdir/testfile

이제 다음 명령을 실행합니다.

[root@testvm1 ~]# chmod -R --verbose ugo-x+Xr,ug+w testdir/
mode of ‘testdir/’ retained as 0775 (rwxrwxr-x)
mode of ‘testdir/testfile’ changed from 0775 (rwxrwxr-x) to 0664 (rw-rw-r--)

디렉토리는 실행 권한을 유지하지만 파일의 실행 권한은 제거됩니다.

모든 디렉터리에 대해 775 권한과 모든 파일에 대해 664 권한을 원한다고 가정하면 다음 변형을 사용하여 쓰기 권한을 조작할 수도 있습니다.

chmod -R ugo-wx+Xr,ug+w *

문제의 원래 명령은 chmod파일에서 실행 권한을 제거하지 않습니다. 이러한 행동의 차이는 패턴이 평가되는 방식의 결과인 것으로 보입니다. chmod mode1, mode2 file와 동일한 결과를 제공합니다 chmod mode1 file; chmod mode2 file. 원래 명령에서는 사용자 권한이 먼저 평가되므로 그룹/기타 범주 실행 권한으로 인해 파일이 실행 권한을 유지하게 됩니다. 예는 다음과 같습니다.

[root@testvm1 testdir]# chmod 775 testfile

[root@testvm1 testdir]# chmod -R --verbose u-x+Xrw,g-x+Xrw,o-x+Xr testfile
mode of ‘testfile’ retained as 0775 (rwxrwxr-x)

[root@testvm1 testdir]# chmod -R --verbose u-x+Xrw testfile
mode of ‘testfile’ retained as 0775 (rwxrwxr-x)
[root@testvm1 testdir]# chmod -R --verbose g-x+Xrw testfile
mode of ‘testfile’ retained as 0775 (rwxrwxr-x)
[root@testvm1 testdir]# chmod -R --verbose o-x+Xr testfile
mode of ‘testfile’ retained as 0775 (rwxrwxr-x)

디렉터리는 자동으로 실행 비트를 획득하므로 X이 동작은 파일에만 영향을 미칩니다.

관련 정보