나는 있고 권한이 /sbin
있음 shutdown
을 알았습니다 rwxr-xr-x
. 이것이 누군가가 그것을 실행할 수 있다는 것을 의미하지 않습니까?
shutdown
명령 에 대해 이야기하고 있다고 생각합니다 .
shutdown
.
나는 있고 권한이 /sbin
있음 shutdown
을 알았습니다 rwxr-xr-x
. 이것이 누군가가 그것을 실행할 수 있다는 것을 의미하지 않습니까?
shutdown
명령 에 대해 이야기하고 있다고 생각합니다 .
shutdown
.
답변:
누구나 실행할 수 shutdown
있지만 시스템 종료를 트리거하려면 루트 권한이 필요합니다. 그러나 shutdown
setuid가 아니므로 루트 만 성공적으로 실행할 수 있습니다. 이 shutdown
프로그램은 권한을 확인하고 문제가 있는지 알려주는 데 충분하지만 시스템을 순진하게 종료하더라도 아무 일도 일어나지 않습니다.
GLENDOWER : 광대 한 곳에서 영혼을 부를 수 있습니다.
HOTSPUR : 왜 그렇게 할 수 있습니까? 그러나 당신이 그들을 부를 때 그들은 올 것입니까?
(헨리 4 세에서)
shutdown
와 다르지 않습니다 /bin/rm
. 누구나 실행할 수 있지만 일반 사용자는 /etc
또는 다른 사용자의 홈 디렉토리를 제거 할 수 없습니다 .
구체적으로 : 루트 권한 (유효한 UID 0)으로 실행중인 프로세스 만 init 시스템 이 시스템 서비스를 중지하고 모든 사용자 프로세스를 종료 하고 실제로 시스템 을 중지시키는 시스템 호출 을 발행하도록 지시 할 수 있습니다 . ( shutdown
setuid 인 경우 누가 호출했는지에 관계없이 루트로 실행되지만 그렇지 않습니다.)
shutdown
control-alt-del을 사용하여 GUI에서 호출 하는 것은 어떻습니까? 이 경우에, 실현하는 것이 중요합니다 shutdown
직접 시작 init
하고 는 루트 권한으로 실행됩니다. 따라서 콘솔을 걷는 사람은 모두 콘솔을 종료 할 수 있습니다. 이것이 바람직하지 않은 경우 control-alt-delete가 실제로 실행 shutdown -a
됩니다. (@ some1이 답변에서 인용 한 설명서를 참조하십시오). shutdown
현재 로그인 한 사용자가이를 실행할 권한이 있는지 확인하도록 지시 합니다. 그러나 이것은 shutdown
이 시나리오에서 루트로 실행 되기 때문에 관련 이 있습니다.
shutdown
있지만 현재 사용자에게 루트 권한이 없으면 해당 프로그램 이 실제로 시스템 종료를 트리거 할 수 없습니다 . 권리?
shutdown
. setuid 프로그램은 실행 파일을 소유 한 사용자의 권한으로 실행됩니다. 예를 들어, /etc/passwd
루트 권한으로 실행하여 비밀번호 파일을 수정할 수 있습니다. 에 대한 맨 페이지를 참조하십시오 chmod
.
/usr/bin/passwd
루트 권한으로 실행 "했어야합니다 ! /etc/passwd
실행 파일이 아닙니다 (수정중인 "암호 파일").
바이너리 shutdown
자체는 UID가 0인지 확인합니다.
다음의 strace 출력을 참조하십시오.
strace /sbin/shutdown -r -h now
...
...
geteuid() = 10001
setuid(10001) = 0
getuid() = 10001
write(2, "shutdown: Need to be root\n", 26shutdown: Need to be root
) = 26
exit_group(1) = ?
shutdown
UID가 0 인지 확인하는 방법을 보지 못합니다.
if(getuid() != 0) printf("Need to be root");
. 실제로 소스 코드는 그것을 보여줍니다.
-a로 플래그를 지정하면 shutdown이 액세스 목록을 확인하는 것으로 보입니다.
ACCESS CONTROL
shutdown can be called from init(8) when the magic keys CTRL-ALT-DEL are pressed, by creating an appropriate entry in /etc/inittab. This means that every‐
one who has physical access to the console keyboard can shut the system down. To prevent this, shutdown can check to see if an authorized user is logged
in on one of the virtual consoles. If shutdown is called with the -a argument (add this to the invocation of shutdown in /etc/inittab), it checks to see
if the file /etc/shutdown.allow is present. It then compares the login names in that file with the list of people that are logged in on a virtual console
(from /var/run/utmp). Only if one of those authorized users or root is logged in, it will proceed. Otherwise it will write the message
shutdown: no authorized users logged in
to the (physical) system console. The format of /etc/shutdown.allow is one user name per line. Empty lines and comment lines (prefixed by a #) are
allowed. Currently there is a limit of 32 users in this file.
현재 -a 플래그없이 호출하기 때문에 기본적으로 루트 종료 만 허용합니다.
추가 사용자가 명령을 실행할 수있게하려면 해당 파일을 구성하고 플래그를 사용하십시오.
Why can't I execute shutdown when the permission is rwxr-xr-x?
권한 비트가 반드시 사용자 나 그룹에 기반한 액세스 제어를 배제 할 필요는 없습니다.
-a
커맨드 라인에서 호출하면 아무런 차이가 없습니다. shutdown -a
루트 권한 ( init
control-alt-del을 제공하는) 으로 실행해야합니다 .