# Run0 - sudo를 대체하는 systemd 기반 도구 발표

> Clean Markdown view of GeekNews topic #14596. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=14596](https://news.hada.io/topic?id=14596)
- GeekNews Markdown: [https://news.hada.io/topic/14596.md](https://news.hada.io/topic/14596.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-05-01T20:35:25+09:00
- Updated: 2024-05-01T20:35:25+09:00
- Original source: [mastodon.social](https://mastodon.social/@pid_eins/112353324518585654)
- Points: 16
- Comments: 1

## Topic Body

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

## Comments



### Comment 24837

- Author: neo
- Created: 2024-05-01T20:35:26+09:00
- Points: 2

###### [Hacker News 의견](https://news.ycombinator.com/item?id=40205714) 
* run0은 sudo와 달리 클라이언트로부터 어떤 컨텍스트도 상속받지 않고 PID 1에서 새로 포크된 격리된 exec 컨텍스트에서 대상 명령을 호출함. 이는 shell 명령의 일반적인 사용 사례와 맞지 않아 실제로는 문제의 원인이 될 것이며 널리 채택되기 어려울 것임.
* run0이 광범위하게 사용된다면 sudo처럼 동작하는 플래그가 추가되고, 사람들은 항상 그 플래그를 사용하게 될 것임. 이것이 문제를 일으킬 때 systemd 프로젝트는 sudo를 제거하려 할 수 있음.
* run0은 권한 레벨 간에 엄격한 IPC 경계를 가짐으로써 sudo와 다른 접근 방식을 취하고 있음. systemd를 사용하고 싶은 사람들에게는 좋은 방법이 될 수 있음.
* sudo는 대부분 한 명에 의해 관리되고 있음.
* run0의 동작은 여러모로 sudo보다는 ssh에 가까움. localhost에 SSH로 연결하는 것으로 유사한 도구를 구현할 수 있음.
* 1980년대 중반 Berkeley의 실험적 BSD 클론에서 비슷한 아이디어가 테스트되었으나, 모든 것을 파이프로 전달하는 복잡성 때문에 거부되었음. 대신 상속된 환경 검사가 강화됨.
* run0에는 로깅, 전달되는 환경변수, 시그널 처리, sudoedit 대체 방안 등에 대한 의문점들이 있음.
* run0 외에도 Rust로 작성된 메모리 안전하고 버그가 적은 sudo 구현체가 있음.
* 최근에는 한 물리 머신에 한 사용자만 있는 경우가 많아 유닉스 권한 시스템을 간소화할 필요가 있음.
* 권한 상승 시 터미널 배경색을 붉게 변경하는 것은 중요한 부분이 아님.
