[Linux sudo 설정] 비밀번호 없이 sudo 사용 및 기타 유용한 Defaults 설정

2025. 7. 24. 17:27·linux
728x90
반응형

1. 간단 소개 (배경/목적)

리눅스 서버를 쓰다 보면 매번 sudo에 비밀번호를 입력하는 게 은근히 귀찮았다.
특히 자동화 스크립트나 CI/CD 파이프라인에서 “여기서도 비밀번호…?” 하고 삑사리 나면 정말 짜증났다.
그래서 이번엔 비밀번호 없이 sudo를 쓰는 법뿐만 아니라 자주 쓰는 Defaults 옵션들까지 한 번에 정리해봤다.


무작정 따라하기

2.1 visudo로 안전하게 편집하기

sudo visudo
  • - /etc/sudoers를 직접 고치지 말고 꼭 visudo로만 수정해야 한다.
  • - 문법 오류가 나면 sudo 전체가 멈출 수 있으니 주의한다.

2.2 비밀번호 없이 sudo (NOPASSWD)

# 사용자 단위
your_username ALL=(ALL) NOPASSWD: ALL

# 그룹 단위 (예: sudo 그룹)
%sudo ALL=(ALL:ALL) NOPASSWD: ALL

# 특정 명령만 허용
your_username ALL=(ALL) NOPASSWD: /sbin/reboot, /usr/bin/apt
  • - ALL=(ALL)은 모든 호스트와 모든 사용자를 의미한다.
  • - NOPASSWD: 뒤에 허용할 명령을 콤마로 구분해서 지정한다.

2.3 환경 변수 유지 (env_keep)

Defaults env_keep += "http_proxy https_proxy"
  • - CI/CD에서 프록시나 환경 변수를 그대로 쓰고 싶을 때 유용하다.
  • - 기본적으로 sudo는 안전을 위해 환경 변수를 모두 제거한다.

2.4 PATH 경로 지정 (secure_path)

Defaults secure_path = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  • - root 전용 PATH를 따로 지정해서 의도치 않은 바이너리가 실행되는 것을 막는다.
  • - 필요하다면 경로를 추가로 덧붙여도 된다.

2.5 타임아웃 조절 (timestamp_timeout)

# sudo 비밀번호 캐시 유지 시간을 5분으로 설정 (기본 15분)
Defaults timestamp_timeout = 5
# -1로 설정하면 캐시를 무제한 유지
  • - “어? 또 비밀번호 물어봐?” 하는 경우를 줄여준다.
  • - 보안이 더 걱정되면 숫자를 더 작게 설정한다.

2.6 로그와 프롬프트 커스터마이징

# 명령마다 로그 남기기
Defaults logfile = "/var/log/sudo.log"

# sudo 프롬프트 문구 변경
Defaults passwd_tries=3
Defaults badpass_message="비밀번호가 틀렸다..! 남은 시도: %3d"
  • - 누가 언제 무슨 명령을 실행했는지 기록을 남길 수 있다.
  • - 프롬프트를 한글로 바꿔 헷갈리지 않게 한다.

2.7 sudoers.d 디렉토리 활용

sudo visudo -f /etc/sudoers.d/50-ci_cd
  • - 메인 sudoers 파일을 깔끔하게 유지하면서 특정 설정만 분리해 관리할 수 있다.

2.8 번외 (insults)

Defaults insults  # 비밀번호 틀리면 욕함

# "Wrong password, you incompetent fool!"
# "Maybe if you used more than just two fingers..."

3. 설정 실행 방법 및 주의사항

1. 백업 먼저

sudo cp /etc/sudoers /etc/sudoers.bak

2. visudo 꼭 사용

  • • 직접 에디터로 열면 문법 확인이 안 돼서 위험하다.

3. 테스트하기

sudo -l       # 허용된 sudo 목록 확인
sudo whoami   # root가 잘 나오는지 확인

4. 최소 권한 원칙

  • • NOPASSWD: ALL보다 필요한 명령만 좁혀서 쓰는 것이 좋다.

5. 관리 정책 수립

  • • 팀 규모가 크면 sudoers.d로 역할별 설정을 분리해 관리한다.

4. 표로 정리

항목 설정 예시 설명
비밀번호 없이 모든 sudo your_username ALL=(ALL) NOPASSWD: ALL 특정 사용자에게 모든 명령을 비밀번호 없이 허용한다
비밀번호 없이 특정 명령만 your_username ALL=(ALL) NOPASSWD: /sbin/reboot 재부팅만 비밀번호 없이 허용한다
환경 변수 유지 Defaults env_keep += "http_proxy https_proxy" 지정한 환경 변수를 sudo 후에도 유지한다
안전한 PATH 설정 Defaults secure_path = /usr/local/sbin:… root 전용 PATH를 명시적으로 지정한다
sudo 캐시 타임아웃 조절 Defaults timestamp_timeout = 5 sudo 비밀번호 캐시 유지 시간을 5분으로 설정한다
로그 파일 지정 Defaults logfile = "/var/log/sudo.log" sudo 명령 로그를 별도 파일에 남긴다
설정 분리 관리 (sudoers.d) /etc/sudoers.d/50-ci_cd 메인 파일과 별개로 설정을 분리해 관리한다

마무리

Defaults 옵션을 잘 활용하면 sudo 동작 방식을 세부적으로 제어할 수 있다.
팀과 상황에 맞게 NOPASSWD, env_keep, secure_path, timestamp_timeout, logfile 등을 적절히 조합해 설정하면 편리함과 보안을 동시에 잡을 수 있다.
필요한 옵션만 골라서 /etc/sudoers 또는 /etc/sudoers.d/에 적용해 관리하면 된다.

728x90
반응형

'linux' 카테고리의 다른 글

[리눅스 SSH 접속] RSA 키페어로 인증하는 방법 (feat. Mac → Ubuntu)  (3) 2025.06.02
[리눅스 패키지 관리] apt? apt-get?  (0) 2025.05.29
[리눅스 inode] ln 명령어 하드링크 vs 심볼릭링크  (0) 2025.05.29
[리눅스 디스크 관리] linux disk 파티션, mount  (1) 2025.05.28
[리눅스 프로세스 관리] ps와 kill 명령어 + 시그널까지 한 번에 정리하기  (0) 2025.05.28
'linux' 카테고리의 다른 글
  • [리눅스 SSH 접속] RSA 키페어로 인증하는 방법 (feat. Mac → Ubuntu)
  • [리눅스 패키지 관리] apt? apt-get?
  • [리눅스 inode] ln 명령어 하드링크 vs 심볼릭링크
  • [리눅스 디스크 관리] linux disk 파티션, mount
highgarden
highgarden
커밋 하나하나가 쌓여 커다란 정원이 되는 중입니다. 하루하루 정성껏 심어가는 중 https://github.com/highgarden7
  • highgarden
    커밋심는 정원
    highgarden
  • 전체
    오늘
    어제
    • 분류 전체보기 (37)
      • ai (1)
      • devops (2)
      • Nest.js (14)
      • linux (14)
      • 네트워크 (6)
      • git (0)
      • aws (0)
      • docker (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    springboot
    vercel
    E2E
    IP
    Chat GPT
    Java
    Linux
    네트워크
    nestjs
    githib action
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
highgarden
[Linux sudo 설정] 비밀번호 없이 sudo 사용 및 기타 유용한 Defaults 설정
상단으로

티스토리툴바