실행 파일을 보면 sudo
:
$ which sudo
/usr/bin/sudo
$ ls -la /usr/bin/sudo
---s--x--x 2 root root 208808 Jun 3 2011 /usr/bin/sudo
권한 비트를 가지고 있음을 알 수 있습니다 ---s--x--x
. 다음과 같이 분류 할 수 있습니다.
-|--s|--x|--x
- - first dash denotes if a directory or a file ("d" = dir, "-" = file)
--s - only the setuid bit is enabled for user who owns file
--x - only the group execute bit is enabled
--x - only the other execute bit is enabled
따라서 프로그램에 setuid 비트가 활성화 된 경우 (SUID라고도 함) 이는 누군가이 프로그램을 실행할 때 파일을 소유 한 사용자의 자격 증명 (일명)으로 실행됨을 의미합니다. 이 경우 루트.
예
사용자 saml로 다음 명령을 실행하면
$ whoami
saml
$ sudo su -
[sudo] password for saml:
당신의 실행 것을 알 수 있습니다 sudo
실제로는 루트로 실행 :
$ ps -eaf|grep sudo
root 20399 2353 0 05:07 pts/13 00:00:00 sudo su -
setuid 메커니즘
SUID의 작동 방식이 궁금한 경우을 살펴보십시오 man setuid
. 다음은 매뉴얼 페이지에서 발췌 한 내용입니다.
setuid ()는 호출 프로세스의 유효 사용자 ID를 설정합니다. 발신자의 유효 UID가 루트 인 경우 실제 UID 및 저장된 set-user-ID도 설정됩니다. Linux에서 setuid ()는 _POSIX_SAVED_IDS 기능이있는 POSIX 버전과 같이 구현됩니다. 이렇게하면 set-user-ID (root 이외의) 프로그램이 모든 사용자 권한을 삭제하고 권한이없는 일부 작업을 수행 한 다음 원래의 유효한 사용자 ID를 안전한 방식으로 다시 사용할 수 있습니다.
사용자가 root이거나 프로그램이 set-user-ID-root 인 경우 특별한주의를 기울여야합니다. setuid () 함수는 호출자의 유효 사용자 ID를 확인하고 수퍼 유저 인 경우 모든 프로세스 관련 사용자 ID가 uid로 설정됩니다. 이 문제가 발생한 후에는 프로그램이 루트 권한을 되 찾을 수 없습니다.
여기서 핵심 개념은 프로그램에 실제 사용자 ID (UID)와 유효 ID (EUID)가 있다는 것입니다. 이 비트가 활성화되면 Setuid는 유효 사용자 ID (EUID)를 설정합니다.
따라서 커널의 관점에서 우리 예제에서는 saml
여전히 원래 소유자 (UID) 인 것으로 알려져 있지만 EUID는 실행 파일의 소유자와 누구에게나 설정되어 있습니다.
설정
또한 sudo 명령에 대한 권한을 분류 할 때 두 번째 비트 그룹이 그룹 권한에 대한 것임을 언급해야합니다. 그룹 비트에는 set group id (일명 setgid, SGID)라는 setuid와 비슷한 기능이 있습니다. 이것은 소유자 자격 증명 대신 그룹 자격 증명으로 프로세스를 실행한다는 점을 제외하고 SUID와 동일합니다.
참고 문헌
sudo -s
대신 사용해야합니다 . :)sudo su
su