!["chmod: ...작업이 허용되지 않음"으로 인해 스크립트가 실패합니다.](https://linux55.com/image/30104/%22chmod%3A%20...%EC%9E%91%EC%97%85%EC%9D%B4%20%ED%97%88%EC%9A%A9%EB%90%98%EC%A7%80%20%EC%95%8A%EC%9D%8C%22%EC%9C%BC%EB%A1%9C%20%EC%9D%B8%ED%95%B4%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EA%B0%80%20%EC%8B%A4%ED%8C%A8%ED%95%A9%EB%8B%88%EB%8B%A4..png)
내 스크립트는 실행 시 제대로 작동하지만 다른 사용자가 다음 형식의 오류로 실행하면 실패합니다.
chmod: changing permissions of `/A/B/C/D/E': Operation not permitted
(이것은 /A/B/C/D/E
디렉터리입니다. FWIW, 스크립트는 에 있습니다 /A/B/C/D
.)
중요한 경우 관련 디렉터리와 모든 상위 디렉터리에 대한 권한 구조는 다음과 같습니다.
drwxrwsrwx kjo11 proj1 /A/B/C/D/E/
drwxrwsrwx cwr8 proj1 /A/B/C/D/
drwxrwsr-x root proj1 /A/B/C/
drwxrwsr-x root proj1 /A/B/
drwxr-xr-x root root /A/
drwxr-sr-x root root /
(이 목록에는 kjo11
내 이름이 있습니다 $USER
. 공교롭게도 스크립트가 실패한 사용자의 이름 cwr8
입니다 . 어쨌든 우리는 모두 그 그룹에 속해 있습니다.)$USER
proj1
출력 uname
은 입니다 Linux
.
혼란스러워요. 내 관심을 끌었던 유일한 세부 사항은 오류가 이고 Operation not permitted
그렇지 않았다는 것이 Permission denied
었지만 그로부터 더 많은 것을 할 수는 없었습니다.
런타임 시 이러한 오류가 발생할 수 있는 상황은 무엇입니까 chmod
?
답변1
파일의 소유자나 수퍼유저만 파일의 권한을 변경할 수 있습니다. 이는 사용자가 파일을 소유한 그룹의 구성원이고 파일 및 상위 디렉터리에 대한 권한이 권한 설정이 가능해야 함을 나타내는 경우에도 마찬가지입니다.
umask
셸의 기능을 사용하여 생성 시 파일 및 디렉터리에 대한 권한을 제어할 수 있습니다.
$ umask 002
$ mkdir -p targetdir
$ ls -ld targetdir
...
drwxrwxr-x 2 dan wheel 2 19 Mar 15:13 targetdir
스크립트에서 이 작업을 수행하는 경우 디렉터리를 성공적으로 만든 후 복원할 수 있도록 원래 umask 값을 저장하는 것이 좋습니다.