sudoers 파일 기본
# 절대 직접 편집하지 말 것 — visudo 사용
sudo visudo
# 특정 파일 편집
sudo visudo -f /etc/sudoers.d/myuservisudo는 저장 전 문법 검사를 수행해 잘못된 설정으로 sudo가 잠기는 것을 방지합니다.
sudoers 문법
사용자 호스트=(실행사용자:그룹) 명령# root는 모든 것 가능
root ALL=(ALL:ALL) ALL
# deploy 사용자에게 모든 sudo 권한 (패스워드 필요)
deploy ALL=(ALL:ALL) ALL
# wheel 그룹에 sudo 권한
%wheel ALL=(ALL) ALL
# sudo 시 패스워드 생략
deploy ALL=(ALL) NOPASSWD: ALL
# 특정 명령만 허용
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/systemctl status nginx
# 특정 명령 금지 (허용 목록 뒤에 !로 추가)
deploy ALL=(ALL) ALL, !/bin/su, !/usr/bin/passwd root/etc/sudoers.d/ 활용 (권장)
메인 sudoers 파일 대신 개별 파일로 관리하면 추적이 쉽습니다.
# 파일 생성
sudo visudo -f /etc/sudoers.d/deploy
# 내용
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart myapp
# 권한 설정 (필수)
sudo chmod 440 /etc/sudoers.d/deploy최소권한 원칙 적용 예시
# 배포 자동화 사용자 — 특정 서비스 재시작만 허용
ci-runner ALL=(ALL) NOPASSWD: \
/usr/bin/systemctl restart myapp, \
/usr/bin/systemctl reload nginx
# DBA — PostgreSQL 관련만 허용
dbadmin ALL=(postgres) NOPASSWD: /usr/bin/psql, /usr/bin/pg_dump
# 모니터링 — 읽기 전용 명령만
monitor ALL=(ALL) NOPASSWD: \
/usr/bin/systemctl status *, \
/usr/bin/journalctl -u *, \
/bin/cat /var/log/*sudo 로그 감사
# Ubuntu (journald)
sudo journalctl -u sudo | grep -i "command"
# 모든 sudo 명령 실시간 확인
sudo journalctl -f | grep sudo
# /var/log/auth.log에서 확인 (Ubuntu)
grep "sudo:" /var/log/auth.log | tail -50
# /var/log/secure (CentOS)
grep "sudo:" /var/log/secure | tail -50
# 특정 사용자의 sudo 기록
grep "sudo:.*deploy" /var/log/auth.logsudo 타임아웃 설정
# 기본 타임아웃 변경 (분 단위, 0=항상 물어봄)
Defaults timestamp_timeout=5
# 세션 재인증 없이 sudo 사용
Defaults timestamp_type=global
# 터미널별 개별 타임아웃
Defaults timestamp_type=tty긴급 복구 — sudo 잠긴 경우
# 단일 사용자 모드로 부팅 후
mount -o remount,rw /
visudo # 또는 직접 수정
# /etc/sudoers 백업 복원
cp /etc/sudoers.bak /etc/sudoers이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.
질문 & 답변 (Q&A)
이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.