SharedIT | 묻고 답하기(AMP)

리눅스 파일권한 질문.. (setuid)

제가 리눅스 공부를 하고 있는데, 이해가 안되는게 있어서 문의드립니다.

setuid = 소유자의 실행권한을 빌려오는거고

본래 파일에 실행권한이 있었으면 소문자 s, 없었으면 대문자 S 가 표시된다고 배웠습니다.

(rws r-- r-- / rwS r-- r-- 이런식으로요)



근데 rwS r-- r-- 로 설정된 파일은 setuid가 설정되어 있어도

원래 소유자한테 실행권한이 없으니, 다른 사용자도 실행할 수 없는거 아닌가요? 

빌려올 권한 자체가 없는건데... 


제가 이해한게 맞는지 문의드립니다 ㅠ

Tags : 태그가 없습니다.

2개의 답변이 있습니다.

wansoo
  0 추천 | 11달 전

setuid는 그 파일을 소유자 인 것처럼 실행할 수 있도록 해 주는 특수 퍼미션이 되겠고요.


예를 들어 일반 사용자들이 자신의 암호를 스스로 변경할 수 있게 해 주려 할 경우에...

passwd라는 실행 파일을 일반 사용자들도 실행할 수 있어야만 자신의 암호를 변경할 수 있겠죠.

그렇지만... passwd를 실행한다는 것은 암호가 저장되어 있는 파일을 읽고/쓰기 할 수 있게 권한이 부여 된다는 의미가 되기 때문에 아무나가 암호가 저장되어 있는 파일을 읽고 쓸수 있게해 줘 버린다면 보안에 치명적인 문제가 생기게 되겠죠.

이를 해결할 수 있는 방법은 passwd 실행 파일은 아무나가 실행할 수 있지만 passwd가 접근해서 읽고 쓰기 작업하는 파일은 root 권한을 가진 사용자에게만 허용하게 하면 되겠는데...

passwd 실행 파일의 소유자를 root로 해 주고, passwd를 실행 시키는 모든 사용자가 root의 권한을 가지고 작동할 수 있게 해 줄때 setuid가 사용되게 되는 것이죠.

passwd 프로그램 자체가 자신의 계정에 대한 암호를 변경하는 용도이기 때문에 root 권한을 가지고 실행되어도 보안에 문제가 생기지는 않는 것이겠고요. paswd 프로그램 내에서 root 권한을 가진 사용자일 경우에만 다른 사용자의 암호도 변경할 수 있게 프로그램을 만들어 두었기 때문에 일반 사용자들이 자기 계정이외의 다른 사용자의 계정에 대한 암호를 바꿀 수는 없는 것이 되는 것이겠고요.


이 처럼, 어떤 자원을 특정 사용자만 자유롭게 접근할 수 있게 해 두고, 다른 사용자들은 지정한 프로그램을 통해서만 접근하게 하고 싶은 경우에 그 프로그램에 setuid를 지정해서 그 프로그램이 작동 중일때만 그 프로그램의 소유자(user) 권한을 가지고 실행되게 하고 싶을 때 setuid를 사용하면 되는 것이겠고요.


소문자 s는 해당 user에 대한 x (실행) permission이 지정되어 있어 실행할 수 있는 setuid가 되겠고요.

대문자 S는 해당 user에 대한 x (실행) permission이 지정되어 있지 않아 실행 자체가 안되는 상태이기 때문에 setuid가 지정되어 있으나 실행 권한이 없어 사용할 수 없는 setuid가 되는 것이고요.


setgid는 setuid와 같은 개념으로 생각한다면 어렵지 않게 이해 될 수 있을 거라 보여지고요.

setuid는 소유권자에 대한 것이고, setgid는 소유 그룹에 대한 것이란게 차이점이 되겠고 나머지는 같은 개념이 되는 것이라 생각하면 되다 보니...


sticky bit는 Other (다른 사용자: 소유자도 아니고 소유 그룹도 아닌) 사용자에 대한 permission 부분의 x ( 실행) permission에 t 또는 T로 표시되는 형태가 되겠는데...

sticky bit는 디렉터리에 대해서만 의미 있다고 보면 되겠습니다.

디렉터리 안에 저장되어 있는 파일들에 대해 소유자가 아님에도 불구하고 쓰기 권한을 제공하기 위해 사용하는 것으로 보면 되겠습니다.

sticky 비트 설정된 디렉터리로는 /tmp가 대표적인 예가 되겠고요.

임시 디렉터리인 tmp는 누구나가 임시 파일을 남길 수 있어야 하다 보니...

그렇다고 아무나가 tmp 디렉터리 자체를 삭제 한다거나, 다른 사람이 만들어둔 파일을 열어 본다거나 삭제 또는 변조 시켜서는 안되다 보니... /tmp 디렉터리 내에 아무나가 자기 파일을 만들어 마음껏 조작할 수는 있게 하지만 남이 만든 파일에 대해서는 함부로 건드리지 못하게 하는 용도로 사용할 수 있는 것이겠고요.


파일, 디렉터리의 퍼미션으로 rwxrwxrwx와 같이 세자리씩 421,421,421 로  user, group, other의 값을 표현하고 있는데요.

모든 권한을 다 줄때 rwx인 421로 7값으로, 읽고 쓰기 권한을 줄때는 rw-로 420인 6값, 읽기 권한만 줄때는 400으로 4값, 쓰고 실행할 권한을 줄때는 -wx인 021로 3값을, 쓰기 권한만 줄때는 --x로 001인 1값을 주는 형식으로 퍼미션을 설정하게 되는데요.

그러니깐 8진수 3자리로 user, group, other에 대한 퍼미션을 주게 되는데...

실제 Linux/Unix의 퍼미션이 rwxrwxrwx와 같이 8진수 세자리가 아니라 제일 앞에 3비트가 더 붙어 있는 방식으로 8진수 4자리... 즉, 3비트 4개인 12비트로 퍼미션을 설정할 수 있는 구조가 되겠고... 제일 앞에 8진수가 4일때 setuid, 2일때 setgid, 1일때 sticky bit가 되는 구조라고 보면 되겠네요.


setuid가 설정된 상태는 퍼미션이 4*** ( 4777, 4620, ...  등), setgid가 설정된 상태는 2***, sticky bit가 설정된 상태는 1***, setuid, setgid, sticky bit가 모두 설정된 상태는 7*** 이 된다고 보면 되겠네요.

topkslee
  0 추천 | 11달 전

약간 부연 설명드리자면,

rws r-- r--

- 소유자에게 실행권한이 설정되어 있고, setuid가 활성화 되어 있음.

=> 그러나 setuid가 활성화 되어 있지만 group, other 사용자는 r-- 읽기 권한만 있기때문에

     setuid가 활성화되어 있어도 실행 안됨. 


rwS r-- r--

- 소유자에게 실행권한이 설정되어 있지 않고, setuid 활성화 되어 있음.

=> 그러나 소유자가 실행권한이 있기때문에 setuid 효력 없음.

     그리고  group, other 사용자는 r-- 읽기 권한만 있기때문에 실행 안됨.


* 실제로 setuid가 적용되려면 r-x 실행권한도 있어야 가능함.