10장. sudo 액세스 관리

시스템 관리자는 루트가 아닌 사용자가 일반적으로 root 사용자로 예약된 관리 명령을 실행할 수 있도록 sudo 액세스 권한을 부여할 수 있습니다. 결과적으로 루트가 아닌 사용자는 root 사용자 계정에 로그인하지 않고 이러한 명령을 실행할 수 있습니다.

10.1. sudoers의 사용자 권한 부여

/etc/sudoers 파일은 sudo 명령을 사용하여 다른 명령을 실행할 수 있는 사용자를 지정합니다. 규칙은 개별 사용자 및 사용자 그룹에 적용할 수 있습니다. 별칭을 사용하여 호스트 그룹, 명령 및 사용자도 더 쉽게 정의할 수도 있습니다. 기본 별칭은 /etc/sudoers 파일의 첫 번째 부분에 정의됩니다.

사용자가 권한이 없는 sudo 를 사용하여 명령을 입력하면 시스템은 < username > : 사용자가 저널 로그에 대한 sudoers에 없는 메시지를 기록합니다.

기본 /etc/sudoers 파일은 권한 부여의 정보와 예를 제공합니다. 해당 행의 주석을 제거하여 특정 예제 규칙을 활성화할 수 있습니다. 사용자 권한 부여 섹션은 다음 도입으로 표시됩니다.

## Next comes the main part: which users can run what software on
## which machines  (the sudoers file can be shared between multiple
## systems).

다음 형식을 사용하여 새 sudoers 권한을 생성하고 기존 권한 부여를 수정할 수 있습니다.

<username> <hostname.example.com>=(<run_as_user>:<run_as_group>) <path/to/command>

다음과 같습니다.

  • <username >은 명령을 입력하는 사용자입니다(예: user1 ). 값이 % 로 시작되면 그룹을 정의합니다(예: %group1 ).
  • <hostname.example.com >은 규칙이 적용되는 호스트의 이름입니다.
  • 섹션 (<run_as_user > : <run_as_group> ) 은 명령이 실행되는 사용자 또는 그룹을 정의합니다. 이 섹션을 생략하면 < username> 에서 root로 명령을 실행할 수 있습니다.
  • <path/to/command >는 명령의 전체 절대 경로입니다. 명령 경로 뒤에 해당 옵션을 추가하여 특정 옵션 및 인수가 있는 명령만 실행하도록 사용자를 제한할 수도 있습니다. 옵션을 지정하지 않으면 사용자는 모든 옵션과 함께 명령을 사용할 수 있습니다.

이러한 변수를 ALL 로 교체하여 모든 사용자, 호스트 또는 명령에 규칙을 적용할 수 있습니다.

주의

ALL =(ALL) ALL 과 같은 과도하게 허용 가능한 규칙을 사용하면 모든 사용자가 모든 호스트에서 모든 사용자로 모든 명령을 실행할 수 있습니다. 이는 심각한 보안 위험을 초래합니다.

! 연산자를 사용하여 인수를 부정적인 방식으로 지정할 수 있습니다. 예를 들어 !root 는 root를 제외한 모든 사용자를 지정합니다. 특정 사용자, 그룹 및 명령을 허용하는 것은 특정 사용자, 그룹 및 명령을 허용하지 않는 것보다 안전합니다. 이는 규칙이 권한이 없는 새 사용자 또는 그룹도 차단하기 때문입니다.

주의

사용자가 alias 명령으로 명령 이름을 변경하여 이러한 규칙을 극복할 수 있으므로 명령에 음수 규칙을 사용하지 마십시오.

시스템은 /etc/sudoers 파일을 처음부터 끝까지 읽습니다. 따라서 파일에 사용자에 대한 여러 항목이 포함된 경우 항목이 순서대로 적용됩니다. 충돌하는 값이 있는 경우 시스템이 가장 구체적인 일치 항목이 아닌 경우에도 마지막 일치 항목을 사용합니다.

시스템 업데이트 중 규칙을 유지하고 오류를 보다 쉽게 수정하려면 /etc/sudoers.d/ 디렉터리에 새 파일을 /etc/sudoers 파일에 직접 입력하는 대신 새 규칙을 입력합니다. /etc/sudoers.d 디렉터리에서 /etc/sudoers 파일의 다음 행에 도달하면 시스템이 /etc/sudoers.d 디렉토리의 파일을 읽습니다.

#includedir /etc/sudoers.d

이 줄의 시작 부분에 있는 숫자 기호(#)는 구문의 일부이며 행이 주석임을 의미하지는 않습니다. 해당 디렉터리의 파일 이름은 마침표를 포함하지 않아야 하며 틸드(~)로 끝나지 않아야 합니다.

추가 리소스

  • sudo(8)sudoers(5) 매뉴얼 페이지