Setuid가 사용자가 권한 상승된 파일을 실행할 수 있도록 하는 방법

Linux에서 실행 파일을 실행할 때, 일반적으로 현재 사용자 및 그룹 ID로 실행됩니다. 그러나 때때로 해당 파일을 다른 사용자(예: root)로 실행해야 할 필요가 있습니다. 사용자 계정을 전환하는 대신, setuid를 사용하여 현재 사용자 대신 파일 소유자로 실행할 수 있습니다. 여기에서는 setuid가 어떻게 작동하는지, 그리고 사용자가 권한 상승된 실행 파일/바이너리를 실행할 수 있도록 하는 방법을 설명합니다.
setuid가 작동하는 방법은?
Setuid는 SET User ID on execution의 약자입니다. root 사용자가 생성한 “identity”라는 실행 파일이 있다고 가정해 보겠습니다. 이를 실행하면 사용자 ID, 그룹 ID 및 사용자 권한으로 실행됩니다. “identity” 파일에 setuid 비트가 설정되어 있으면, 이를 실행할 때 root 사용자 및 해당 사용자 권한으로 실행됩니다.
예를 들어, “identity” 파일의 소유권을 먼저 확인하고 root 사용자에 의해 소유되고 있는지 확인할 수 있습니다. 권한 문자열은 사용자, 그룹 및 기타에 대해 실행 가능(x) 비트가 설정되어 있음을 보여줍니다.
사용자 “john1”이 “identity” 파일을 실행하면, 실행 중에 프로세스가 생성됩니다. 프로세스 목록에 표시된 바와 같이, 프로세스는 “john1” 사용자 이름 및 사용자 ID로 생성되고 실행됩니다.

다음으로, root 사용자로서 “identity” 파일의 setuid 비트를 설정합니다:
chmod u+s /usr/bin/identity“u”는 setuid 비트(+s)가 사용자에 대해서만 설정되어야 함을 나타냅니다.
소유자의 경우, 권한 문자열의 실행 가능 부분에서 “x”가 “s”로 대체된 것을 볼 수 있습니다. 실행 가능 파일에서 “s”를 발견하면, setuid 비트가 설정되었음을 의미합니다.
chmod 명령의 숫자 변형도 아래와 같이 사용할 수 있습니다.
chmod4755/usr/bin/identity숫자 권한 문자열에 4를 추가하면 setuid 비트의 포함을 나타냅니다.
다음은 “john1”이 “identity” 파일을 다시 실행할 때 발생하는 일입니다. 실행 중인 프로세스 목록을 보면, 이제 프로세스가 “john1” 대신 “root” 사용자에 의해 생성되고 실행되고 있음을 알 수 있습니다.

setuid 비트의 중요한 사용
대부분의 경우 전문가들은 root 사용자로 애플리케이션을 실행하지 말라고 조언합니다. 그러나 특정 파일은 root 권한으로 실행해야 하는 경우가 있습니다. 예를 들어, Linux 시스템에 기본적으로 설치된 passwd 유틸리티는 setuid 비트가 설정되어 있습니다.
그 이유는 간단합니다: 사용자에 대한 비밀번호 정보는 “ /etc/passwd “ 및 “ /etc/shadow “ 파일에 저장되며, 이는 “root”만 수정할 수 있습니다. “john1”이 자신의 비밀번호를 변경하려고 할 때, 그는 앞서 언급한 두 파일의 정보를 수정할 수 있는 권한이 필요합니다. passwd에 setuid 비트가 설정되어 있으면 “john1”은 사용자 비밀번호를 변경하고 두 파일의 정보를 업데이트하기 위해 일시적으로 root 권한을 가질 수 있습니다.
Setuid 보안 위험
조심하지 않으면 공격자가 setuid 바이너리를 악용하여 시스템을 제어할 수 있습니다. 사용자는 일반적으로 setuid 프로그램을 설치해서는 안 되며, 특히 자신 이외의 사용자에 대한 setuid는 피해야 합니다. 가장 중요한 것은 홈 폴더에 root 사용자에 대한 setuid가 활성화된 바이너리가 없어야 한다는 것입니다. 이러한 것들은 일반적으로 트로이 목마 또는 악성 소프트웨어입니다.
결론
Setuid는 실행 파일에만 설정할 수 있습니다. 마찬가지로, setgid 비트도 설정할 수 있으며, 이는 그룹의 모든 구성원이 소유자 권한으로 실행 파일을 실행할 수 있게 합니다.
setuid 및 setgid 비트는 보안에 민감하므로 자격을 갖춘 시스템 관리자만 사용해야 합니다.
다음 읽기:
- Linux에서 공유 디렉토리의 파일을 관리하기 위해 Sticky Bit 사용 방법
- Linux 터미널에서 철자 검사하는 방법
- Linux에서 파일을 검색하기 위한 find, locate, which 및 whereis 명령 사용