42seoul Born2beRoot 프로젝트 Mandatory에서 요구하는 sudo 설정 과정이다.
sudo
Subject의 내용
/var/log/sudo
에 저장먼저 Debian은 sudo가 없기 때문에 sudo 패키지를 설치해야한다. sudo 패키지를 설치하기 위해 root 계정으로 전환한 후 설치를 하고 요구사항을 설정한다.
root 계정 전환
// su: 다른 계정으로 전환 명령어
$ su - // 다른 계정으로 전환 + 해당 계정의 환경변수 적용 (여기에서는 '-'은 'root')
sudo 패키지 설치
$ apt-get install sudo
sudo 패키시 설치 확인
$ dpkg -l | grep 'sudo'
sudo log 저장을 위한 디렉토리 생성
$ mkdir /var/log/sudo
sudo 설정을 위햔 명령어 실행
$ visudo
/etc/sudoers 파일에 sudo 설정이 존재하지만, visudo
은 /etc/sudoers 파일을 관리하기 위한 application으로 안전하게 sudo 파일들을 편집할 수 있기 때문에 일반적인 파일 편집기를 사용하는 것보다 권장된다.
처음 visudo
를 실행할 경우 아래 사진처럼 나오게 된다.
각 Defaults 뒤에 의미하는 바는 다음과 같다.
env_reset
: HOME, LOGNAME, PATH, SHELL, TERM, USER을 제외한 모든 환경 변수를 resetmail_badpass
: 잘못된 패스워드로 sudo 실행 시, 지정된 메일로 보고secure_path
: sudo 명령은 현재 계정의 쉘이 아닌 가상 쉘을 생성하고 그 안에서 실행된다. 이 때, 이 가상 쉘의 환경변수 PATH의 값을 secure_path
옵션을 통해 지정한다.shell 명령어들은 PATH 환경변수에 지정된 경로에서 바이너리 파일을 찾는다.
이 때, sudo 권한이 있는 사용자의 PATH 환경변수에 악성 코드로 인한 경로가 포함되어 있어 특정 명령 실행 시 해당 경로에서 악성 파일이 실행될 경우 시스템에 큰 문제가 생길 것이다.
이러한 상황을 방지하기 위해 sudo가 실행되는 가상 쉘에서 명령어의 바이너리 파일 경로를secure_path
로 제한하는 것이다.
이제 42seoul Born2beRoot 프로젝트 Mandatory에서 요구하는 sudo 설정을 하면 아래와 같다.
각 Defaults 뒤에 의미하는 바는 다음과 같다.
authfail_message
: 권한 획득 실패 시 출력 메세지, 즉 sudo 인증 실패 시 출력 메세지badpass_message
: sudo 인증에서 비밀번호를 틀렸을 경우 출력되는 메세지log_input
: sudo 명령어 실행 시 입력된 명령어를 log로 저장log_output
: sudo 명령어 실행 시 출력 결과를 log로 저장requiretty
: sudo 명령어 실행 시 TTY
강제하는 설정iolog_dir
: sudo log 저장 디렉토리 지정passwd_tries
: 비밀번호 인증 시도 횟수 (Default 값: 3)log의 경우 /var/log/sudo/00/00
에서 확인 할 수 있으며, sudo 명령어 하나마다 하나의 폴더가 생성된다. 폴더에는 총 7개의 log 파일이 존재한다.
log
: sudo 실행 시 실행한 위치와 실행한 명령어의 위치 저장
stderr
: sudo로 실행한 명령어가 오류로 인해 실행되지 않았을 경우 출력되는 내용 저장
stdin
: sudo로 실행한 명령어가 표준 입력을 받은 내용 저장
stdout
: sudo로 실행한 명령어가 표준 출력으로 결과를 출력한 내용 저장
timing
: session(세션)이 실행된 시간 저장
ttyin
: sudo로 실행한 명령어가 TTY
로 입력받은 내용 저장
ttyout
: sudo로 실행한 명령어가 TTY
로 출력한 결과가 저장
참고
https://ko.wikipedia.org/wiki/Sudo
https://brownbears.tistory.com/227