doas는 sudo와 유사한 권한 상승(privilege escalation) 프로그램입니다. 최대한 가볍고 단순하게 만드는 것을 목표로 설계되었으며, OpenBSD에서는 기본 권한 상승 도구로 채택되어 있습니다. 또한 OpenDoas라는 프로젝트를 통해 다른 유닉스 계열 운영체제에서도 사용할 수 있습니다.
sudo에는 어떤 문제가 있을까?
오랜 기간 동안 sudo는 유닉스 세계에서 사실상 표준으로 자리 잡은 권한 상승 프로그램이었습니다. 하지만 그만큼 유닉스 계열 머신을 사용하는 모든 사람의 모든 요구 사항을 충족시켜야 했고, 이러한 개발 방식은 sudo를 이해하기 어렵고 사용하기도 까다로운 거대한 프로그램으로 만들었습니다.
예를 들어 sudo의 동작 방식을 변경하려면 visudo라는 명령어를 실행해야 합니다. visudo는 "안전 모드"로 "/etc/sudoers" 파일을 열어주는 특수한 로더 프로그램입니다.
visudo는 크게 두 가지 역할을 합니다. 하나는 "/etc/sudoers" 파일의 문법 오류를 검사하는 것이고, 다른 하나는 현재 사용자 외에는 파일을 수정하지 못하도록 잠그는 것입니다. 겉보기에는 유용해 보이지만, 사실 visudo는 sudo가 점점 복잡해지고 있다는 증거에 가깝습니다.
즉, sudoers 파일의 문법이 워낙 복잡해져서 문법 오류 검사가 필수가 되었다는 뜻입니다. 또한 sudo는 단일 사용자 환경과 다중 사용자 환경을 모두 지원해야 하기 때문에 설정 파일을 현재 사용자에게만 허용하도록 잠글 필요도 생긴 것입니다.
물론 sudo는 훌륭한 프로그램입니다. 복잡한 설정 문법 덕분에 숙련된 시스템 관리자라면 정교한 권한 체계를 구축할 수 있고, 실제로 그것이 유용한 경우도 많습니다.
하지만 대부분의 일반 사용자에게 sudo는 단지 root 셸을 열어 프로그램을 설치하고 시스템을 조금 손볼 때 쓰는 도구일 뿐입니다. 이런 경우에는 sudo의 복잡성이 오히려 장점이 아니라 걸림돌로 느껴질 수밖에 없습니다.
왜 doas를 사용해야 할까?
doas의 목표는 바로 sudo의 복잡함을 해결하는 것입니다. OpenBSD를 위해 개발된 이후 빠르게 거의 모든 리눅스 시스템으로 포팅되었으며, 빠르고 사용하기 쉬우면서도 유지 보수와 보안이 간단하다는 점을 지향합니다.
doas의 설정 문법은 sudo와 완전히 다릅니다. 마치 평이한 영어 문장을 쓰듯 설정할 수 있습니다. 예를 들어 sudo에서 wheel 그룹의 모든 사용자가 비밀번호 없이 root로 명령을 실행하도록 허용하는 문법은 다음과 같습니다.
%wheel ALL=(ALL) NOPASSWD: ALL
반면 doas에서는 훨씬 직관적인 문법을 사용합니다.
permit nopass :wheel as root
또한 doas는 visudo처럼 설정을 수정하기 위한 특별한 로더 프로그램이 필요 없습니다. 충분한 권한만 있다면 아무 텍스트 편집기로 설정 파일을 열어 수정하면 됩니다.
덕분에 doas는 이해하고 파악하기가 훨씬 쉽습니다. 권한 있는 사용자와 그룹을 지정하는 단순하고 평이한 방식 덕분에 설정 과정이 투명해지고 실수도 줄어듭니다.
doas 설치 방법
리눅스 시스템을 사용 중이라면 이미 sudo를 권한 상승 도구로 쓰고 있을 가능성이 높습니다. 다행히 doas 설치는 매우 간단합니다.
Debian과 Ubuntu에서는 apt로 설치할 수 있습니다.
sudo apt install doas
Arch Linux에서는 pacman을 사용합니다.
sudo pacman -Syu opendoas
Fedora에서는 dnf를 사용합니다.
sudo dnf install opendoas
Void Linux에서는 xbps를 사용합니다.
sudo xbps-install opendoas
여기서는 Void Linux에 doas를 설치하는 상황을 가정하고 XBPS를 사용하겠습니다.
doas 설정 파일 다루기
doas 설치가 끝났다면 su 명령으로 root 사용자로 전환한 뒤 "/etc/doas.conf" 파일을 편집할 수 있습니다.
su --command="nano /etc/doas.conf"
su가 root 비밀번호를 묻고, 입력하면 nano 에디터로 설정 파일을 열거나 새로 생성합니다.
파일을 열어보면 doas.conf가 비어 있다는 것을 알 수 있습니다. visudo와는 완전히 다른 부분이지만, 앞서 말했듯 doas 설정은 생각보다 아주 간단합니다.
설정 문법 이해하기
doas.conf의 기본 문법 구조는 다음과 같습니다.
permit|deny [options] identity [as target] [cmd command [args ...]]
- permit / deny: 해당 규칙을 허용할지 거부할지 결정합니다.
- options: doas의 추가 설정입니다. 일반 사용자에게 가장 유용한 옵션은 persist와 nopass입니다.
- identity: doas를 실행하는 사용자 또는 그룹입니다.
- as target: 해당 identity가 실행할 수 있거나 실행할 수 없는 대상 사용자입니다.
- cmd: identity가 target 권한으로 실행할 수 있거나 없는 명령어입니다. 기본값은 모든 프로그램이며, 특정 프로그램만 지정할 수도 있습니다.
- args: 지정한 명령어에 적용되는 인자입니다.
예를 들어 다음과 같이 작성하면 wheel 그룹의 모든 사용자가 root 권한으로 명령을 실행할 수 있으며, 창을 닫을 때까지 root 셸이 유지됩니다.
permit persist :wheel as root
특정 사용자와 특정 명령만 대상으로 하는 규칙도 만들 수 있습니다. 예를 들어 다음 규칙은 사용자 "bob"이 비밀번호 확인 없이 root 권한으로 "apt" 프로그램을 실행하도록 허용합니다.
permit nopass bob as root cmd apt
필자의 경우 wheel 그룹 전체가 비밀번호 없이 root로 실행되도록 허용하면서, wheel 그룹에 속해 있는 사용자 aga만 root 권한으로 어떤 명령도 실행하지 못하도록 막고 싶었습니다. 그래서 "/etc/doas.conf"에 다음과 같이 작성했습니다.
permit nopass :wheel as root deny aga as root
설정 후 마무리 작업
설정을 마쳤다면 doas가 의도대로 동작하는지 몇 가지 명령을 실행해 확인해야 합니다. 먼저 doas.conf의 소유자를 root로 올바르게 지정합니다.
sudo chown -c root:root /etc/doas.conf
다음으로 설정 파일의 권한을 0644로 지정해 root 사용자 외에는 접근할 수 없도록 합니다.
sudo chmod -c 0644 /etc/doas.conf
마지막으로 설정 파일에 문법 오류가 없는지 doas 자체 기능으로 검사합니다. 다음 명령을 실행하세요.
sudo doas -C /etc/doas.conf && echo "OK" || echo "ERROR"
축하합니다! 시스템에 doas를 성공적으로 설치하고 설정했습니다. 이제 doas를 sudo 대신 사용하거나, 취향에 맞게 doas.conf를 세부적으로 다듬으면 됩니다. 리눅스 시스템 관리에 대해 더 알고 싶다면 관련 글을 참고해 보세요.
자주 묻는 질문(FAQ)
1. 설정이 제대로 작동하지 않습니다. 특정 사용자 규칙과 일반 규칙을 추가했는데, 사용자 규칙이 적용되지 않는 이유는 무엇인가요?
doas 설정 파일은 가장 일반적인 규칙부터 가장 구체적인 규칙 순서로 처리됩니다. 원하는 대로 동작하게 하려면 먼저 모든 사용자에게 적용되는 규칙을 위쪽에 작성하고, 그 아래에 특정 사용자를 대상으로 하는 규칙을 배치해야 합니다.
2. sudo와 doas를 같은 시스템에 함께 둘 수 있나요?
네, 가능합니다! doas와 sudo는 서로 다른 두 프로그램이라 충돌하지 않습니다. sudo를 시스템에 남겨둔 채 doas를 사용해도 전혀 문제없습니다.
3. doas로 root 셸을 얻을 수 있나요?
네, 설정 파일이 올바르게 구성되어 있다면 가능합니다. doas -s 명령을 실행하면 root 셸을 시작할 수 있습니다.