sudo는 일반 사용자 계정이 루트 권한(root privilege) 또는 다른 사용자 권한으로 명령을 실행할 수 있게 하는 프로그램입니다.
전통적으로 루트 권한이 필요한 작업은 su로 root 계정으로 직접 전환해야 했지만, sudo는 특정 명령만 루트 권한으로 수행할 수 있도록 허용하여 보안성과 편의성을 동시에 제공합니다.
sudo [옵션] 명령어 [인자...]
예시:
sudo apt update
sudo systemctl restart nginx
sudo cp file /etc/
기본적으로 sudo를 입력하면 현재 사용자의 비밀번호를 묻습니다. (root 비밀번호가 아님)
인증 성공 후 일정 시간 동안(timestamp_timeout, 보통 5분) 재입력 없이 사용할 수 있습니다.
사용자가 sudo를 입력 → /etc/sudoers 설정 확인.
해당 사용자가 지정된 명령을 실행할 권한이 있는지 확인.
권한이 있으면 명령을 root(혹은 다른 지정 사용자) 권한으로 실행.
실행 기록이 /var/log/auth.log 또는 journalctl 같은 로그에 남음.
-u USER : 특정 사용자 권한으로 실행
sudo -u postgres psql
-i : 지정 사용자 환경 초기화 후 로그인 셸 실행
sudo -i
-s : 지정 사용자 셸 실행 (환경 유지)
-k : 캐시된 인증 무효화(다음 명령 시 비밀번호 재요구)
-l : 자신이 어떤 명령을 sudo로 실행할 수 있는지 확인
sudo 권한은 /etc/sudoers 파일 또는 /etc/sudoers.d/ 디렉토리에 정의됩니다.
편집은 visudo 명령으로 해야 구문 오류를 방지할 수 있습니다.
user host = (runas) command
예시:
# root 모든 권한
root ALL=(ALL:ALL) ALL
# user1은 모든 호스트에서 모든 명령 가능
user1 ALL=(ALL) ALL
# devuser는 /bin/systemctl restart nginx만 실행 가능
devuser ALL=(ALL) /bin/systemctl restart nginx
대부분의 배포판은 특정 그룹(예: sudo, wheel)에 속한 사용자에게 루트 권한을 부여합니다.
Debian/Ubuntu 계열: sudo 그룹
Red Hat/CentOS 계열: wheel 그룹
사용자를 그룹에 추가:
sudo usermod -aG sudo user1 # Ubuntu
sudo usermod -aG wheel user1 # CentOS
최소 권한 원칙: root 계정 직접 로그인 대신 필요한 명령만 허용.
감사(Audit) 가능: 모든 sudo 사용 내역이 로그에 기록.
비밀번호 보호: root 비밀번호 대신 사용자 자신의 비밀번호 사용.
시간 제한 인증: 비밀번호 입력 후 일정 시간만 유효.
sudo su 또는 sudo -i로 root 셸을 띄우면 전체 권한을 계속 유지 → 실수 위험 증가.
잘못된 sudoers 설정은 보안 구멍으로 이어질 수 있음(예: NOPASSWD:ALL).
스크립트에서 sudo 사용 시 입력 대기 문제 발생 가능 → 자동화에서는 sudoers 설정을 통해 특정 명령을 비밀번호 없이 허용하는 경우도 있음.
로그 보기 (보안 감사)
sudo journalctl -u ssh
특정 사용자 권한으로 실행
sudo -u www-data whoami
비밀번호 묻지 않고 특정 명령 실행 (sudoers)
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart myapp
sudo는 루트 계정 직접 사용을 대체하는 보안 도구.
/etc/sudoers로 권한을 세밀하게 제어 가능.
로그가 남아 추적 가능.
권한을 최소화하는 방향으로 설정하는 것이 보안적으로 안전.