예:
# show starting permissions
% stat -c '%04a' ~/testdir
0700
# change permissions to 2700
% chmod 2700 ~/testdir
# check
% stat -c '%04a' ~/testdir
2700
# so far so good...
# now, change permissions back to 0700
% chmod 0700 ~/testdir
# check
% stat -c '%04a' ~/testdir
2700
# huh???
# try a different tack
% chmod g-w ~/testdir
% stat -c '%04a' ~/testdir
0700
버그 또는 기능?
chmod 0700 ~/testdir
권한을 에서 로 변경하는 데 2700
실패 하는 이유는 무엇입니까 0700
?
여러 다른 파일 시스템에서 동일한 동작이 관찰됩니다. 예를 들어, 최신 출력에서는 mount
관련 출력 라인은 다음과 같습니다.
/dev/sda5 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
또한, FWIW
% stat -c '%04a' ~/
0755
답변1
GNU 를 사용한다고 가정하면 chmod
이 내용은 다음 문서에 설명되어 있습니다.맨페이지:
chmod
별도로 명시적으로 지정하지 않는 한 디렉터리의 set-user-ID 및 set-group-ID 비트는 유지됩니다.u+s
앰퍼샌드 및 기타 기호 모드를 사용하여 이러한 비트를 설정하거나 지울 수g-s
있으며 숫자 모드를 사용하여 이러한 비트를 설정할 수 있습니다(지울 수는 없음).
이것은 허용된다POSIX:
8진수에 설정된 각 비트에 대해 아래 표에 표시된 해당 파일 권한 비트가 설정되어야 하며 다른 모든 파일 권한 비트는 지워져야 합니다. 일반 파일의 경우 set-user-ID-on-execution 또는 set-group-ID-on-execution에 해당하는 8진수로 설정된 각 비트에 대해 다음 표에 표시된 비트가 설정되어야 합니다. 8진수가 설정되면 지워집니다. 다른 파일 형식의 경우 set-on-execute-user-ID 또는 set-on-execute-group-ID 비트를 설정하거나 지우는 요청이 허용되는지 여부는 구현에 따라 정의됩니다.
GNU의 동작 이유는 다음 chmod
과 같습니다.coreutils
6.0 릴리스 노트:
chmod
,install
,mkdir
디렉토리의 set-user-ID 및 set-group-ID 비트는 이제 명시적으로 달리 요청하지 않는 한 보존됩니다.chmod 755 DIR
예를 들어, set-user-ID 및 set-group-ID 비트는chmod u=rwx,go=rx DIR
이제 및 에서도 마찬가지로DIR
삭제되지 않고 유지됩니다 . 이러한 비트를 지우려면 기호 모드(예: )에서 명시적으로 언급하십시오 . 이를 설정하려면 기호 또는 숫자 모드로 명시적으로 언급하십시오(예: , ) . 이러한 변경은 이러한 비트가 상위로부터 상속되는 시스템을 용이하게 하기 위한 것입니다. 불행하게도 다른 운영 체제는 여기서 일관성이 없으며 이식 가능한 스크립트는 이러한 비트가 명시적으로 언급되더라도 이러한 비트가 설정, 해제 또는 예약되었다고 가정할 수 없습니다. 예를 들어, OpenBSD 3.9는 setgid 비트를 유지 하지만 지웁니다. 대조적으로, Solaris 10 및 모든 버전은 setgid 비트를 유지하므로 이를 지우 려면 유사한 방법을 사용해야 합니다.mkdir -m 755 DIR
mkdir -m u=rwx,go=rx DIR
mkdir -m u=rwx,go=rx,-s DIR
mkdir -m 2755 DIR
mkdir -m u=rwx,go=rx,g+s DIR
mkdir -m 777 D
D
chmod 777 D
mkdir -m 777 D
mkdir -m g-s D
chmod 0777 D
D
chmod g-s D
이 주제에 대한 추가 내용이 있습니다.8391 화, 앞에 0을 포함하는 것은 모호함의 또 다른 이유입니다(사용자에게는 지워진 비트 또는 8진수 값을 나타낼 수 있음). 매뉴얼 coreutils
에는 전용 섹션도 있습니다.사용자 ID를 디렉터리화하고 설정하고 그룹 ID 비트를 설정합니다.;이것은 문제가 있는 비트를 지울 수 있는 GNU 확장이 있음을 나타냅니다.
chmod =700 ~/testdir
chmod 00700 ~/testdir
둘 다 클리어 비트입니다(그러나 둘 다 이식 가능하지 않습니다).
답변2
이 시도:
chmod 000700 ~/testdir
답변3
시작 권한 표시
% stat -c '%04a' ~/testdir 0700
==> 알았어!
권한을 2700으로 변경하세요
% chmod 2700 ~/testdir
==> 그룹ID를 설정하고 있으니 참고해주세요!
확인하다
% stat -c '%04a' ~/testdir 2700
==> 알았어!
여태까지는 그런대로 잘됐다...
이제 권한을 다시 0700으로 변경하세요.
% chmod 0700 ~/testdir
==> 제한된 삭제 또는 고정 태그(그룹 ID 아님)가 제거된다는 점에 다시 한번 유의하시기 바랍니다.
확인하다
% stat -c '%04a' ~/testdir 2700
아? ? ?
다양한 전략을 시도해보세요
% chmod gw ~/testdir % stat -c '%04a' ~/testdir 0700
================================================= = ========= 마지막으로 다음 명령을 사용하여 성공할 수 있습니다.
chmod 000700 ~/testdir