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 |