Menu Close

22장. sudo 액세스 관리

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

22.1. sudoers의 사용자 권한 부여

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

사용자가 sudo 권한을 사용하여 /etc/sudoers 파일에서 허용되지 않는 명령을 실행하려고 하면 시스템은 sudoers에 없는username : user not in the journal log를 기록합니다.

기본 /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=path/to/command

다음과 같습니다.

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

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

주의

All ALL =(ALL) ALL(ALL) 과 같은 과도하게 허용 규칙을 사용하면 모든 사용자가 모든 호스트의 모든 사용자로 모든 명령을 실행할 수 있습니다. 이로 인해 보안 위험이 발생할 수 있습니다.

연산자를 사용하여 부정적인 인수를 지정할 수 있습니다. 예를 들어 root 사용자를 제외한 모든 사용자를 지정하려면 !root 를 사용합니다. allowlists를 사용하여 특정 사용자, 그룹 및 명령을 허용하는 것은 블록 목록을 사용하여 특정 사용자, 그룹 및 명령을 허용하지 않는 것보다 더 안전합니다. 허용 목록을 사용하면 권한이 없는 새로운 사용자 또는 그룹도 차단됩니다.

주의

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

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

sudoers 에 새 규칙을 추가하는 기본 방법은 /etc/sudoers 파일에 규칙을 직접 입력하는 대신 /etc/sudoers.d/ 디렉토리에 새 파일을 만드는 것입니다. 이는 이 디렉터리의 콘텐츠가 시스템 업데이트 중에 보존되기 때문입니다. 또한 /etc/sudoers 파일에서보다 별도의 파일에서 오류를 수정하는 것이 더 쉽습니다. /etc/sudoers 파일의 다음 행에 도달하면 /etc/sudoers.d 디렉토리의 파일을 읽습니다.

#includedir /etc/sudoers.d

이 행의 시작 부분에 있는 숫자 기호 # 은 구문의 일부이며 행이 주석임을 의미하지는 않습니다. 해당 디렉토리에 있는 파일의 이름은 마침표를 포함하지 않아야 하며 틸드 ~ 로 종료해서는 안 됩니다.