Linux는 더 이상 "루트" 사용자를 수퍼유저로 취급하지 않고 대신능력이는 프로세스에 권한을 부여합니다(BSD도 비슷한 역할을 한다고 생각합니다).
예를 들어, 이전 Linux 버전에서 Linux는 프로세스가 "루트"인 경우 프로세스가 소켓을 생성하도록 허용했지만 EUID
최신 FSUID
Linux 버전에서는 프로세스에 권한이 있는 경우에만 소켓을 생성할 수 있습니다. .
하지만 여전히 "루트" 사용자를 수퍼유저로 취급하는 Unix 또는 Unix 계열 운영 체제가 있는지 궁금합니다.
답변1
질문의 전제에는 대부분 결함이 있습니다. 리눅스하다사용자 0을 슈퍼유저로 간주합니다. (항상 사용자 0. 이 사용자를 호출하는 것은 root
관례일 뿐입니다.) 기능은 루트가 아닌 프로세스가 특정 권한을 받을 수 있도록 허용하는 추가 메커니즘입니다. 사용자 0은 일반적으로 거의 모든 기능을 갖고 있으므로 루트는 수퍼유저로 유지됩니다.
유효한 사용자 ID 0으로 실행되는 프로세스는 기능을 잃을 수 있지만 이는 고도로 통제된 환경을 제외하고는 기능을 제한하지 않습니다. 실행 파일을 생성하고 호출할 수 있는 유효 사용자 ID 0으로 실행 중인 모든 프로세스는 유효 사용자 ID가 루트일 때 프로세스의 기능 마스크가 유지되지 않기 execve
때문에 모든 기능을 사용하여 임의 코드를 실행할 수 있습니다 . execve
("루트 프로그램의 기능 및 실행" 참조)수동.)
SECBIT_NOROOT
로그인 중에 플래그를 설정하고 복원할 수 없도록 하거나 경계 세트에서 기능을 제거함으로써 운영 체제가 사용자 ID 0을 사용하는 동안 특정 기능에 대한 액세스를 완전히 제거하도록 할 수 있습니다. 그러나 이는 Linux(Linux 운영 체제와 같은)가 일반적으로 작동하는 방식이 아닙니다. 이는 제한된 운영 체제(예: 컨테이너 내부)에 유용한 커널의 추가 기능입니다.
기능은 루트의 권한을 제한할 수 있지만 이러한 방식으로 사용하는 것은 쉽지 않으며 주요 용도도 아닙니다. 기능은 주로 프로세스가 루트로 실행되는 것을 방지하는 데 사용됩니다. Linux 커널에는 루트 권한을 제한하는 다른 기능이 있습니다. SELinux 및 AppArmor와 같은 보안 모듈은 사용자 ID와 관계없이 작동하므로사용자 ID 0이 거의 아무것도 하지 않는 시스템을 설정하는 것이 가능합니다.(그러나 이것은 일반적인 시스템이 설정되는 방식이 아닙니다.) 그리고사용자 네임스페이스, 사용자 ID 0은 이 네임스페이스 내의 수퍼유저일 뿐이며 이 기능은 널리 사용됩니다.컨테이너.
FreeBSD는 다음을 제공합니다.후추 능력. Capsicum이 사용자 ID 0의 권한을 제한하는지 모르겠습니다. 다시 말하지만, 이 기능의 주요 목표는 모든 권한 프로세스의 개념을 제거하는 것이 아니라 모든 권한으로 실행되는 코드의 양을 줄이는 것입니다.
다른 BSD에는 기능 메커니즘이 없다고 생각합니다. OpenBSD의 목표는 특권 코드의 복잡성과 양을 최소화하여 보안을 보장하는 것입니다. 권한 수를 줄이기 위해 보안 메커니즘의 복잡성을 증가시킴으로써 권한 있는 코드는 공짜 점심이 아닙니다.