본문 바로가기
IT 놀이터/Linux

[linux] real uid(ruid), effective uid(euid), chmod 를 통한 SetUID, SetGID, StickyBit 설정

by 돼지왕 왕돼지 2018. 1. 26.
반응형

 [linux] real uid(ruid), effective uid(euid), chmod 를 통한 SetUID, SetGID, StickyBit 설정


0755, 1, 1755, 2, 2755, 4, 755, chmod, chmod 4755, chmod 4자리, chmod 를 통한 SetUID, chmod 첫번째 자리, effective uid, effective uid(euid), EUID, Find, find / -perm -4000 -o - perm -2000 -print 2 > /dev/null, find / -type f(-perm -04000 -o -perm -02000), g+s, o+t, Original, Public, real uid, real user id, root 비밀번호, ruid, rws, S, s S 차이, saved euid, setgid, setuid, setuid bit, sgid, stickybit, StickyBit 설정, suid, T, t T 차이, tmp 폴더, u+s, User, usr/bin/passwd, [linux] real uid(ruid), 권한, 대문자 미동작, 대소문자 차이, 보안 취약점, 소유자 전용 쓰기 권한, 실행시 소유자 권한으로 실행, 화면잠금


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




반응형

댓글