티스토리 뷰

linux 기초 특수 권한 SetUID




 리눅스에서는 일반적인 접근 권한 외에 특별한 접근 권한을 제공하는데 이를 특수 접근 권한 이라고 한다.

   - 일반적인 권한을 표현할 때 777,555등과 같이 세자리 숫자를 사용하지만, 특수 접근 권한은 네 자리를 사용한다.

      네 자리중 맨 앞자리 숫자가 1,2,4이면 특수 접근 권한 설정이 된다.




 특수 접근 권한

   - SetUID : 맨 앞자리가 4(4000)

   - SetGID : 맨 앞자리가 2(2000)

   - 스트키 비트(stiky bit): 맨 앞자리가1(1000)





SetUID

   - SetUID가 설정된 파일을 실행하면 해당 파일이 실행되는 동안에는 실행한 사용자의 권한이 아니라 파일 소유자의 권한으로 실행할 수 있도록 한다.




[user1@localhost ch1]$ touch aaa.exe

[user1@localhost ch1]$ chmod 755 aaa.exe

[user1@localhost ch1]$ ls -l set.exe

-rwxr-xr-x. 1 user1 user1 0 2월 22 00:45 aaa.exe*

[user1@localhost ch1]$ 


↑ aaa.exe라는 파일을 만들고, 위와같이 권한을 부여한다.




[user1@localhost ch1]$ chmod4755 aaa.exe

[user1@localhost ch1]$ ls -l aaa.exe

-rwsr-xr-x. 1 user1 user1 0 2월 22 00:45 aaa.exe*

[user1@localhost ch1]$ 

↑ SetUID 설정을 해준다. SetUID는 접근 권한에서 맨 앞자리에 4를 설정해야 한다. ex.4755


차이점을 잘 살펴보면..x -> s 로 바뀌었다.


- 이렇게 SetUID를 설정하면, 소유자의 실행 권한에 's'가 표시된다. 이는 aaa.exe를 실행하면 항상  user1의 권한을 가지고 실행된다는 의미이다.

 이는 실제로 SetUID가 설정되어 있는 명령을 통해 자세히 볼 수 있다. >> passwd 명령어



[user1@localhost ch1]$ ls -l /usr/bin/passwd

-rwsr-xr-x. 1 root root 27848 2월 22일 2015 /usr/bin/passwd*

[user1@localhost ch1]$

 ↑ Passwd 명령은 기본적으로 사용자 계정의 암호를 바꾸는 것이다. 그런데 실제로 암호가 저장되어 있는 파일인 /etc/shadow 파일은 root계정으로만 수정이 가능하다. 따라서 일반 사용자가 passwd 명령으로 암호를 바꾸려고 할 때 본인의 권한으로 실행한다면 암호를 바꿀 수 없다. /etc/shadow 파일을 수정할 수 없기 때문이다. 그런데 passwd 명령은 SetUID가 설정되어 있기 때문에 소유자인 root권한으로 실행되어 암호를 바꿀 수 있다. 

SetUID는 실제로 일반 사용자가 root 권한으로 명령을 실행할 필요가 있는 일부 명령에 설정하여 사용하는데, 이를 이용한 해킹도 등장하여 보안에 신경 써야 한다.




SetGID

   - SetGID는 SetUID와 거의 동일하다. SetGID가 설정된 파일을 실행하면 해당 파일이 실행되는 동안에 파일 소유 그룹의 권한으로 실행된다.SetGID는 2755와 같이 접근 권한에서 맨 앞자리에 2를 설정해야 한다.


[user1@localhost ch1]$ chmod2755 aaa.exe

[user1@localhost ch1]$ ls -l aaa.exe

-rwxr-sr-x. 1 user1 user1 0 2월 22 00:45 aaa.exe*

[user1@localhost ch1]$  

↑ aaa.exe 파일에 SetGID를 설정하면 그룹의 실행 권한에 's'가 표시 된다.