Linux에서 sudo 비밀번호 입력 없이 쓰기
sudo apt update
sudo systemctl restart nginx
sudo reboot
리눅스를 쓰다 보면 sudo를 정말 많이 쓰게 됩니다. 그런데 매번 비밀번호를 치다 보면 슬슬 귀찮아집니다.
그 귀찮음이 극에 달하면 결국, sudo 비밀번호 입력 안 하도록 설정하는 것에 손을 대기로 마음을 먹게 됩니다. 이 글을 찾아 오신 분들도 아마도 저와 비슷한 기분이 들었음이 틀림없습니다.
이번 글에서는 sudo 비밀번호 입력을 없애는 방법을 정리해 보겠습니다.

sudo 설정은 어디에 있을까? 그리고 수정하는 방법은?
sudo 설정의 기본 파일은 여기에 있습니다.
/etc/sudoers
sudo 설정은 문법이 틀리면 꽤 곤란해집니다. 설정을 잘못 넣었다가 sudo 자체가 막히면 복구가 귀찮아집니다. 그래서 전용 명령어인 visudo를 씁니다.
sudo visudo
visudo는 저장할 때 문법 검사를 해주고, 오타가 있으면 바로 알려줍니다. 공식메뉴얼을 봐도 꼭 visudo를 사용하라고 되어있더군요.
그런데 /etc/sudoers를 직접 고치지는 말자
sudo visudo를 입력해보면, 바로 /etc/sudoers가 열리고 곧바로 수정할 수 있습니다.
그러나 /etc/sudoers 파일을 열어서 수정하는 건 별로 좋은 습관이 아닙니다.
저는 보통 메인 설정 파일은 건드리지 않고 /etc/sudoers.d/ 이 디렉토리에 새로운 파일을 생성해두는 것을 선호합니다.
나중에 내가 뭘 바꿨는지 찾기 쉽고, 되돌리기도 쉽습니다.
sudo는 추가 설정을 아래 디렉토리에 담긴 파일의 설정을 include하도록 설계되어있습니다.
실제 /etc/sudoers 파일의 맨 마지막 줄에 include /etc/sudoers.d/ 가 보입니다.
sudo visudo -f /etc/sudoers.d/no-password-common-commands
파일명은 자유롭게 나중에 쉽게 알아볼 수 있게 만들면 되지만,파일 이름은 마음대로 정해도 됩니다.
다만 너무 대충 짓지는 않는 게 좋습니다. 나중에 보면 본인이 괴롭습니다.
아! 참고로 ~ 와 . 가 포함된 파일명은 sudoer가 무시한다고 되어었습니다.
디렉토리에 들어있는 README파일 내부에 그런 내용을 안내하는 주석이 들어있더군요.
설정 형식을 알아봅시다.
sudoers 설정은 대략 이런 형식입니다.
정말이지... 외울 수 없는 문법입니다. 그냥 어디 적어놓거나 지금 이 블로그 페이지를 즐겨찾기 해놓으세요.
자주 쓰는 것은 아니지만 가끔 쓰려고 할때 기억이 안납니다.
사용자명 호스트=(실행할_사용자) 옵션: 명령어
예를 들어 사용자 이름이 potter이고, apt update를 비밀번호 없이 실행하고 싶다면 이렇게 쓸 수 있습니다.
potter ALL=(ALL) NOPASSWD: /usr/bin/apt
각 부분을 뜯어 보면 다음과 같습니다.
- potter : 설정을 적용할 사용자 이름.
- ALL : 모든 호스트에서 적용하겠음.
- (ALL) : 어떤 사용자 권한으로 실행할 수 있는지를 의미합니다. 가끔 (root) 라고 쓰시는 분도 봤습니다. 저는 ALL로 합니다.
- NOPASSWD: 비밀번호를 묻지 않겠음.
- /usr/bin/apt : 허용할 명령어의 "절대 경로"입니다.
명령어 경로를 잘 모르겠으면 which로 확인해보면 됩니다.
~$which apt
/usr/bin/apt
~$which apt-get
/usr/bin/apt-get
~$which reboot
/usr/sbin/reboot
~$which systemctl
/usr/bin/systemctl
ALL로 다 열고 싶은 유혹
여기서 아주 강한 유혹이 옵니다.
potter ALL=(ALL) NOPASSWD: ALL
굉장히 깔끔합니다.모든 sudo 명령을 비밀번호 없이 실행합니다.편하죠. 너무 편합니다.
각자의 선택이지만 저는 이건 참는 쪽이 낫다고 생각합니다. 잘못 입력한 명령 하나가 바로 root 권한으로 실행되는 상황을 상상하기도 싫기 때문입니다.
스크립트가 엉뚱하게 돌아도 비밀번호 입력이라는 마지막 브레이크가 없습니다. 터미널을 잠깐 열어둔 상태에서 누가 만져도 그대로 끝입니다. 세상엔 이상한 사람들이 많습니다...
선택은 각자의 몫입니다.
자주 쓰는 명령어만 비밀번호 없이 허용하기
저는 “자주 쓰는 것만 풀자” 쪽으로 타협합니다. 이 방식이 꽤 괜찮습니다.
예를 들어 apt, apt-get, reboot, systemctl 정도만 비밀번호 없이 쓰고 싶다고 해보겠습니다.
우선 설정 파일을 열고,
sudo visudo -f /etc/sudoers.d/no-password-common-commands
아래와 같이 작성합니다.
potter ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/apt-get, /usr/sbin/reboot, /usr/bin/systemctl
이제 potter씨는 아래 명령들을 비밀번호 없이 실행할 수 있습니다.
sudo apt update
sudo apt -y upgrade
sudo apt-get update
sudo reboot
sudo systemctl reload nginx
systemctl을 다 열는게 부담스럽다면, 특정 명령만 허용할 수도 있습니다.
potter ALL=(ALL) NOPASSWD: /usr/bin/systemctl reload nginx, /usr/bin/systemctl status nginx
여러 줄로 나눠 쓰면 더 읽기 쉽다
명령어가 많아지면 한 줄이 지저분해집니다. 이럴 때는 \로 줄을 나눌 수 있습니다.
리눅스 유저들이 자주보는 익숙한 당연한 줄나눔이지만 이상하게도 막상 실제로 하려면 \를 잘 안쓰게 됩니다.
하지만 역시 쓰면 가독성이 좋습니다.
potter ALL=(ALL) NOPASSWD: \
/usr/bin/apt, \
/usr/bin/apt-get, \
/usr/sbin/reboot, \
/usr/bin/systemctl
보기 좋고 깔끔하네요.
특정 그룹에 적용하기
이 설정도도 꽤 유용합니다. 여려명이 관리하는 서버에서는 그룹 기준이 관리하기 편할 때가 있습니다.
특정 그룹에만 적용하고 싶다면 %그룹명 형식으로 쓰면 됩니다.
예를들어 admin 그룹이라면 이렇게 됩니다.
%admin ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/apt, /usr/bin/apt-get
비밀번호 입력 유지 시간 늘리기
아예 비밀번호를 없애는 게 찝찝하다면 다른 방법도 있습니다. 바로 비밀번호를 다시 묻는 시간 조절입니다.
기본적으로 비밀번호를 한번 입력하면 10분인가 15분정도는 다시 묻지 않는데, 이 시간을 조절할 수 있습니다.
timestamp_timeout 설정을 이용하는 방법니다.
예를 들어 이렇게 하면 60분 동안 sudo 비밀번호를 다시 묻지않습니다.
Defaults timestamp_timeout=60
단위는 "분"입니다만 '0'을 넣으면 항상 비밀번호를 입력해야하는 악몽입니다.
'-1' 로 설정하면 한번 입력한 sudo 비밀번호를 터미널을 닫을 때까지 안물어봅니다. 거의 ALL에 버금가는 강력한 편안함이지만 사용하면서 다소 찝찝함은 있습니다.
물론 비밀번호 없이 허용할지, 유지 시간을 늘릴지 이 설정은 공존이 가능합니다.
예를 들어 이런 식으로 섞을 수 있습니다.
Defaults timestamp_timeout=30
potter ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/apt-get, /usr/sbin/reboot
자주 치는 명령은 비밀번호 없이, 그 외 sudo 명령은 한 번 인증하면 30분 유지.
이 정도면 편의성과 안전 사이에서 꽤 괜찮은 지점이 아닐까? 라고 생각합니다.
귀찮음을 줄이는 것은 좋은데, 그 댓가로 불안함을 늘리는 것은 싫으니까요.
마무리
sudo 비밀번호 입력을 없애는 건 어렵지 않습니다.
위의 설명이 길었지만 짧게 요약하면,
visudo로/etc/sudoers.d/아래에 별도 설정 파일을 만듭니다.
sudo visudo -f /etc/sudoers.d/no-password-common-commands
NOPASSWD규칙을 추가하면 됩니다.
Defaults timestamp_timeout=30
potter ALL=(ALL) NOPASSWD: \
/usr/bin/apt, \
/usr/bin/apt-get, \
/usr/sbin/reboot
어느정도 비밀번호를 열어둘지는 각자의 판단입니다만, 이것만은 기억했으면 합니다.
손가락의 편안함과 마음의 편안함이 동시에 만족되어야 진정한 편안함일 것입니다.