대상 OS: Ubuntu Server 24.04 LTS
sudo는 운영 편의성의 핵심이지만, 권한이 커질수록 “실수 한 번”이 “장애/보안사고”로 이어집니다. 최소 권한(Least Privilege)의 목표는 구성원을 불편하게 만드는 것이 아니라, 사고 반경(Blast Radius)을 줄이는 것입니다. 아래는 Ubuntu 24.04에서 sudo 권한을 최소화하는 실전 습관을 단계별로 정리한 내용입니다.
0. 현황 파악: 누가 sudo를 쓸 수 있는가
1) sudo 그룹 멤버 확인
getent group sudo
2) 특정 사용자의 sudo 권한 확인(실제 허용 명령 포함)
sudo -l -U admin
1. “사람”을 최소화: sudo 그룹은 필요한 인원만
1) 운영 담당자만 sudo 그룹에 추가
sudo usermod -aG sudo admin
2) 더 이상 필요 없는 사용자는 sudo 그룹에서 제거
sudo deluser someuser sudo
운영 팁: 인원이 늘수록 “누가 root를 만들었는지” 추적이 어려워지므로, 최소 인원 + 계정별 책임 분리가 중요합니다.
2. “명령”을 최소화: 특정 명령만 허용(sudoers.d 방식)
전체 root 권한 대신, 업무에 필요한 명령만 허용하면 사고 범위를 크게 줄일 수 있습니다. Ubuntu에서는 /etc/sudoers.d/에 파일로 관리하는 방식을 권장합니다.
1) 전용 sudoers 파일 생성(항상 visudo 사용)
sudo visudo -f /etc/sudoers.d/deploy
2) 예시: 특정 서비스 재시작만 허용(패스워드 요구 여부는 정책에 따라)
# deploy 사용자는 아래 명령만 root로 실행 가능
# (NOPASSWD는 편하지만 위험도 상승: 필요 최소로만)
deploy ALL=(root) /usr/bin/systemctl restart myservice
3) 문법 검증(오타로 sudo 자체가 깨지는 사고 방지)
sudo visudo -c
3. 자주 하는 실수: 와일드카드/셸 실행 허용
1) 위험 패턴: 편의상 /bin/sh, /bin/bash, /usr/bin/python 등을 sudo로 허용
이렇게 허용하면 사실상 root 쉘을 제공하는 것과 같아집니다. “특정 명령만” 허용하려면, 그 명령이 추가 명령 실행으로 탈출 가능한지(예: 편집기, 인터프리터, 패키지 매니저 등)까지 고려해야 합니다.
2) 위험 패턴: 와일드카드로 경로/인자를 너무 넓게 허용
예: /usr/bin/systemctl * 는 사실상 거의 모든 것을 허용하는 것과 유사해질 수 있습니다. 가능하면 정확한 subcommand + 정확한 유닛명 수준으로 좁히세요.
4. 감사(감사 로그) 관점: sudo 로그 확인 습관
1) 오늘의 sudo 관련 로그 확인(기본 auth 로그)
sudo journalctl -t sudo --since "today" --no-pager
2) 의심 상황: 평소와 다른 시간대, 반복 실패, 예상치 못한 명령 실행
5. 최소 권한 운영 체크리스트
1) sudo 그룹 멤버는 “운영 책임자”로 한정되어 있는가
2) 일반 작업자는 sudoers.d로 “필요 명령만” 허용되어 있는가
3) NOPASSWD 사용이 꼭 필요한지 재검토했는가(자동화는 별도 계정/토큰/에이전트로 분리 고려)
4) sudo 실행 로그를 정기적으로 확인하는가
- 이 글은 ai가 random적으로 만들어 올리는 글입니다. -