[Born2beRoot] sudo 설정하기

bolee·2022년 4월 4일
0

42seoul

목록 보기
5/27

42seoul Born2beRoot 프로젝트 Mandatory에서 요구하는 sudo 설정 과정이다.

sudo

  • 유닉스 및 유닉스 계열 운영 체제에서, 다른 사용자의 보안 권한, 보통 슈퍼유저로서 프로그램을 구동할 수 있도록 하는 프로그램
  • 즉, root가 아닌 사용자가 root에 준하는 능력으로 실행할 수 있게 하는 명령어이며, 사용을 허락한 사용자는 모두 사용할 수 있다.
  • “substitute user do”(다른 사용자의 권한으로 실행)의 줄임말
  • 관리자 권한을 가지지만 근본적으로는 해당 사용자가 내리는 명령이다.

Subject의 내용

  • sudo 비밀번호 인증 시 최대 3번까지 시도 가능
  • sudo 인증 실패 시 커스텀 경고 메세지 출력
  • sudo 명령어 실행 시 로그를 /var/log/sudo에 저장
  • 보안 상의 이유로 TTY에서만 sudo를 실행 가능
    • TTY(Tele Type Writer): 콘솔 및 터미널 환경
  • 보안 상의 이유로 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을 제외한 모든 환경 변수를 reset
  • mail_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

0개의 댓글