글 작성자: nouu

http://www.yes24.com/Product/Goods/94484054

 

이것이 우분투 리눅스다(개정판) - YES24

우분투 리눅스를 학습하기 위한 최적의 환경에서 현장감 넘치는 실무를 경험해보자!우분투 리눅스는 데비안 리눅스를 기초로 그놈(GNOME) 데스크톱 환경을 사용하는 리눅스 배포판이다. 우분투

www.yes24.com

https://eunguru.tistory.com/115

 

[UNIX / Linux] 특수 권한(setuid, setgid, sticky bit)

프로세스 번호 - UNIX 시스템에서는 프로세스에 다섯 가지 번호 부여 1. 프로세스에 부여되는 번호들 1) 프로세스 식별자(PID) 2) 실제 사용자 ID(RUID) 3) 유효 사용자 ID(EUID) 4) 실제 사용자 그룹(RGID) 5

eunguru.tistory.com

https://nalt-it.tistory.com/24

 

[리눅스] 특수 권한과 umask

특수 권한 (SetUID , SetGID , Stickybit) 특수 권한은 총 3가지가 있다. SetUID , SetGID , Stickybit가 있다. 오늘은 이에 대해 알아보겠다. SetUID chmod 4xxx [파일명] 사용자가 SetUID 권한이 설정되어 있는..

nalt-it.tistory.com

https://goitgo.tistory.com/13

 

[Linux] 특수권한 SetUID , SetGID

안녕하세요 ;) 오늘은 특수권한인 SetUID와 SetGID에 대해서 포스팅을 할거에요! 실제로 이 SetUID와 SetGID는 보안과 직접적으로 연관된 부분이 많기 때문에 이부분에 대해서는 따로 포스팅 할 예정입

goitgo.tistory.com

https://nouu94.tistory.com/75

 

[21.11.23] 리눅스 허가권과 소유권

http://www.yes24.com/Product/Goods/94484054 https://eunguru.tistory.com/115 [UNIX / Linux] 특수 권한(setuid, setgid, sticky bit) 프로세스 번호 - UNIX 시스템에서는 프로세스에 다섯 가지 번호 부여 1...

nouu94.tistory.com

https://mamu2830.blogspot.com/2019/10/setuid-setgid-sticky-bit.html

 

setuid setgid 매우 자세하게!

setuid, setgid, stickybit 대해 매우 자세하게 설명한 포스트입니다!

mamu2830.blogspot.com

 

 

 

리눅스의 특수권한은 총 3가지가 있다.(setUID, setGID, Sticky bit)

리눅스 허가권과 소유권 글에서 파일이나 디렉토리의 허가권은 12비트라고 설명했다. 기존 소유자, 그룹 소유자, others에 추가하여 맨 앞에 3비트는 특수권한을 지정하는 비트이기 때문이다. 즉 그림으로 나타내면 다음과 같은 구조로 나타낼 수 있다. 

 

 

setUID

setUID가 설정된 파일을 허가권이 없는 others가 해당 파일을 실행 시 일시적으로 파일의 소유자가 된다. 만약 setUID가 설정되었으며, 소유자가 root 권한의 파일 실행시킨다고 가정해보자. others가 해당 파일을 실행하게 된다면 순간적으로 파일의 소유자인 root의 권한을 빌려오게 되는 것이다. 

# chmod u+s test # symbolic method(상대 모드)
# chmod 4755 test # 8진수 기반의 설정(절대 모드)

 

해당 명령어로 허가권을 변경하면 ls- l 명령시 다음과 같은 구조가 만들어진다. 

 

즉 특수권한에 4 또는 u+s를 설정한다면 setUID가 설정된다. 

 

그러면 setUID를 설정하는 이유는 무엇인가? 일반적으로...

 

슈퍼 유저인 root만 접근할 수 있는 파일이나 명령등에 대해서 일반 사용자에게 접근이 가능하도록 할 때 setUID를 설정한다. 

 

이렇게 설정한다면 root가 일일이 일반 사용자에게 권한을 부여하지 않아도 일반사용자는 접근할 수 있기 때문이다. (시스템 운영의 효율성이 극대화 됨)

 

가장 대표적인 파일은 password 변경 실행파일이 있는 /usr/bin/passwd이다.

 

ls -al /usr/bin/passwd

 

만약 사용자 접근 권한에 실행 자리에 소문자 s가 있다면 특정 권한이 없는 임의의 사용자가 소유자의 권한을 임시로 빌려서 해당 파일이나 명령을 사용할 수있으며, 만약 대문자 S가 있다면 실행 권한이 없어 명령을 사용할 수 없다. (대문자 S가 발동되는 조건은 소유자의 실행을 없애주면 대문자 S가 나온다.) 

ex) chmod 4644 /usr/bin/passwd # 해당 소유자의 권한이 6(rw-) 이므로 대문자 S가 나올 것임.

 

기본적으로 /usr/bin/passwd 명령 실행 파일은 소유자 실행 권한에 s가 있으므로 다른 사용자도 해당 권한을 순간적으로 소유자 root로 전환하여 명령어를 사용할 수 있다.

 

# exit # 해당 명령으로 root에서 빠져나옴. nouu 사용자계정명으로 전환
# pwd # nouu의 현재 경로 확인 
# passwd nouu

위와 같은 실습으로 passwd 명령어를 일반 사용자도 사용 가능한 것을 볼 수 있다. (단 자기 자신의 비밀번호만 sudo 없이 사용 가능)

You must choose a longer password 명령이 뜬 이유는 우분투 리눅스 패스워드 정책 때문이다. 일반 사용자가 패스워드를 변경할 때 최소 8자리 이상 and 대문자, 소문자, 특수문자, 숫자 중 3가지 이상의 조합을 해야된다!!

 

/etc/passwd 의 권한 : 644 (root만 수정이 가능함)

/etc/shadow 의 권한 : 644 (root만 수정이 가능함)

 

이와 같이 패스워드 변경시 /etc/passwd, /etc/shadow 파일의 내용이 변경될려면 root의 권한을 사용해야 되기 때문에 setUID를 사용한다고도 볼 수 있다.

 

 

 

setGID

setGID 역시 setUID와 마찬가지로 설정된 파일을 허가권이 없는 others가 해당 파일을 실행 시 일시적으로 파일의 그룹 소유자가 된다. 그러니까 setGID가 설정된 파일을 실행한다면 일시적으로 실행이 끝날 때 까지 자신의 GID가 파일 그룹에서 설정된 GID가 된다. 

 

 

 

find / -perm -2000 명령어를 이용하여 (setGID가 설정된 파일이나 디렉토리를 찾을 수 있다.)

 

이 중에서 우리는 wall(write to all) 라는 명령어를 통해 setGID를 실험해보겠다. (참고로 wall(write to all) 명령어는 모든 유저(모든 가상콘솔 터미널)에 접속한 유저에게 메세지를 보내는 명령어이다. 브로드캐스트 기반으로 해당 명령어가 작동한다. 

 

 

가상 콘솔 터미널 2번(TTY2)인 nouu2 일반 사용자 계정에서 에서 해당 명령어를 실행하여 가상 콘솔 터미널 1번(TTY1)과 가상 콘솔 터미널 3번(TTY3)에서 메세지가 브로드캐스트 기반으로 오는 것을 볼 수 있다. 이것이 가능한 이유가 바로  wall 실행 파일이 setGID이 설정되어 있어 일반 사용자 누구나 명령어를 사용할 수 있다. 

 

# ll -d /usr/bin/wall # 명령어 wall의 실행파일이 있는 /usr/bin/wall 파일의 구성을 확인

해당 명령어를 실행한다면 다음과 같이 wall 실행 파일의 inode 권한을 볼 수 있다. 그룹 소유자의 실행 권한 여부인 x 대신 s가 붙은 것을 볼 수 있다. 

 

또한 wall의 그룹 소유명은 tty로 되어 있는데 tty의 뜻은 Teletypewriter(전신 타자기) 유닉스 OR 리눅스에서는 터미널을 가리키는 단어이다. 모든 directory와 특별 file등을 모두 file 취급하는 리눅스의 특성상 tty도 file로 취급한다. 그렇기에 tty(터미널) 파일이 존재한다.

 

 

# ll -d /dev/tty # dev directory에 tty 파일 검색

 

다음과 같이 /dev/tty 파일을 보면 c(character special file)이며, 그룹 소유자가 tty인 것을 볼 수 있다. 그룹이 tty로 설정되어 있고 others가 rw-이므로 모든 유저가 각자 터미널을 읽고 쓸 수 있지만...

https://ko.wikipedia.org/wiki/%EC%9E%A5%EC%B9%98_%ED%8C%8C%EC%9D%BC

 

장치 파일 - 위키백과, 우리 모두의 백과사전

장치 파일(device file) 또는 특수 파일(special file)은 유닉스 계열 운영 체제에서 마치 흔한 파일처럼 보이는 파일 시스템 안에 보이는 장치 드라이버의 인터페이스이다. 소프트웨어가 표준 입출력

ko.wikipedia.org

 

wall 명령어는 모든 터미널에 메세지를 보내는 명령어 이기 때문에 그 이상의 많은 명령어가 필요하다. 그래서 터미널을 사용하려면 tty 그룹이어야 된다. 따라서 /usr/bin/wall 파일에 setGID를 걸어서 /usr/bin/wall을 실행할 때에 GID가 tty의 GID가 돠오 /dev/tty를 사용할 수 있게 만든 것이다.

 

 

setGID의 또 다른 기능 : directory에 setGID를 설정했을 경우 그 디렉토리 안에 파일을 만들면 어떤 사용자가 만들더라도 디렉토리의 GID로 적용되어 생성된다.

 

만약 root가 공용 디렉토리를 만들고 해당 디렉토리에 setGID를 설정한다면 해당 디렉토리 내에 어떤 유저라도 임의의 파일을 만든다면 해당 파일의 그룹은 무조건 "root"로 적용된다!

 

setGID의 두번째 기능을 실습 

# mkdir public 
# chmod 2777 public 
# ll -d public

drwx rwrwx 2 root root 4096 Nov 30 08:20 public/

 

# cd ./public/
# su nouu
$ touch setGIDFile
$ mkdir setGIDDirectory

$ ll

drwxrwsrwx  3 root root 4096 Nov 30 08:26 ./
drwxr-xr-x 22 root root 4096 Nov 30 08:20 ../
drwxrwsr-x  2 nouu root 4096 Nov 30 08:26 setGIDDirectory/
-rw-rw-r--  1 nouu root    0 Nov 30 08:26 setGIDFile

 

setGIDFile에 그룹 소유자가 root가 된 것을 볼 수 있으며, setGIDDirectory/ 디렉토리를 보면 그룹 소유자 root, 그룹 소유자 실행 권한이 s 즉! setGID가 된 것을 볼 수 있다. WOW

 

 

한번 더 setGIDDirectory(/public/setGIDDirectory) 경로 내에 파일과 디렉토리를 만들어보자. 

 

$ mkdir nouuDirectory
$ touch nouuFile

$ll #alias ls -l

 

이 역시 마찬가지로 nouuDirectory와 nouuFile이 그룹 소유자 root가 되며, nouuDirectory의 그룹 소유자 실행 권한이 s로 바뀐다.

 

 

 

setUID와 setGID는 일시적으로 권한 부여를 주는 행위이며, 각각의 기능을 숙지하면 앞으로 더 다양한 사용법과 보안등의 관점을 꿰뚫을 수 있을 것이다.

 

 

 

https://mamu2830.blogspot.com/2019/10/setuid-setgid-sticky-bit.html?showComment=1638195719475#c1428449535398026399 

 

setuid setgid 매우 자세하게!

setuid, setgid, stickybit 대해 매우 자세하게 설명한 포스트입니다!

mamu2830.blogspot.com

해당 블로그가 참 많이 도움이 됐다.