← 아티클 목록

sudoers NOPASSWD 설정 — 안전하게 비밀번호 없이 sudo

2027-11-29#linux#보안#운영

배포 스크립트나 CI 러너에서 sudo가 비밀번호를 물어보며 멈추는 일이 있습니다. 그렇다고 NOPASSWD: ALL을 거는 건 그 계정이 사실상 무제한 root가 된다는 뜻입니다. 핵심은 꼭 필요한 명령에만 비밀번호 없이 허용하는 것입니다.

진단 — 지금 무엇이 허용돼 있나

해당 사용자가 어떤 sudo 권한을 가졌는지부터 봅니다.

로컬 터미널
sudo -l -U deploy     # deploy 사용자가 비밀번호 없이 쓸 수 있는 명령 목록

(ALL) NOPASSWD: ALL 같은 줄이 보인다면 범위가 지나치게 넓은 상태입니다.

개념 — NOPASSWD는 명령 단위로 건다

sudoers 규칙은 사용자 호스트=(실행계정) 태그: 명령 형식입니다. NOPASSWD:는 그 뒤에 나열된 명령에 한해 인증을 생략합니다. 즉 명령 목록을 좁히면 위험 범위도 같이 좁아집니다.

OUTPUT
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart myapp

이 줄은 "deploymyapp 재시작만 비밀번호 없이 가능"하다는 의미입니다. 다른 명령은 여전히 인증이 필요합니다.

단계 — visudo로 안전하게 작성

설정 파일은 반드시 visudo로 엽니다. 문법 오류가 있으면 저장을 막아주기 때문에, 직접 편집하다 sudo 자체가 깨지는 사고를 예방합니다.

할 일방법이유
별도 파일 사용visudo -f /etc/sudoers.d/deploy메인 파일 오염 방지
명령은 절대경로/usr/bin/systemctl ...경로 위조·PATH 우회 차단
인자까지 고정restart myapp만 허용임의 서비스 조작 차단
와일드카드 신중* 남용 금지의도치 않은 명령 통과 방지
  1. 전용 파일을 만들어 규칙을 한곳에 둡니다.
로컬 터미널
visudo -f /etc/sudoers.d/deploy
  1. 명령은 반드시 절대경로로 적고, 가능하면 인자까지 못박습니다. which systemctl로 실제 경로를 확인한 뒤 넣으세요.

  2. 저장 후 문법을 검증합니다.

로컬 터미널
visudo -c                 # 전체 sudoers 문법 검사
sudo -l -U deploy         # 의도대로 적용됐는지 재확인

visudo -c 출력에 parsed OK가 보이면 정상입니다.

흔한 실수

  • 상대경로(systemctl)로 적으면 PATH 조작으로 가짜 명령이 실행될 수 있습니다. 항상 절대경로.
  • NOPASSWD: /usr/bin/vi 처럼 셸 탈출이 가능한 명령을 허용하면, 그 안에서 임의 명령을 돌려 사실상 root가 됩니다. 에디터·find·tar 등은 특히 주의.
  • 파일 권한은 0440이어야 합니다. 권한이 틀리면 sudo가 해당 규칙을 무시합니다.

체크리스트

로컬 터미널
visudo -f /etc/sudoers.d/deploy    # 전용 파일에서 편집
visudo -c                          # 문법 검증 (parsed OK 확인)
sudo -l -U deploy                  # 적용 결과 확인
ls -l /etc/sudoers.d/deploy        # 권한 0440 확인

권한·인증 같은 리눅스 보안의 기본기를 명령어로 직접 끊어보며 익히려면 리눅스 트랙에서 회원가입 없이 무료로 실습할 수 있습니다.