Search

sudo 및 sudoer

태그
개념
실습
생성 일시
2022/11/18 01:45

sudo

sudo는 유닉스 및 유닉스 계열 운영 체제에서, 다른 사용자의 보안 권한, 보통 슈퍼유저로서(관리자 권한으로) 프로그램을 구동할 수 있도록 하는 프로그램이자 명령어이다. 명칭은 본래 슈퍼유저로서의 실행에 사용되던 것에서 “superuser do”에서 유래하였으나, 후에 프로그램의 기능이 확장되며 “substitute user do”(다른 사용자의 권한으로 실행)의 줄임말로 해석되게 되었다. sudo에 대한 권한이 있는(sudo 그룹에 속해 있는) 사용자가 sudo를 사용하면 root의 권한을 빌려 명령을 처리한다.

sudo의 사용 이유

sudo가 없다면 root의 계정으로 접근하여 작업을 해야하는데, 여러 사용자가 작업을 하게 되면 root의 비밀번호 노출 확률이 증가할 뿐만 아니라 root 계정의 비밀번호 변경에도 어려움이 발생할 수 있다. root 계정은 거의 모든 것에 대한 권한을 가지고 있는데, root 계정이 해킹에 노출되게 되면 시스템에 치명적일 수 있다. 이러한 이유로 root 계정은 접속이나 노출을 최대한으로 축소하여야 하는데, sudo를 사용하게 되면 필요한 사용자마다 sudo 그룹에 추가하면 root 계정을 노출할 필요가 없어 보안상 훨씬 안전해진다. 뿐만 아니라 sudo를 사용하면 로그의 추적이 쉬워지고 침입에 대한 감지가 쉬워진다는 장점이 있다.

sudo 설치하기

1.
패키지 설치를 위해 su - 명령어를 통해 root 계정으로 이동
2.
dpkg -l sudo : sudo 패키지의 설치 여부 확인
3.
apt install sudo : (설치되어 있지 않다면) sudo 패키지 설치
4.
visudo 혹은 visudo -f /etc/sudoers : 설치된 sudoer 파일 확인 및 수정
sudoer sudoer 파일은 어떤 사용자가 어떤 명령어, 프로그램을 실행을 시키거나 접근할 수 있도록 권한을 설정할 수 있도록 저장되어 있는 파일이며, 특정 명령어에 대해 비밀번호를 설정하는 것과 같은 특별한 권한에 대해서도 설정할 수 있도록 저장되어 있는 파일이다. sudoer 파일의 구성은 alias 들과 user specification들로 되어 있다. sudoer 파일은 일반 텍스트 편집기를 통해 접근하면 실수 했을 때 sudo 명령을 사용할 수 없게 되므로, 문법을 체크해주는 visudo를 통해 수정하는 것이 좋다.

sudoer 설정하기

secure path sudo 명령은 현재 계정의 쉘이 아닌 가상 쉘을 생성하고 그 안에서 실행되는데, 이때 가상 쉘의 환경변수 PATH의 값을 secure_path 옵션을 통해 지정하면 shell 명령어들이 지정된 경로에서 바이너리 파일을 찾는다. sudo 권한이 있는 사용자의 PATH 환경변수에 악성코드로 인한 잘못된 경로가 포함되어 있어 특정 명령 실행 시 해당 경로에서 악성 파일이 실행될 경우, sudo를 통해 시스템 전반에 대한 권한을 가진 채 악성 파일을 실행시켜 시스템에 큰 문제가 발생할 수 있다. 이런 상황을 방지하기 위해 sudo가 실행되는 가상 쉘에서의 바이너리 파일 경로를 secure_path로 제한할 수 있다. secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
env_reset sudo를 통해 가상 쉘에서 shell 명령어를 실행할 때, HOME, LOGNAME, PATH, SHELL, TERM, USER을 제외한 모든 환경 변수를 reset시킨다. Defaults env_reset
authfail_message 권한 획득 실패 시나 권한이 없는 동작 실행 시에 출력할 custom message를 설정
badpass_message 잘못된 패스워드가 입력 되었을 시 출력할 custom message를 설정
mail_badpass 잘못된 패스워드로 sudo를 실행 했을 시, 지정된 메일로 보고한다. Defaults mail_badpass
passwd_tries sudo 명령을 실행할 때, 패스워드 입력 실패 시 다시 입력할 수 있는 횟수를 지정한다. Defaults passwd_tries=3
log_input, log_output, iolog_dir sudo 를 통해 실행된 명령들, Input과 output에 대한 log 파일을 iolog_dir 경로에 저장한다. sudo ls <iolog_dir> 명령어를 통해 해당 경로에 저장되어있는 로그 폴더와 파일을 확인할 수 있다. Defaults log_input Defaults log_output Defaults iolog_dir="/var/log/sudo/"
requiretty
tty 환경에서만 sudo 명령이 실행될 수 있도록 한다. 이 옵션을 설정하면, cron 명령어에서 실행되는 경우 등에서는 sudo 명령을 사용할 수 없게 된다. Defaults requiretty