2013-03-14 2 views
3

Linux 사용자 영역 및 Linux 커널에서 sudo가 작동하는 방식을 이해하려고합니다. 나는 사용자 관점에서 그다지 관심이 없지만 구현/커널 관점에서 이해하는 데 더 관심이있다. (stackexchange 대 수퍼 유저에 대해 논쟁했지만, 최선의 선택이라고 생각합니다. 잘못된 선택을했다면 자유롭게 이동하십시오 ...)setuid 및 sudo 이해

그래서 커널 부팅이 시작되면 init 프로세스는 물론 uid가 0입니다. 그러면 ssh 데몬과 같은 다른 프로세스가 시작될 수 있습니다. 이 새로운 프로세스는 상위 요소의 uid를 상속합니다 (예 : 0. sshd는 이제 각 연결마다 하나씩 자식 프로세스를 시작합니다. 그런 다음 passwd 파일, shadow 파일, pam 등을 통해 로그인을 시도하는 사용자의 인증이 수행됩니다. sshd가 사용하는 방법을 통해 사용자를 인증하면 setuid/seteuid를 호출하여 프로세스를 변경합니다 uid. 이제 내 이해는 루트에서 다른 사용자로만 갈 수 있고 사용자 x에서 루트 x 또는 사용자 x가 아니라 사용자 y로 갈 수 있습니다 (setuid 호출로?)

그러므로 커널과 관련하여 실제로는 파일, 프로세스 등에 할당 된 uid에 대해서만 알고 있습니다. 사용자 계정에 대한 인증은 사용자 영역에서 제어되며 루트 프로그램이 비 루트 프로그램에만 들어가도록 허용함으로써 안전합니다.

내 질문에 위의 경우 올바른 방법입니다 sudo 작동하지 않습니다. 현재 내 비 루트 계정을 실행중인 터미널이 임시로 루트 권한으로 전환합니까? 그것은 sudo 프로세스와 상호 작용합니까? 위의 내용이 잘못 되었다면, 조금이라도 내가 틀린 곳을 알고 싶을 것입니다.

+0

읽기 http://advancedlinuxprogramming.com/ –

답변

7

sudo 바이너리를 보면 실행 파일에 setuid 권한 비트가 설정되어있는 것을 볼 수 있습니다. 이것은 루트에있는 sudo의 경우 실행 파일 소유자의 uid로 항상 실행되어야한다는 것을 커널에 알려줍니다. sudo가 root로 실행되면 fork/exec 전에 필요한 인증 및 setuid-syscall을 수행 할 수 있습니다.

---s--x--x. 2 root root 219272 Jul 17 2012 /usr/bin/sudo 

's'와 소유자를 적어두면 나는 무슨 뜻인지 알게 될 것입니다.

+1

감사합니다. 이제 내가 진술 한 다른 진술이 있습니까? 특히 루트에서 루트가 아닌 x에서 y로만 setuid를 할 수 있습니까? 또는 X> Y 등의 경우에만 setuid를 수행 할 수 있습니까? –

+3

일반적으로 예; 그러나 특권 프로세스가 특권을 삭제 한 다음 setuid를 사용하여 복원하는 기능은 복잡합니다. 일반적으로이 작업을 수행해야 할 경우 시스템 설명서를주의 깊게 읽어야합니다. – Recurse