확장 권한을 설정할 때는 `chmod
명령어를 사용합니다.
표준 권한을 부여할때와 동일하게 심볼릭(Symbolic)방식과 8진수(Octal)방식으로 설정할 수 있습니다.
권한설정 | 심볼릭 |
---|---|
setuid 설정 | u+s (u-s) |
setgid 설정 | g+s (g-s) |
sticky bit 설정 | o+t (o-t) |
/bin/passwd
파일로 확인해보자.
사진을 보면
/bin/passwd
파일은 setuid가 설정되어 있는 파일이었다.(rws)
그리고chomod
명령어를 통해서 u-s해줌으로써rws
->rwx
로 변경되어 setuid 설정이 해제 된 것을 볼 수 있다.
확장권한은 8진수 방식으로 설정할 때는 chmod [xxxx] file
형식으로 사용한다. 표준권한은 chmod [xxx] file
4개 x 중 첫 번째 x가 확장권한을 나타낸다.
그리고 8진수로 표현하므로 2진수 비트 3자리로 표현하게된다. (2의 3승 헷갈릴 수 있다...)
3자리 중 첫번째는 setuid, 두번째는 setgid, 세번째는 sticky bit를 표현한다.
이해를 돕기 위해 정리하면 확장권한을 설정하기 위해서는 8진수 4자리로 표현한다. 그리고 4자리 중 첫번째를 확장권한을 설정할 때 이용하는 것이다.
그리고 첫번째 8진수(2진수 3자리) 중 첫번쨰는 setuid, 두번쨰는 setgid, 세번째는 sticky bit인 것이다.
이처럼 각 위치에 0과 1로 표시해 권한을 설정한다.
100
의 경우는 setuid
010
의 경우는 setgid
001
의 경우는 sticky bit
여기까지 이해를 했다면 거의 다 한것이다. 이처럼 다시 0과 1로 변환 한 값을 8진수로 변환시키면
100
의 경우는 4 (setuid)
010
의 경우는 2 (setgid)
001
의 경우는 1 (sticky bit)
마지막으로 chmod [xxxx] file
중 첫번째 값으로 확장권한을 설정한다고 했기 때문에
setuid를 지정할때는
chmod 4000 file
setgid를 지정할때는chmod 2000 file
sticky bit를 지정할때는chmod 1000 file
만약 해제하고 싶다면 8진수 앞에 -
기호를 붙이면 된다.
/run/log/journal
디렉토리로 예시를 들어보자.
사진을 보면
/run/log/journal
디렉토리에는 setgid설정되어있었다. 그리고 setgid설정을 해제하기 위해서chmod -2000 /run/log/journal
명령어를 통해 setgid설정을 해제했다.
-2000
을 한 이유는 setgid는 2비트 3자리 중 2번째를 나타내기 때문에010
이다. 그리고010
을 8진수로 변환하면 2이기 때문에 4자리 중 첫번째 자리를 2로 설정하고, 나머지 3자리(표준권한)는 수정을 하지 않고 설정권한(setgid)만 해제할 것이기 때문에 -2000을 설정해주었다.
📌 하지만 다시 setgid를 설정하기 위해서chmod 2000 /run/log/journal
명령어를 작성하면 2의 값으로 setgid를 설정해주고 나머지 표준권한은은 모두 0으로 설정하는 것이므로d-----S---
가 되므로 조심하자