[Linux/개념] SetUID, SetGID 란

SUID, SGID 개념을 한번 정리해두기 위해 포스팅을 하려한다.

두 녀석 모두 유닉스/리눅스 시스템의 특수 권한 비트로, 파일을 실행할 때 일시적으로 파일 소유자(또는 그룹) 권한으로 실행할 수 있게 하는 기능이다. 이는 일반 사용자가 특정 프로그램 실행 시 소유자의 권한으로 접근해야 하는 경우(예: 비밀번호 변경 프로그램) 에 유용하다.

 

SetUID (Set User ID)

실행 파일에 이 권한이 설정되면, 파일을 실행하는 사용자가 실행 파일의 소유자(Owner)의 권한으로 해당 프로세스를 실행하게 된다.
예를 들어, /usr/bin/passwd 파일은 보통 root 소유로 setuid가 설정되어 있어, 일반 사용자가 실행해도 root 권한으로 비밀번호를 변경할 수 있다.

아래와 같이, 처음의 소유자 항목이 rw's'로 설정돼있는 것을 확인할 수 있다.

즉, 소유자가 root인 /usr/bin/passwd 파일에 대해서 일반 사용자가 해당 파일을 실행 가능함을 알 수 있다.

  • 설정방법: chmod u+s filename 또는 chmod 4755 filename

 

SetGID (Set Group ID)

SetGID 권한이 설정된 실행 파일을 사용자가 실행하면, 실행하는 사용자가 아닌 파일 그룹 소유자의 권한으로 프로세스를 실행하게 된다. 디렉토리에 SetGID가 설정되면, 해당 디렉토리에 생성되는 새 파일이나 하위 디렉토리는 자동으로 부모 디렉토리의 그룹 소유권을 상속받게 된다. 여러 사용자가 공동으로 작업하는 공유 디렉토리에서 파일 생성 시 그룹 소유권을 일치시킬 때 유용하다.

  • 설정방법: chmod g+s filename 또는 chmod 2755 filename

아래와 같이 기존 /usr/bin/passwd의 권한을 변경해보았다.

이번에는 중간의 그룹 항목이 'r-s'로 설정돼있는 것을 확인할 수 있다.