웹사이트 검색

Linux에서 'sudo' 설정을 위한 10가지 유용한 Sudoers 구성


Linux 및 기타 Unix 계열 운영 체제에서는 루트 사용자만 모든 명령을 실행하고 시스템에서 설치 및 업데이트, 패키지 제거, 사용자 및 그룹 생성, 중요한 시스템 수정과 같은 특정 중요한 작업을 수행할 수 있습니다. 구성 파일 등.

그러나 루트 사용자의 역할을 맡은 시스템 관리자는 sudo 명령과 몇 가지 구성을 사용하여 다른 일반 시스템 사용자가 일부 명령을 실행하고 위에서 언급한 작업을 포함하여 여러 가지 중요한 시스템 작업을 수행하도록 허용할 수 있습니다.

또는 시스템 관리자는 일반 시스템 사용자가 su 명령을 통해 루트 사용자 계정에 액세스할 수 있도록 루트 사용자 비밀번호를 공유할 수 있습니다(권장되는 방법은 아님).

sudo를 사용하면 허용된 사용자가 보안 정책에 지정된 대로 루트(또는 다른 사용자)로 명령을 실행할 수 있습니다.

  1. /etc/sudoers를 읽고 구문 분석하고 호출하는 사용자와 해당 권한을 조회합니다.
  2. 그런 다음 호출하는 사용자에게 비밀번호를 묻는 메시지를 표시합니다(일반적으로 사용자의 비밀번호이지만 대상 사용자의 비밀번호일 수도 있습니다. 또는 NOPASSWD 태그를 사용하여 건너뛸 수 있음).
  3. 그 후 sudo는 setuid()를 호출하여 대상 사용자로 전환하는 하위 프로세스를 생성합니다.
  4. 다음으로 위의 하위 프로세스에 인수로 제공된 쉘이나 명령을 실행합니다.

다음은 기본값 항목을 사용하여 sudo 명령의 동작을 수정하기 위한 10개의 /etc/sudoers 파일 구성입니다.

sudo cat /etc/sudoers
#
This file MUST be edited with the 'visudo' command as root.
#
Please consider adding local content in /etc/sudoers.d/ instead of
directly modifying this file.
#
See the man page for details on how to write a sudoers file.
#
Defaults	env_reset
Defaults	mail_badpass
Defaults	secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults	logfile="/var/log/sudo.log"
Defaults	lecture="always"
Defaults	badpass_message="Password is wrong, please try again"
Defaults	passwd_tries=5
Defaults	insults
Defaults	log_input,log_output

기본값 항목 유형

Defaults                parameter,   parameter_list     #affect all users on any host
Defaults@Host_List      parameter,   parameter_list     #affects all users on a specific host
Defaults:User_List      parameter,   parameter_list     #affects a specific user
Defaults!Cmnd_List      parameter,   parameter_list     #affects  a specific command 
Defaults>Runas_List     parameter,   parameter_list     #affects commands being run as a specific user

이 가이드의 범위에 따라 아래 양식에 있는 첫 번째 유형의 기본값을 살펴보겠습니다. 매개변수는 플래그, 정수 값, 문자열 또는 목록일 수 있습니다.

플래그는 암시적으로 부울이며 '!' 연산자를 사용하여 끌 수 있으며 목록에는 두 개의 추가 할당 연산자인 +=(목록에 추가) 및 -= (목록에서 제거).

Defaults     parameter
OR
Defaults     parameter=value
OR
Defaults     parameter -=value   
Defaults     parameter +=value  
OR
Defaults     !parameter       

1. 보안 경로 설정

이는 sudo로 실행되는 모든 명령에 사용되는 경로이며 두 가지 중요성이 있습니다.

  1. 시스템 관리자가 sudo 사용자의 보안 PATH 환경 변수를 신뢰하지 않을 때 사용됩니다.
  2. '루트 경로'와 '사용자 경로'를 구분하기 위해 exempt_group으로 정의된 사용자만 이 설정의 영향을 받지 않습니다.

설정하려면 다음 줄을 추가하세요.

Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

2. TTY 사용자 로그인 세션에서 sudo를 활성화합니다.

sudo를 실제 tty에서 호출할 수 있지만 cron 또는 cgi-bin 스크립트와 같은 방법을 통해서는 호출할 수 없도록 하려면 다음 줄을 추가하세요.

Defaults  requiretty   

3. pty를 사용하여 Sudo 명령 실행

몇 번 공격자는 sudo를 사용하여 악성 프로그램(예: 바이러스 또는 맬웨어)을 실행할 수 있습니다. 이 경우 기본 프로그램 실행이 완료된 후에도 사용자 터미널 장치에 남아 있는 백그라운드 프로세스가 다시 포크됩니다.

이러한 시나리오를 방지하려면 I/O 로깅이 켜져 있는지 여부에 관계없이 use_pty 매개변수를 사용하여 psuedo-pty에서만 다른 명령을 실행하도록 sudo를 구성할 수 있습니다. 다음과 같습니다:

Defaults  use_pty

4. Sudo 로그 파일 생성

기본적으로 sudo는 syslog(3)를 통해 로그를 기록합니다. 그러나 사용자 정의 로그 파일을 지정하려면 다음과 같이 logfile 매개변수를 사용하십시오.

Defaults  logfile="/var/log/sudo.log"

사용자 정의 로그 파일에 호스트 이름과 4자리 연도를 기록하려면 다음과 같이 각각 log_hostlog_year 매개변수를 사용합니다.

Defaults  log_host, log_year, logfile="/var/log/sudo.log"

다음은 사용자 정의 sudo 로그 파일의 예입니다.

5. Sudo 명령 입력/출력 기록

log_inputlog_output 매개변수를 사용하면 sudo가 pseudo-tty에서 명령을 실행하고 모든 사용자 입력과 화면에 전송된 모든 출력을 수신적으로 기록할 수 있습니다.

기본 I/O 로그 디렉터리는 /var/log/sudo-io이며, 세션 시퀀스 번호가 있으면 이 디렉터리에 저장됩니다. iolog_dir 매개변수를 통해 사용자 정의 디렉터리를 지정할 수 있습니다.

Defaults   log_input, log_output

%{seq}와 같은 일부 이스케이프 시퀀스가 지원됩니다. 이는 000001과 같이 단조롭게 증가하는 Base-36 시퀀스 번호로 확장됩니다. 여기서 두 자리마다 새 디렉토리를 형성하는 데 사용됩니다. 아래 예와 같이 00/00/01:

cd /var/log/sudo-io/
ls
cd  00/00/01
ls
cat log

cat 명령을 사용하면 해당 디렉터리의 나머지 파일을 볼 수 있습니다.

6. Sudo 사용자 강의

sudo 사용자에게 시스템의 비밀번호 사용에 대해 강의하려면 아래와 같이 lecture 매개변수를 사용하세요.

가능한 값은 3가지입니다:

  1. 항상 – 항상 사용자에게 강의합니다.
  2. 한 번 - 사용자가 sudo 명령을 처음 실행할 때만 강의합니다. (값이 지정되지 않은 경우 사용됩니다.)
  3. 절대로 – 사용자에게 강의하지 마십시오.
 
Defaults  lecture="always"

또한 lecture_file 매개변수를 사용하여 맞춤 강의 파일을 설정하고 파일에 적절한 메시지를 입력할 수 있습니다.

Defaults  lecture_file="/path/to/file"

7. 잘못된 sudo 비밀번호를 입력하면 사용자 정의 메시지 표시

사용자가 잘못된 비밀번호를 입력하면 명령줄에 특정 메시지가 표시됩니다. 기본 메시지는 "죄송합니다. 다시 시도하세요 "입니다. 다음과 같이 badpass_message 매개변수를 사용하여 메시지를 수정할 수 있습니다.

Defaults  badpass_message="Password is wrong, please try again"

8. sudo 비밀번호 시도 제한 늘리기

passwd_tries 매개변수는 사용자가 비밀번호 입력을 시도할 수 있는 횟수를 지정하는 데 사용됩니다.

기본값은 3입니다.

Defaults   passwd_tries=5 

passwd_timeout 매개변수를 사용하여 비밀번호 시간 제한(기본값은 5분)을 설정하려면 아래 줄을 추가하세요.

Defaults   passwd_timeout=2

9. 잘못된 비밀번호를 입력하면 Sudo가 당신을 모욕하게 하세요

사용자가 잘못된 비밀번호를 입력하는 경우 sudo는 모욕 매개변수와 함께 터미널에 모욕을 표시합니다. 그러면 badpass_message 매개변수가 자동으로 꺼집니다.

Defaults  insults 

자세히 알아보기: 잘못된 비밀번호를 입력하면 Sudo가 모욕하도록 합니다.

10. Sudo 구성에 대해 자세히 알아보기

또한 su와 sudo의 차이점 및 Linux에서 sudo를 구성하는 방법을 읽어 sudo 명령 구성에 대해 자세히 알아볼 수 있습니다.

그게 다야! 아래 설명 섹션을 통해 다른 유용한 sudo 명령 구성이나 요령 및 팁을 Linux 사용자와 공유할 수 있습니다.