권한이 rwxr-xr-x 인 경우 종료를 실행할 수없는 이유는 무엇입니까?


34

나는 있고 권한이 /sbin있음 shutdown을 알았습니다 rwxr-xr-x. 이것이 누군가가 그것을 실행할 수 있다는 것을 의미하지 않습니까?


1
실행 한 명령은 무엇이며 오류는 무엇입니까?
slayedbylucifer

나는 그가 shutdown명령 에 대해 이야기하고 있다고 생각합니다 .
Vinz

./shutdown +30을 실행했습니다. "종료 : 루트 여야합니다"라는 메시지가 나타납니다. 그러나 권한이 누구나 실행할 수 있다고 말하면 왜 루트가되어야합니까?
Korgan Rivera

누구나 컴퓨터를 종료 할 수 있다고 생각합니다. GUI에서와 마찬가지로 누구나 GUI를 종료 할 수 있습니다. 그러나 당신이 당신이 뿌리가되어야한다고 말하면, 나는 모른다. 그래도 좋은 질문입니다.
Kevdog777

4
@ Kevdog777 : GUI PolicyKit에서이를 관리합니다. 루트 권한을 가진 데몬으로 사용할 수 있는지 확인합니다 shutdown.
Vinz

답변:


76

누구나 실행할 수 shutdown있지만 시스템 종료를 트리거하려면 루트 권한이 필요합니다. 그러나 shutdownsetuid가 아니므로 루트 만 성공적으로 실행할 수 있습니다. 이 shutdown프로그램은 권한을 확인하고 문제가 있는지 알려주는 데 충분하지만 시스템을 순진하게 종료하더라도 아무 일도 일어나지 않습니다.

GLENDOWER : 광대 한 곳에서 영혼을 부를 수 있습니다.
HOTSPUR : 왜 그렇게 할 수 있습니까? 그러나 당신이 그들을 부를 때 그들은 올 것입니까?
(헨리 4 세에서)

shutdown와 다르지 않습니다 /bin/rm. 누구나 실행할 수 있지만 일반 사용자는 /etc또는 다른 사용자의 홈 디렉토리를 제거 할 수 없습니다 .

구체적으로 : 루트 권한 (유효한 UID 0)으로 실행중인 프로세스 만 init 시스템 이 시스템 서비스를 중지하고 모든 사용자 프로세스를 종료 하고 실제로 시스템 을 중지시키는 시스템 호출 을 발행하도록 지시 할 수 있습니다 . ( shutdownsetuid 인 경우 누가 호출했는지에 관계없이 루트로 실행되지만 그렇지 않습니다.)

shutdowncontrol-alt-del을 사용하여 GUI에서 호출 하는 것은 어떻습니까? 이 경우에, 실현하는 것이 중요합니다 shutdown직접 시작 init하고 는 루트 권한으로 실행됩니다. 따라서 콘솔을 걷는 사람은 모두 콘솔을 종료 할 수 있습니다. 이것이 바람직하지 않은 경우 control-alt-delete가 실제로 실행 shutdown -a됩니다. (@ some1이 답변에서 인용 한 설명서를 참조하십시오). shutdown현재 로그인 한 사용자가이를 실행할 권한이 있는지 확인하도록 지시 합니다. 그러나 이것은 shutdown이 시나리오에서 루트로 실행 되기 때문에 관련 이 있습니다.


2
설명 : 누구나 program을 실행할 수 shutdown있지만 현재 사용자에게 루트 권한이 없으면 해당 프로그램 실제로 시스템 종료를 트리거 할 수 없습니다 . 권리?
LarsH

1
거의 다됐다. 프로그램은 setuid가 아닌 한 호출하는 사용자의 권한으로 실행됩니다. 시스템을 종료하려면 루트 권한이 필요하므로 보안 허점 등을 사용하지 않는 한 자체 프로그램을 작성할 수 없습니다.
Alexis

"종료가 설정되지 않음"은 무슨 뜻입니까?
Iain Samuel McLean Elder

1
@Iain, 프로그램은 일반적으로 프로그램을 호출하는 사용자의 권한으로 실행됩니다. 의 경우도 마찬가지입니다 shutdown. setuid 프로그램은 실행 파일을 소유 한 사용자의 권한으로 실행됩니다. 예를 들어, /etc/passwd루트 권한으로 실행하여 비밀번호 파일을 수정할 수 있습니다. 에 대한 맨 페이지를 참조하십시오 chmod.
Alexis

" /usr/bin/passwd루트 권한으로 실행 "했어야합니다 ! /etc/passwd실행 파일이 아닙니다 (수정중인 "암호 파일").
Alexis

15

바이너리 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)                           = ?

4
strace 사용을 보여주기위한 +1 ... 이것은 유용합니다. 그러나 나는이 추적에서 shutdownUID가 0 인지 확인하는 방법을 보지 못합니다.
LarsH

1
시스템 호출 만보고하기 때문에 strace 출력에는 표시되지 않습니다. getuid 다음에 코드와 비슷한 오류 메시지를 작성하는 것으로 추론 할 수 있습니다 if(getuid() != 0) printf("Need to be root");. 실제로 소스 코드는 그것을 보여줍니다.
msw

5

예 ! 누구나 그 명령을 실행할 수 있습니다. 당신이 말했듯이, 당신은 그것을 실행할 수 있지만 당신은 "가 아니라 루트 필요"메시지에 직면하고 있습니다 permission denied. 이 shutdown명령 UID은 루트인지 아닌지 확인합니다 .


-1

-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루트 권한 ( initcontrol-alt-del을 제공하는) 으로 실행해야합니다 .
Alexis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.