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


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

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

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

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

  1. It reads and parses /etc/sudoers, looks up the invoking user and its permissions,
  2. then prompts the invoking user for a password (normally the user’s password, but it can as well be the target user’s password. Or it can be skipped with NOPASSWD tag),
  3. after that, sudo creates a child process in which it calls setuid() to switch to the target user
  4. next, it executes a shell or the command given as arguments in the child process above.

다음은 기본값 항목을 사용하여 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
[email protected]_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. Used when a system administrator does not trust sudo users to have a secure PATH environment variable
  2. To separate “root path” and “user path”, only users defined by exempt_group are not affected by this setting.

설정하려면 다음 행을 추가하십시오.

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 매개 변수를 사용하여 의사 pty에서만 다른 명령을 실행하도록 sudo를 구성 할 수 있습니다.

Defaults  use_pty

4. Sudo 로그 파일 만들기

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

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

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

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

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

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

log_input 및 log_output 매개 변수를 사용하면 sudo가 의사 tty에서 명령을 실행하고 모든 사용자 입력과 모든 출력을 화면에 수신 가능하게 기록 할 수 있습니다.

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

Defaults   log_input, log_output

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

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

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

6. Sudo 사용자 강의

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

세 가지 가능한 값이 있습니다.

  1. always – always lecture a user.
  2. once – only lecture a user the first time they execute sudo command (this is used when no value is specified)
  3. never – never lecture the user.
 
Defaults  lecture="always"

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

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는 insults 매개 변수를 사용하여 터미널에 모욕을 표시합니다. 이렇게하면 badpass_message 매개 변수가 자동으로 해제됩니다.

Defaults  insults 

더 읽기 : 잘못된 암호를 입력하면 Sudo가 당신을 모욕하게하십시오

10. 자세한 Sudo 구성 알아보기

또한 su와 sudo의 차이점 및 Linux에서 sudo를 구성하는 방법을 읽고 더 많은 sudo 명령 구성을 배울 수 있습니다.

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