특정 시스템 작업은 권한이 있는 사용자/프로세스만 수행할 수 있다는 것을 알고 있지만 슈퍼유저(일반적으로 root
Unix/Linux) 또는 관리자는 여전히 많은 보안 문제를 야기할 수 있으며 가장 자주 공격 시도 대상이 됩니다. 이유는 다들 아시죠?
나는 Unix/Linux의 일반적인 답변에만 (그러나 주로) 관심이 있습니다. 그 이유는 무엇입니까?
답변1
어떤 형태로든 슈퍼유저의 존재는 논리적으로 필요합니다. 자격 증명을 구성할 수 있는 몇 가지 자격 증명이 있어야 합니다. 그것이 뿌리입니다.
루트는 사용자 계정일 필요는 없습니다. 그것은능력, 예를 들어. 유닉스는 역사적으로 단순한 디자인을 추구해 왔으며 계정과 기능을 구현하기 위해 사용자라는 단일 개념을 사용해 왔습니다. 시스템을 사용하는 모든 사람에게는 사용자 계정이 부여되고 시스템 서비스에는 사용자 계정이 할당됩니다. 모든 기능은 무엇보다도 사용자 자격 증명( /etc/passwd
및 최신 시스템에서 동일한 기능을 수행하는 기타 기능)을 제어할 수 있는 시스템 서비스를 통해 간접적으로 얻을 수 있습니다. Unix 설계에서는 루트가 모든 기능(예: 런타임 su
또는 하위 수준 시스템 호출을 통해)에 직접 액세스할 수도 있지만, 그렇지 않은 경우에도 자격 증명 관리자가 자격 증명을 할당하는 것을 방지하기는 어렵습니다. 그 자체로.
최신 시스템은 더욱 세분화된 보안 모델로 발전했습니다. 예를 들어 Unix에서는 아주 일찍부터 그룹이라는 개념을 추가하여 사용자가 파일을 공유할 수 있도록 허용했지만 그룹은 루트로만 관리할 수 있습니다. 대부분의 최신 Unix 시스템에는 사용자가 루트 개입 없이 파일을 공유할 수 있는 액세스 제어 목록이 있습니다. 점점 더 많은 Linux 시스템이 다음과 같은 보안 메커니즘을 사용합니다.SELinux이는 루트가 수행할 수 있는 작업을 제한합니다.
그러나 더 복잡한 보안 모델은 양날의 검입니다. 더 세분화된 권한을 사용하면 더 많은 제어가 가능하고 간단한 방식으로 더 많은 보안 정책을 시행할 수 있습니다(예: setuid 프로그램을 통한 간접 액세스가 아닌 액세스를 위한 ACL). 그러나 보안 정책이 복잡할수록 검토하기가 더 어렵고(복잡한 언어를 사용하면 검토할 내용이 너무 많음) 이를 구현하는 코드가 더 복잡하므로 오류 위험이 더 커집니다.
1 이는 이중 제어 또는 암호화를 통해 방지할 수 있지만 이는 기능(최종 권한으로 임의의 코드를 실행할 수 없는 경우) 및 사용성(시스템을 너무 많이 잠그면 잠길 위험이 증가함)을 제한합니다.
답변2
슈퍼유저가 없는 경우 이제 권한 상승이 필요한 일반 사용자로 모든 작업을 수행할 수 있어야 합니다.
화면 보호기가 시스템을 잠그기 전에 누구든지 키보드를 터치하면 새 사용자 계정을 추가하고 디스크를 포맷할 수 있으므로 책상을 방치해 두는 것이 더욱 위험해집니다.
슈퍼유저를 제거해도 익스플로잇 대상이 제거되는 것은 아니며 단지 더 쉬운 대상이 생성될 뿐입니다.
답변3
시스템으로 원하는 것을 자유롭게 할 수 있어야 하기 때문에 제작자도 그렇게 생각한 것 같습니다.
책임감 있게 행동하는 한 보안 및 악용은 문제가 되지 않습니다. 일반 사용자로서 많은 피해를 입힐 수도 있습니다. 사용자를 제한할 이유가 없습니다.
답변4
이 su
명령은 계정에서 로그아웃하지 않고도 루트로 로그인할 수 있다는 의미로 존재합니다. 루트 계정 자체는 시스템 관리, 사용자 계정 제어, 파일 시스템 마운트와 같은 작업 수행에 사용됩니다. 이 명령을 비활성화하거나 제거할 수 있습니다 su
.
# rm -f /bin/su #deletes 'su' command
또한 sudo
액세스 불가 권한을 부여할 수도 있습니다. 이는 루트만 시스템 관리를 수행할 수 있음을 의미합니다.
# deluser user sudo #user being the account to be removed from group sudo