리눅스 및 기타 유닉스류 운영 체제에서는 오직 루트 사용자만이 모든 명령을 실행하고 시스템에서 설치 및 업데이트, 패키지 제거, 사용자 및 그룹 생성, 중요한 시스템 구성 파일 수정 등과 같은 특정 핵심 작업을 수행할 수 있습니다.
그러나 루트 사용자 역할을 하는 시스템 관리자는 sudo 명령 및 몇 가지 구성을 사용하여 일부 명령을 실행하고 위에서 언급한 핵심 시스템 작업을 포함하여 수행할 수 있도록 다른 일반 시스템 사용자에게 권한을 부여할 수 있습니다.
또는 시스템 관리자는 루트 사용자 암호를 공유하여 (권장되지 않는 방법이지만) 일반 시스템 사용자가 su 명령을 통해 루트 사용자 계정에 액세스할 수 있도록 할 수 있습니다.
sudo는 허가된 사용자가 보안 정책에 따라 루트(또는 다른 사용자)로 명령을 실행할 수 있도록 하는데:
- 먼저 /etc/sudoers를 읽고 구문 분석한 다음 명령을 호출한 사용자와 해당 사용자의 권한을 조회합니다.
- 그런 다음 호출한 사용자에게 암호를 요청합니다(일반적으로 사용자의 암호이지만 대상 사용자의 암호로도 설정할 수 있습니다. 또는 NOPASSWD 태그로 생략할 수 있습니다).
- 그 후 sudo는 대상 사용자로 전환하기 위해 자식 프로세스를 생성하고 setuid()를 호출합니다.
- 다음으로 상기 자식 프로세스에서 셸 또는 인수로 제공된 명령을 실행합니다.
아래는 /etc/sudoers 파일 구성을 수정하여 sudo 명령의 동작을 Defaults 항목을 사용하여 변경하는 방법에 대한 열 가지입니다.
$ 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 항목 유형
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의 첫 번째 유형에 초점을 맞출 것입니다. 매개변수는 플래그, 정수 값, 문자열 또는 목록일 수 있습니다.
플래그는 암시적으로 부울이며 '!'
연산자를 사용하여 끌 수 있음을 알아야 하며, 목록에는 두 개의 추가 할당 연산자, +=
(목록에 추가) 및 -=
(목록에서 제거)가 있습니다.
Defaults parameter OR Defaults parameter=value OR Defaults parameter -=value Defaults parameter +=value OR Defaults !parameter
1. 안전한 PATH 설정
이것은 sudo로 실행되는 모든 명령에 사용되는 경로로, 두 가지 중요성이 있습니다:
- 시스템 관리자가 sudo 사용자가 안전한 PATH 환경 변수를 가지고 있지 않다고 믿을 때 사용됩니다
- “root path”와 “user path”를 분리하기 위해, exempt_group에 의해 정의된 사용자만이 이 설정의 영향을 받지 않습니다.
설정하려면 다음 줄을 추가하십시오:
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
2. TTY 사용자 로그인 세션에서 sudo 활성화
실제 tty에서 sudo를 호출할 수 있도록 하지만 cron이나 cgi-bin 스크립트와 같은 방법을 통해서는 아닌 경우, 다음 줄을 추가하십시오:
Defaults requiretty
3. pty를 사용하여 Sudo 명령 실행
A few times, attackers can run a malicious program (such as a virus or malware) using sudo, which would again fork a background process that remains on the user’s terminal device even when the main program has finished executing.
이러한 시나리오를 피하려면 I/O 로깅이 켜져 있든 꺼져 있든 psuedo-pty에서만 다른 명령을 실행하도록 sudo를 구성할 수 있습니다. use_pty
매개변수를 사용하여 다음과 같이 설정합니다:
Defaults use_pty
4. Sudo 로그 파일 생성
기본적으로 sudo는 syslog(3)를 통해 로그를 기록합니다. 그러나 사용자 지정 로그 파일을 지정하려면 다음과 같이 logfile 매개변수를 사용하십시오:
Defaults logfile="/var/log/sudo.log"
호스트 이름과 네 자리 연도를 사용자 지정 로그 파일에 기록하려면 각각 다음과 같이 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
모노토닉하게 증가하는 기본 36진수 시퀀스 번호로 확장되는 % {seq}와 같은 이스케이프 시퀀스가 지원됩니다. 예를 들어, 각 두 자리씩을 사용하여 새 디렉터리를 형성하는 000001과 같은 시퀀스 번호가 있습니다. 다음과 같은 예에서와 같이 00/00/01 :
$ cd /var/log/sudo-io/ $ ls $ cd 00/00/01 $ ls $ cat log

해당 디렉터리의 나머지 파일을 cat 명령을 사용하여 볼 수 있습니다.
6. sudo 사용자에 대한 강의
시스템에서 암호 사용에 대해 sudo 사용자를 강의하려면 다음과 같이 lecture 매개변수를 사용하십시오.
세 가지 가능한 값이 있습니다:
- always – 항상 사용자에게 강의합니다.
- 한 번만 – 사용자가 sudo 명령을 실행할 때 처음으로만 강의합니다 (값이 지정되지 않은 경우 사용됨)
- 결코 – 사용자에게 강의하지 않습니다.
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 구성 학습
또한, sudo 명령 구성에 대해 더 알아보려면 다음을 읽어보세요: su와 sudo의 차이 및 Linux에서 sudo 구성하는 방법.
여기까지입니다! 다른 유용한 sudo 명령 구성 또는 Linux에 대한 팁과 트릭을 공유할 수 있습니다. 사용자들은 아래의 댓글 섹션을 통해.
Source:
https://www.tecmint.com/sudoers-configurations-for-setting-sudo-in-linux/