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를 과감히 제거하고, 시스템 권한을 시스템 서비스에서 집중 관리하는 아키텍처로의 전환을 기대해 봄. 보안과 견고성 측면에서 바람직한 방향이라 생각함.