run0: systemd의 sudo 대체 도구
- v256에 포함된 새로운 도구 (실제로는 기존 systemd-run 을 symlink 한것)
- sudo와 유사하게 동작하지만, SUID가 아님
- 서비스 매니저에 타겟 사용자의 UID로 명령이나 셸을 호출하도록 요청함
- 클라이언트에서 컨텍스트를 상속하지 않고 PID 1에서 새로 포크된 격리된 실행 컨텍스트에서 타겟 명령을 호출
- run0는 자체 설정 언어를 구현하지 않고, 권한 부여에 polkit을 사용함.
- 권한 상승 중에는 터미널 배경을 붉은 색조로 바꾸어 특권으로 동작중임을 알려줌. 윈도우 타이틀에도 권한 상승 여부를 나타내는 붉은 점을 표시함.
- systemd-run의 --property= 스위치를 지원해서 호출된 특권 명령/세션에 대해 원하는 서비스 설정을 지정할 수 있음.
sudo의 문제점
- sudo는 상대적으로 큰 SUID 바이너리로, 비특권 사용자가 자신의 컨텍스트에서 호출할 수 있는 특권 코드임.
- 복잡한 설정 언어, 로드 가능한 플러그인(LDAP 등), 호스트 이름 매칭 등 공격 표면이 큼.
- SUID 바이너리라는 점이 가장 큰 문제. 비특권 코드에 의해 호출되고, 비특권 코드가 제어하는 실행 컨텍스트(환경변수, 프로세스 스케줄링 속성, cgroup 할당, 보안 컨텍스트, 전달된 파일 디스크립터 등)를 상속함. SUID 바이너리는 이를 매우 주의깊게 정리해야 하지만 잘 하지 못하는 경우가 많음.
그외
- run0로 셸 뿐 아니라 루트 권한으로 다른 명령도 실행할 수 있음. 프로그램 종료시 터미널 색상이 원래대로 돌아옴.
- 배경색 자동 변경이 불편할 수 있지만 --background= 스위치로 변경하거나 비활성화 할 수 있음.
- sudo를 run0로 완전히 교체하는 것도 가능해 보이지만, 배포판마다 선호하는 바가 다를 수 있음.
- LDAP 지원 등 sudo의 플러그인 방식은 문제가 많음. polkit은 systemd에서 안전하게 관리되는 방식으로 확장 가능함.
- run0의 bash 스크립트 실행 여부는 sudo와 호환되는 SUDO_xxx 환경변수로 확인 가능함.
GN⁺의 의견
- 자주 사용되는 sudo의 대안으로 run0를 제시한 점이 인상적임. SUID의 위험성을 피하면서도 sudo의 장점은 계승한 것으로 보임.
- 특권 상승 여부를 시각적으로 명확히 알려주는 것은 실수로 인한 피해를 줄이는데 도움이 될 것 같음. 터미널 배경색을 바꾸는 것이 거슬릴 수도 있겠지만 옵션으로 조정할 수 있어 큰 문제는 아닐 듯함.
- polkit을 통한 권한 설정이 sudo보다는 덜 유연할 수 있지만, 오히려 단순해지고 공격 표면을 줄일 수 있을 것임. polkit의 설정 예시를 잘 문서화 해주는 것이 중요해 보임.
- sudo에 의존하는 기존 스크립트 등의 마이그레이션을 위해서는 당분간 sudo도 함께 제공되어야 할 것 같음. 하지만 신규 환경이라면 처음부터 run0를 사용하는 것이 좋겠음.
- 장기적으로는 run0 도입을 계기로 SUID를 과감히 제거하고, 시스템 권한을 시스템 서비스에서 집중 관리하는 아키텍처로의 전환을 기대해 봄. 보안과 견고성 측면에서 바람직한 방향이라 생각함.