[linux] real uid(ruid), effective uid(euid), chmod 를 통한 SetUID, SetGID, StickyBit 설정
ruid, euid
-
real uid( real user id ) 는 실제 본인의 id 를 이야기한다.
이 녀석의 값은 변하지 않는다. ( root 는 바꿀 수 있다. )
-
euid 는 현재 휘두를 수 있는 권한을 나타낸다.
euid 는 기본적으로 ruid 와 같은 값이다.
그러나 setuid bit 이 세팅된 프로그램을 수행시킬 때, 다른 값으로 할당될 수 있다.
-rwsr-xr-x 1 root root 45396 may 25 2012 /usr/bin/passwd
passwd 파일( setuid bit 이 세팅되어 있음 )을 user2 라는 ruid 를 가진 user 가 실행시키면,
이 때 ruid 는 user2 이지만, euid 는 owner 인 root 가 된다.
이렇게 수행시킬 때 바뀌기 전 original 값을 SUID ( Saved euid ) 라고 하며, 수행이 끝나면 euid 를 이 값으로 되돌린다.
chmod 를 통한 SetUID, SetGID, StickyBit 설정
-
chmod 는 보통 755 와 같이 3자리를 사용하지만 사실 4자리이다.
755 는 0755 와 같다.
첫번째 자리의 숫자는 각각의 의미를 갖는다.
4 : SetUID
실행시 그 파일의 소유자 권한으로 실행된다.
설정이 되면 권한에서 소유자의 실행(x)부분이 “s”, “S” 로 나타나게 된다.
비밀번호를 설정하는 usr/bin/passwd 가 사용 예로, 비밀번호 변경은 사실 root 만 가능하기에 root 의 권한을 잠시 빌린다.
2 : SetGID
실행시 그 파일의 소유그룹의 권한으로 실행된다.
설정되면 권한에서 소유 그룹의 실행(x)부분이 “s”, “S” 로 나타나게 된다.
1 : Sticky bit
해당 파일의 소유자에게만 쓰기 권한을 제공한다.
이 부분이 설정되면 해당 파일, 디렉토리는 public 에게 쓰기가 되어있다고 하더라도 해당 파일의 소유자가 아니면 쓰기에 관련된 작업을 할 수 없다.
설정되면 public 의 실행(x) 부분이 “t”, “T” 로 나타난다.
tmp 폴더가 이 목적으로 주로 사용되어, 다른 유저가 다른 유저의 tmp 정보를 읽기는 가능하지만, 쓰거나 지울 수는 없다.
-
$chmod u+s fileName
위 명령어를 수행하면 fileName 에 해당하는 파일의 user(u) 에게 s 비트를 부여한다.
위 명령어는 chmod 4755 와 같이 4자리 숫자로 표시할 수도 있다.
-
그룹에 s bit 를 추가하려면 g+s 를 하거나 2*** ( *** 은 755 와 같은 숫자 ) 된다.
-
sticky bit 을 추가하려면 o+t 를 하거나 1*** 를 하면 된다.
-
대소문자의 차이는 다음과 같다.
소문자는 기존 파일에 실행권한이 부여되어 있는 경우에 나타나고,
대문자는 기존 파일에 실행권한이 부여되지 않았을 경우에 나타난다.
즉 대문자의 경우는 동작하지 않음을 의미한다.
-
suid 의 보안 취약점은 다음과 같다.
root 가 로그인 한 후 자리를 비운 사이 hacker 가 다음 명령어를 수행하면 보안은 끝이다.
# cp /bin/sh home/hacker
# chmod 4775 /home/hacker/sh
위의 명령어들을 수행한 후 해커가 자신의 아이디로 로그인하여 sh 를 수행시키는 순간, root 로 shell 을 수행한 결과가 된다.
$ ./sh
#
-
suid, sgid 보안 취약점 문제를 예방하기 위해서 ( 100% 는 아니지만.. )
화면 잠금없이 자리를 비우지 말아야 하며, root 의 비밀번호를 수시로 바꾸어야 하며, 수시로 suid/sgid 가 불필요하게 세팅되어 있는 파일이 있는지 확인해서 제거해주어야 한다.
# find / -type f (-perm -04000 -o -perm -02000 )
or
# find / -perm -4000 -o -perm -2000 -print 2 > /dev/null
'IT 놀이터 > Linux' 카테고리의 다른 글
[Linux] 심볼릭 링크(Symbolic Link) 와 하드 링크(Hard Link) (0) | 2019.01.07 |
---|---|
[linux] Path 설정 방법 (0) | 2018.02.19 |
[linux] uid, gid, 그리고 permission 에 대한 기본 지식 (1) | 2018.01.25 |
Linux 가 Desktop 으로 잘 쓰이지 않는 이유 (0) | 2017.11.17 |
[linux] ln 명령어 (0) | 2017.11.01 |
댓글