나는 항상 데몬이 "init" 시스템에 의해 실행, 소유, 제어 및 유지 관리되는 시스템 전반의 서비스라는 인상을 받아 왔습니다. 하지만 최근에 일부 데몬 서비스(예: pulseaudio, 이렇게 설명함)에 대해 알게 되었습니다.좋은 대답)은 개별 사용자가 소유하고 제어하는 "사용자별" 서비스로 운영됩니다.
언제부터 이런 일이 시작됐나요? 이것은 새로운 것입니까? systemd가 도입한 init 시스템의 "사용자별" 데몬에 대한 명시적 지원이 있습니까? 아니면 이 현상이 다른 init 시스템에도 있습니까?
답변1
물론, 기본적인 메커니즘은 그 자체만큼이나 오래되었습니다 fork
. wait
이를 수행하기 위한 편리한 명령줄 도구는 1990년대부터 있었습니다. 그것안 돼요systemd로 시작하세요.
Daniel J. Bernstein의 유명한 daemontools 패키지는 슈퍼유저 액세스 없이 자신의 서비스 세트를 관리하려는 사용자가 사용할 수 있습니다. 사용자는 행복하게 설정할 수 있습니다디렉토리 스캔그리고 svscan
그것에 맞서 싸우십시오. 관리자만 작성하면 되는 유일한 누락 부분은 svscan
사용자를 위해 자동으로 실행되는 인프라입니다. 물론 이는 권한을 삭제하고 svscan
적절한 사용자로 실행되는 시스템 서비스일 뿐입니다.
Laurent Bercot의 s6부터 Wayne Marshall의 범인에 이르기까지 daemontools 제품군의 다른 모든 도구 세트에도 마찬가지입니다.
시스템 관리자가 처음부터 이러한 서비스를 수동으로 설정하기보다는 기본적으로 이러한 인프라를 제공하는 서비스 관리 도구 세트입니다. 주로 Upstart로 시작합니다 init
.상당히사용자당.
발사 에이전트launchd
비록 Mach와의 강력한 결합에도 불구하고 비슷한 아이디어가 MacOS에도 존재합니다 .
systemd는 나중에 나왔습니다. PAM 플러그인, 데스크탑 버스 및 "로그인" 데몬의 복잡한 조합을 통해) 필요에 따라 각 사용자에 대한 템플릿 서비스 단위를 인스턴스화하는 시스템 전체 서비스 관리자와 함께 사용자별 모드에서 실행될 수 있습니다. systemd
프로그램의 또 다른 인스턴스입니다.
이 기능을 제공하는 다른 도구 세트에는 nosh 도구 세트가 포함됩니다.
추가 읽기
- "세션 초기화".누보 리치 요리법. 우분투.
- 제임스 헌트, 스테판 그레이버, 드미트리 레드코프, 스티브 랑가체크(2012-11-12).Ubuntu Raring Upstart 사용자 세션. 우분투.
- 네이선 윌리스(2013-04-17).사용자 세션 시작. LWN.
- 조나단 데보인 폴라드(2016). "사용자별 시스템 서비스". 스낵 가이드. 소프트웨어. jdebp.eu.
- 조나단 데보인 폴라드(2016). "사용자별 사용자 서비스". 스낵 가이드. 소프트웨어. jdebp.eu.
- 루트 액세스 없이 Upstart 서비스 생성 및 관리
- https://unix.stackexchange.com/a/407863/5132
답변2
이것은 항상 가능했습니다.
(프로세스 1)을 생성하려면 init
상위 프로세스가 됩니다. 당신이해야 할 일은 포크와 죽는 것뿐입니다. 상위 프로세스가 종료되면 init
고아 프로세스가 채택됩니다.
수익 창출 중단의 또 다른 부분은 stdin/stdout/stderr을 닫거나 최소한 터미널에서 연결을 끊는 것입니다.
이 중 어느 것도 프로세스의 소유자 사용자를 변경하지 않습니다. CAP_SETUID(루트) 기능이 있는 프로세스만 이 작업을 수행할 수 있습니다. 프로세스 소유자가 고아 프로세스를 통해 변경을 수행하도록 허용하면 보안이 쓸모 없게 됩니다.
이유는. 나는 모른다.