일부 대학 유인물 주장
root
Unix 시스템에서는 암호 변경, 통신 프로토콜에 사용되는 네트워크 포트 액세스, 하드웨어와의 상호 작용 등 사용자만 액세스할 수 있는 일부 기능이 운영 체제에 기록됩니다 .
이 설명이 맞나요? 이것이 "운영 체제"에서 정확히 어디에 구현되어 있습니까? 루트가 아닌 사용자가 쓸 수 없는 경우 어떻게 자신의 비밀번호를 변경할 수 있습니까 /etc/passwd
?
내가 아는 한, 루트 사용자에게 무제한 권한이 없는 SELinux와 같은 UNIX 기반 시스템이 있습니까?
답변1
이 설명이 맞나요?
예, 아니요. 이 진술은 기껏해야 불완전합니다. 더 구체적으로:
- 비밀번호 변경: 사용자는 자신의 비밀번호를 변경할 수 있지만
root
다른 사용자의 비밀번호만 변경할 수 있습니다. 이는 액세스 권한에 의해 시행됩니다/etc/shadow
. setuid가 쓰기 권한을 얻을 수 있기 때문에 바이너리passwd(1)
는 권한을 우회할 수 있습니다 ./etc/shadow
passwd
root
root
/etc/shadow
- 통신 프로토콜에 사용되는 네트워크 포트에 액세스합니다.
root
1024 이하의 TCP 및 UDP 포트만 바인딩할 수 있으며, 다른 포트는 누구나 바인딩할 수 있습니다. 이는 커널에 의해 시행됩니다. 또한root
원시 소켓만 사용할 수 있습니다(특히 실행ping
하려면 uid를 설정해야 하는 이유입니다root
). 그러나 원시 소켓에 액세스하는 세부 사항은 운영 체제에 따라 다르며 때로는 다양한 비표준 ACL 메커니즘을 통해 액세스가 허용될 수 있습니다. - 하드웨어와 상호 작용: 원칙적으로
root
프로세스만 하드웨어에 원시 명령을 보낼 수 있습니다. 이는 주로 장치에 대한 권한을 통해 시행됩니다/dev
. 그러나 대부분의 시스템에는 USB 디스크 마운트, CD 쓰기, 오디오 하드웨어 사용 등과 같이 사용자가 이러한 권한을 우회할 수 있는 메커니즘이 있습니다.
이것이 "운영 체제"에서 정확히 어디에 구현되어 있습니까?
커널에 의해 구현된 권한 시스템이 있습니다. 대부분의 운영 체제는 OpenBSD와 같은 다양한 다른 메커니즘으로 이 시스템을 보완합니다.pledge
, 또는 리눅스 SELinux
.
내가 아는 한, 루트 사용자에게 무제한 권한이 없는 SELinux와 같은 UNIX 기반 시스템이 있습니까?
예.
답변2
Linux는 Unix가 아니기 때문에 여기서 Linux와의 비교는 올바르지 않다고 생각하기 때문에 원래 진술로 돌아가 보겠습니다.
Unix의 passwd 명령 매뉴얼에는 루트만 이 유틸리티를 사용할 수 있다고 명시되어 있습니다.
http://man.cat-v.org/unix-1st/5/passwd
마찬가지로 열린 포트는 권한 있는 프로세스만 특정 포트로 변경하도록 허용합니다. sys/socket.h는 Unix에서 정의됩니다. http://pubs.opengroup.org/onlinepubs/7908799/xns/syssocket.h.html
아래에 명시된 바와 같이:
http://man7.org/linux/man-pages/man7/ip.7.html
이를 수행하기 위한 권한은 루트를 요구하는 것과 동일합니다.
하드웨어와의 상호 작용은 약간 더 광범위하고 심지어 모호합니다. 그러나 루트 권한이 필요한 /dev/ 인터페이스(예: mknod)를 참조할 수도 있습니다.
따라서 이 진술은 기본적으로 정확합니다.