sudo는 특정 명령어에 대해 일시적인 관리자 권한을 부여하고, 실행 기록을 남기는 도구입니다. 이 접근 방식은 시스템 보안을 강화하면서도 일반 사용자가 필요한 작업을 수행할 수 있도록 돕습니다.
1. su와의 차이점
Ubuntu 등 일부 리눅스 배포판은 설치 후 기본적으로 root 계정을 활성화하지 않습니다. su 명령을 통해 root 계정으로 전환하려면 먼저 passwd 명령으로 암호를 설정해야 합니다. 이후 su를 실행하고 설정한 비밀번호를 입력하면 root 세션에 진입할 수 있습니다. 작업 완료 후 exit로 일반 사용자로 돌아갑니다.
2. sudo의 인증 메커니즘
sudo는 매번 비밀번호를 입력해야 하며, 성공적으로 인증한 후 5분간 유효합니다. 이 기간 동안 추가 명령을 실행할 때 다시 비밀번호를 묻지 않습니다.
3. 권한 설정 파일: /etc/sudoers
이 파일은 root만 수정할 수 있으며, 편집 시 반드시 visudo 명령을 사용해야 합니다. 잘못된 문법은 시스템이 불안정해질 수 있으므로 주의가 필요합니다.
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
## 특정 사용자가 루트 권한으로 다양한 명령을 실행할 수 있도록 허용
## Host Aliases
## 여러 머신 그룹을 정의 가능
# Host_Alias WEB_SERVERS = web1, web2, *.example.com
## User Aliases
## 사용자 그룹을 정의 (예: %developers)
# User_Alias DEVELOPERS = alice, bob
## Command Aliases
## 관련된 명령어들을 묶어 별칭으로 정의
# Cmnd_Alias NETWORKING = /sbin/ip, /sbin/iptables, /usr/bin/ping, /sbin/route
# Cmnd_Alias SYSTEM = /sbin/shutdown, /sbin/reboot, /usr/bin/systemctl
## Defaults 설정
Defaults requiretty
Defaults env_reset
Defaults env_keep += "PATH LANG LC_*"
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
## 권한 규칙 정의
## 형식: 사용자 | 그룹 @ 호스트=(대상사용자) 명령어
root ALL=(ALL) ALL
## wheel 그룹 사용자에게 모든 명령어 허용
%wheel ALL=(ALL) ALL
## 특정 사용자에게 루트 권한 부여 (비밀번호 없이도 가능)
testuser ALL=(root) NOPASSWD: ALL
## 특정 그룹에 일부 명령어만 허용
%admins localhost=(ALL) NETWORKING, SYSTEM
4. 일반 사용자에게 sudo 권한 부여
권한을 부여하려면 visudo 명령어로 파일을 열고 다음 구문을 추가합니다:
alice ALL=(ALL) ALL
%devs ALL=(root) NOPASSWD: /usr/bin/git, /usr/bin/npm
5. 주요 옵션 설명
-b: 백그라운드에서 명령 실행-h: 도움말 출력-H: 홈 디렉터리를 새 사용자의 것으로 설정-i: 대상 사용자로 로그인 쉘 시작-k: 현재 세션의 비밀번호 유효성을 종료-l: 현재 사용자가 실행 가능한 명령 목록 표시-p: 비밀번호 입력 시 표시되는 프롬프트 변경-s <shell>: 지정된 쉘로 실행-u <user>: 특정 사용자로 명령 실행-v: 비밀번호 유효 시간을 5분 연장-V: sudo 버전 정보 출력