작성자 소개: Yadullah Abidi는 델리 대학교에서 컴퓨터 과학을 전공하고 첸나이 아시아 언론대학원에서 저널리즘 석사 학위를 취득했습니다. Windows와 Linux 시스템, 프로그래밍, PC 하드웨어, 사이버 보안, 멀웨어 분석, 게이밍 분야에서 10년 이상의 경력을 보유하고 있으며, 현재 MakeUseOf에서 스태프 작가로 활동하며 사이버 보안, 게임, 소비자 기술을 다룹니다. 이전에는 Candid.Technology에서 부편집장, The Mac Observer에서 뉴스 편집장으로 근무했습니다. 또한 JavaScript/TypeScript, Next.js, MERN 스택, Python, C/C++, AI/ML 경험을 갖춘 풀스택 개발자이기도 합니다.
Sudo는 지구상 거의 모든 Linux 사용자에게 몸에 밴 명령어가 되었습니다. 상승된 권한으로 무언가를 실행해야 할 때마다 sudo가 자연스럽게 먼저 떠오르죠. 하지만 sudo는 오래된 도구이며, 여러분이 간과하고 있을지도 모르는 더 나은 권한 상승 방법이 Linux 터미널에 존재합니다.
평소 쓰던 OS를 바꾸면 작업 흐름이 즉시 개선되듯이, Linux에서 sudo를 doas로 교체하는 것도 터미널 워크플로우에 같은 효과를 가져다줍니다. 직접 전환해 본 결과, 드디어 권한 규칙이 논리적으로 정리되었습니다.
Sudo는 강력하지만 너무 복잡합니다
대부분의 사용자가 제대로 이해하지 못하는 과도하게 복잡한 규칙
Sudo는 어디에나 있습니다. Ubuntu, Fedora, Arch를 비롯해 들어본 적 있는 거의 모든 주요 Linux 배포판에 기본 탑재되어 있죠. 대부분의 Linux 사용자에게 sudo는 자신의 계정에 실행 권한이 없을 때 명령어 앞에 붙이는 접두어 그 이상도 이하도 아닙니다. 수많은 시스템 문제를 해결해 주는 필수 터미널 명령어 중 하나입니다.
그러나 문제는 sudo의 복잡성입니다. sudo의 소스 코드는 약 16만 줄의 C 코드로 이루어져 있으며, 설정 및 지원 파일까지 포함하면 22만 3천 줄을 넘어섭니다. 주된 역할이 특정 명령을 root로 실행하는 것뿐인 도구 치고는, 권한 있는 프로세스를 구동하기에는 놀라울 정도로 방대한 코드량입니다.
코드베이스가 클수록 공격자에게 더 넓은 공격 표면을 제공합니다. 그리고 sudo는 과거에도 아슬아슬하게 큰 사고를 피한 적이 있습니다. 예를 들어 CVE-2021-3156('Baron Samedit'으로 알려진 취약점)은 sudo의 힙 기반 버퍼 오버플로우 결함으로 root에 대한 완전한 권한 상승을 허용했으며, 무려 10년 가까이 코드베이스에서 발견되지 않은 채 남아 있었습니다.
보안을 넘어 설정 측면에서도 sudo는 결코 만족스럽지 않습니다. /etc/sudoers 규칙을 처음부터 직접 작성해 본 경험이 있다면, 그 문법 앞에서 한 번쯤은 고개를 갸웃했을 겁니다. 사람이 읽기에도 쉽지 않죠. 사용자가 root로 모든 명령을 실행할 수 있도록 허용하는 단순한 규칙조차 다음과 같이 작성됩니다.
username ALL=(ALL:ALL) ALL
이 문법을 처음 접하는 사람에게는 상당히 어렵게 느껴질 수 있습니다. 수십 년간 단순함은 고려하지 않은 채 기능만 계속 추가된 설정 형식에서 나온 한 줄입니다.
Doas는 극단적으로 단순함을 유지합니다
하나의 역할, 최소한의 문법, 불필요한 고민 없음
Doas는 OpenBSD 프로젝트가 sudo를 시스템 기본 구성에 포함하기에는 규모가 너무 크다고 판단한 후 OpenBSD를 위해 개발되었습니다. sudo의 비대함을 짊어지지 않으면서 근본적으로 같은 일을 하도록 처음부터 새롭게 설계된 도구입니다.
그 결과물은 약 500줄의 C 코드로 구성된 프로그램으로, 설치 시 차지하는 디스크 용량도 몇 킬로바이트에 불과합니다. 코드가 적다는 것은 공격 표면이 작고 잠재적 버그가 적으며, 사람이 합리적인 시간 안에 코드를 감사할 수 있다는 의미이기도 합니다.
설정 문법 역시 같은 미니멀리즘 철학을 따릅니다. sudoers 문법과 씨름하게 만드는 대신, doas는 평이한 영어를 사용합니다. doas 설정 대부분은 소리 내어 읽기만 해도 의미를 정확히 파악할 수 있습니다. 앞서 언급한 sudoers 설정에 해당하는 doas 설정은 다음과 같습니다.
permit username as root
이게 전부입니다. 쉽게 읽고 이해할 수 있어야 할 설정에 무작위 기호와 특수 문자를 억지로 끼워 넣을 필요가 없습니다.
전환에 걸리는 시간은 몇 시간이 아니라 몇 분입니다
두통 없이 sudo를 대체하는 빠른 설정
doas는 원래 OpenBSD 전용 도구이지만, OpenDoas 포트를 사용하면 Linux에서도 활용할 수 있습니다. Debian과 Ubuntu에서는 기본 패키지 관리자로 설치할 수 있습니다.
apt install doas
이 방식은 다른 배포판에서도 마찬가지로 통합니다. Arch에서는 pacman을, Fedora에서는 dnf를 사용해 한 번의 명령으로 doas를 설치할 수 있습니다.
다만 설치 후 /etc/doas.conf 설정 파일을 직접 생성해야 합니다. sudo와 달리 설치 시 자동으로 만들어지지 않는데, 믿기 어렵겠지만 이것은 버그가 아니라 의도된 설계입니다. 무엇을 허용할지 스스로 신중하게 판단하도록 강제하는 기능이죠. 설정 자체는 단 한 줄이면 충분합니다.
permit persist yourusername as root
이것은 단일 사용자 시스템을 위한 최소한의 설정입니다. 사용자 수나 실제 용도에 맞게 적절히 수정하면 됩니다.
설정 파일을 만든 후에는 반드시 파일 권한을 잠가야 합니다. 소유권을 root:root로, 권한을 0400으로 설정하면 root만 파일을 읽을 수 있으며, doas는 실행 전에 이 조건을 요구합니다. 이후 doas -C /etc/doas.conf 명령으로 설정 파일의 유효성을 검증하면 바로 사용할 준비가 끝납니다.
한 가지 주의할 점이 있습니다. doas는 OpenBSD를 위해 설계되었기 때문에 XAUTHORITY나 LC_ALL 같은 Linux 고유의 환경 변수를 자동으로 유지하지 않습니다. X 환경에서 그래픽 프로그램을 실행하거나 로케일 설정을 유지하려면 이 부분에서 걸릴 수 있습니다. 다행히 해결책은 설정 파일에 한 줄만 추가하면 됩니다.
setenv { DISPLAY XAUTHORITY LANG LC_ALL }참고로 doas가 GUI나 로케일 설정을 망가뜨리는 것은 아닙니다. 다만 무엇을 신뢰해야 하는지 함부로 가정하지 않을 뿐입니다. 이 설정이 없으면 root가 X 세션을 확인할 수 없거나, 명령 출력의 언어가 갑자기 바뀌거나, 텍스트 정렬 방식이 달라지는 등 일관성 없는 동작이 발생할 수 있으며, 숙련된 Linux 사용자도 이런 실수를 저지르곤 합니다.
OpenDoas 정보
- OS: Linux
- 개발자: Ted Unangst
- 가격 모델: 무료, 오픈소스
OpenDoas는 doas 권한 상승 도구의 경량화되고 이식성 높은 구현체입니다.
이제 작업 흐름이 한결 가벼워졌습니다
마찰은 줄고, 변수는 적어지고, 통제력은 그대로
일상적으로 사용해 보니 doas는 사용자를 더 신중하게 만듭니다. 설정 파일이 이제 읽을 수 있는 수준이 되었기 때문에, 실제로 다시 열어 수정하고 내가 원하는 방식으로 컴퓨터 통제를 세밀하게 조정하게 됩니다. sudoers를 쓰던 시절에는 없었던 일입니다.
모든 규칙이 평이한 언어로 작성된 의식적인 결정이므로, 의도하지 않은 권한을 실수로 부여할 가능성도 줄어듭니다. 단일 사용자 데스크톱 환경을 운영하는 사용자에게 doas는 sudo가 제공하는 모든 기능을, 애초에 필요 없는 복잡함 없이 그대로 제공합니다.
물론 전환이 모든 사람에게 맞는 선택은 아닙니다. 대규모 다중 사용자 서버 환경이나 sudo의 세밀한 제어 기능에 의존하는 시스템이라면 sudo를 계속 사용하는 것이 현명합니다. 하지만 개인 Linux 머신이라면, 배포판이 Arch든 Mint든 Ubuntu든 무엇이든, doas가 sudo보다 더 낫고 단순하며 깔끔한 권한 관리 방법을 제공합니다.