sudo 사용자와 루트 사용자의 차이점

sudo 사용자와 루트 사용자의 차이점

파일 에는 어떤 사용자가 명령 /etc/sudoers으로 무엇을 할 수 있는지 나열되어 있습니다.sudo

루트 사용자는 /etc/sudoers파일을 생성하고 수정합니다.

이 개념은 나로서는 이해하기 어렵다.

sudo 권한을 가진 모든 사용자가 sudoers그룹에 속해 있는 경우, 명령을 내리면 모두 루트가 될 수 있습니다 sudo su.

그렇다면 실제 루트 사용자는 누구이며 그가 sudoers 그룹의 사용자 권한을 어떻게 제어합니까?

나에게 설명해주세요.

답변1

요약: "root"는 관리자 계정의 실제 이름입니다. "sudo"는 일반 사용자가 관리 작업을 수행할 수 있도록 하는 명령입니다. "Sudo"는 사용자가 아닙니다.


긴 답변:

"루트"(일명 "수퍼유저")는 시스템 관리자 계정의 이름입니다. 이름의 유래는 약간 구식이지만 그것은 중요하지 않습니다.

루트 사용자는 사용자 ID 0을 가지며 명목상 무제한 권한을 갖습니다. 루트는 모든 파일에 액세스하고, 모든 프로그램을 실행하고, 시스템 호출을 실행하고, 모든 설정을 수정할 수 있습니다. (그러나 아래를 참조하십시오 1).

"sudo" 명령이 발명되기 전에는 관리 작업을 수행하려면 어떻게든 로그인 프롬프트²를 받거나 명령 su("su"는 대체 사용자의 약어임)을 사용하여 루트로 로그인해야 했습니다.

이는 약간 번거로운 일이며 사용자에게 부분적인 관리 권한을 부여할 수도 없습니다. 그래서 "sudo" 명령("대체 사용자 do"의 줄임말)이 발명되었습니다.

"sudo" 명령을 사용하면 사용자 ID가 sudoers 파일에 있는 동안 슈퍼유저 권한으로 명령을 실행할 수 있어 필요한 권한을 부여받을 수 있습니다.

따라서 예를 들어 sudo vi /etc/hosts루트로 실행하는 것처럼 호스트 파일을 편집할 수 있습니다. 루트 비밀번호도 필요하지 않고 본인의 로그인 비밀번호만 있으면 됩니다.

물론, sudo su간단히 루트가 될 수도 있습니다. 결과는 루트로 로그인했거나 su명령을 실행한 것과 동일합니다. 단, 루트 비밀번호를 알 필요는 없지만 sudoers 파일에 있어야 한다는 점만 다릅니다.

sudoers 파일은 sudo 명령을 사용할 수 있는 사람과 해당 명령으로 무엇을 할 수 있는지를 결정합니다.

sudoers 파일은 여러 관리자를 제공합니다⁴. 사실상 관리자는 루트와 sudoers 파일에 나열된 모든 사람입니다. sudoers 파일이 없으면 유일한 관리자는 루트입니다.

실제로 다른 사람이 귀하의 컴퓨터를 관리하는 조직에서는 자신의 컴퓨터의 루트 비밀번호를 모르는 것이 매우 일반적입니다. 귀하가 sudoers 파일에 있는 한 문제가 되지 않습니다.

제가 근무했던 한 회사에서는 거대한 서버 팜이 있었는데, 아주 극소수의 사람들만이 루트 암호를 알고 있었습니다. 대신, 누가 어떤 서버에서 작업하도록 허용되었는지에 대한 데이터베이스가 있었습니다. 자동화된 프로세스는 귀하에게 액세스 권한이 부여된 서버의 sudoers 파일에 귀하를 추가하고 권한이 만료되면 귀하를 제거합니다.


¹ 한 가지 더: 최신 Unix 버전은 이제 루트 사용자가 수행할 수 있는 작업까지 제한할 수 있습니다.

아래에SELinux(Security Enhanced Linux)에는 어떤 프로그램이 무엇을 할 수 있는지 결정하는 액세스 제어 목록이 효과적으로 있으며 심지어 루트도 이러한 제한을 벗어날 수 없습니다.

애플의 밑에시스템 무결성 보호(SIP)(일명 "루트리스") 시스템에서는 특정 파일과 디렉터리가 잠겨 있으므로 적절한 화이트리스트에 있는 애플리케이션만 액세스할 수 있습니다.

이러한 시스템은 악의적인 사용자가 루트 액세스 권한을 얻는 경우로부터 시스템을 보호하기 위해 존재합니다. (또는 어떤 경우에는 사용자가 내장된 장치를 탈옥하는 것을 방지하기 위해.) 명백한 이유로 루트 액세스를 사용하더라도 이러한 제한을 우회하는 것은 극히 어렵습니다.

² "login:" 프롬프트는 Unix 역사의 또 다른 오래된 부분으로, 윈도우 시스템 대신 직렬 회선에서 ASCII 터미널을 사용했던 시절로 거슬러 올라갑니다. login터미널 창에 간단히 입력하거나 다른 곳에서 컴퓨터에 대한 ssh(또는 telnet 또는 rsh) 연결을 열면 "login:" 프롬프트가 나타날 수 있습니다 . 원하는 경우 거기에서 다른 사용자로 로그인할 수 있습니다. (컴퓨터에 직렬 포트가 있는 경우 로그인을 허용하도록 구성할 수도 있습니다.)

³ 개별 프로그램에 루트 액세스 권한을 부여하는 것도 가능합니다. 이러한 프로그램은 일반 사용자가 실행하는 경우에도 루트 액세스 권한이 있는 사용자가 수행할 수 있는 모든 작업을 수행할 수 있습니다. 이는 일반적으로 특정 작업으로 제한됩니다. 예를 들어,크론탭프로그램에는 cron 테이블을 편집할 수 있도록 루트 권한이 있습니다. 분명히 "sudo"는 자신이 하는 일을 할 수 있도록 루트 권한을 가지고 있습니다.

⁴ 이전에 얼버무렸던 점을 한 가지 더 다루겠습니다. 나는 "관리자"와 "루트"를 같은 의미로 사용했지만 다른 종류의 관리자도 있습니다. 이러한 계정은 종종 "역할 계정"이라고 불리며, 이는 이러한 계정이 실제 사람에게 속하지 않고 대신 시스템에서 특정 역할을 수행하기 위해 존재한다는 것을 의미합니다. /etc/passwd시스템의 파일을 살펴보면 그러한 계정이 수십 개 발견될 것입니다.

예를 들어, mysql이 시스템에 설치되어 있다면 "mysql" 사용자가 있을 것이며 모든 데이터베이스 파일, 구성 파일 등은 모두 해당 사용자의 소유가 될 것입니다. 해당 사용자(물론 루트 포함)만이 파일에 액세스하고 mysql 서버를 실행하는 데 필요한 권한을 갖습니다. 어떤 의미에서 해당 사용자는 관리자 계정이지만 mysql에만 해당됩니다.

데이터베이스 관리 작업을 수행해야 하는 경우 명령을 사용하여 "mysql"이 되거나 sudoers 파일이 해당 특정 명령에 대한 mysql 권한을 제공하는 곳을 su mysql사용합니다 .sudo

관련 정보