가끔씩만 sudo 비밀번호를 요청하세요.

가끔씩만 sudo 비밀번호를 요청하세요.

이것은 Linux 권한에 대해 더 자세히 알아보려는 호기심에 가깝습니다. 따라서 암호를 입력하지 않고도 일부 명령을 실행할 수 있지만 다른 명령은 실행할 수 없는 이유를 이해할 수 없습니다. 나는 /usr/bin/sudo에 SUID 비트가 있다는 것을 알고 있습니다. 이는 분명히 의미가 있습니다. 권한을 루트로 승격하려고 하는데 /usr/bin/sudo를 어떤 방식으로든 사용할 수 있는지 알고 싶습니다. (이것은 승인된 컴퓨터에 있으므로 걱정하지 마십시오.)

여기서 나는 실제로 David라는 것을 밝힙니다.

david@traverxec:~/bin$ id
uid=1000(david) gid=1000(david) groups=1000(david),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev)

/usr/bin/sudo의 SUID 비트 설정과 두 관련 바이너리의 권한을 표시합니다.

david@traverxec:~/bin$ ls -la /usr/bin/sudo
-rwsr-xr-x 1 root root 157192 Oct 12 09:49 /usr/bin/sudo

david@traverxec:~/bin$ ls -la /usr/bin/ls
-rwxr-xr-x 1 root root 138856 Feb 28  2019 /usr/bin/ls

david@traverxec:~/bin$ ls -la /usr/bin/journalctl 
-rwxr-xr-x 1 root root 67672 Aug 20  2019 /usr/bin/journalctl

sudo를 사용하여 웹 서버 로그를 확인하는 아래 표시된 특정 명령은 완벽하게 작동합니다.그리고 비밀번호를 묻는 메시지도 표시되지 않습니다!

david@traverxec:~/bin$ /usr/bin/sudo /usr/bin/journalctl -n5 -unostromo.service | /usr/bin/cat 
-- Logs begin at Mon 2020-03-02 12:00:21 EST, end at Mon 2020-03-02 12:11:05 EST. --
Mar 02 12:00:44 traverxec su[22169]: pam_unix(su:auth): authentication failure; logname= uid=33 euid=0 tty=pts/0 ruser=www-data rhost=  user=david
Mar 02 12:00:46 traverxec su[22169]: FAILED SU (to david) www-data on pts/0
Mar 02 12:07:26 traverxec nhttpd[23957]: /../../../../bin/sh sent a bad cgi header
Mar 02 12:07:38 traverxec nhttpd[24009]: /../../../../bin/sh sent a bad cgi header

sudo를 사용하여 다른 명령을 실행하려고 할 때시스템에서 비밀번호를 입력하라는 메시지를 표시합니다.

david@traverxec:~/bin$ /usr/bin/sudo /usr/bin/ls /etc/shadow
[sudo] password for david: 

왜 이런거야?

답변1

Kusalananda가 이미 언급했듯이 설명하는 동작을 보관할 수 있는 구성 파일을 통해 sudo를 구성합니다.

사용자는 특정 명령을 호출하기 위해 암호를 제공할 필요가 없습니다. 그렇다고 해서 완전한 액세스 권한이 있다는 의미는 아닙니다 sudo. 단일 명령을 실행할 수 있는 권한만 있습니다.

예시 구성:

david ALL=(ALL) NOPASSWD: /usr/bin/journalctl 

(자세한 내용은https://askubuntu.com/questions/147241/execute-sudo-without-password)

  • 사용자 "david"에 대한 비밀번호가 있더라도 자동으로 를 사용할 수 있다는 의미는 아닙니다 sudo.
  • sudo를 통해 보유한 권한을 나열하는 명령은 없습니다(액세스가 필요하지 않음 /etc/sudoers). sudo의 작동 방식을 통해 추론됩니다. Sudo는 명령을 호출할 때 구성을 확인하기만 하며 이 프로세스에는 수퍼유저 권한이 필요합니다. 따라서 설정을 나열하는 권한 없는 도구를 갖는 것은 불가능합니다.

개인적인 제안: 권한 상승을 위해 다른 방법을 시도해 보세요. Sudo는 올바르게 구성되면 매우 안전합니다.

답변2

sudo입력한 비밀번호는 기억되며 한동안(구성에 따라) 다시 메시지가 표시되지 않습니다.

파일 에는 다음과 같은 구성이 /etc/sudoers있습니다 .sudo

  • 어떤 사용자
  • 어떤 명령을 내리나요?
  • 비밀번호가 필요한지 여부.

비밀번호 없이 특정 명령을 실행할 수 있도록 설정되었을 수도 있습니다.

이 모든 것은 set-uid 비트와 관련이 없습니다. 당신은 프로그램에 루트 권한을 부여하는 것을 알고 있는 것 같습니다(기능: 루트가 죽었으므로 기능이 오래 지속됨 참조). 사람들은 sudo무엇이든 할 수 있으며 코드와 구성 파일을 기반으로 무엇을 할지 결정합니다.

관련 정보