
User=someuser
이를 장치 구성에서 지정하는 것과 서비스로 실행하는 것의 사용 사례는 무엇입니까? 서비스에서 이를 지정하는 것이 의미가 있나요 --user
?User=
--user
답변1
User=someuser
시스템 서비스에서는 루트 사용자로 시작되지 않는 시스템 서비스를 정의합니다. 시스템 서비스는 사용자 로그인과 독립적으로 실행됩니다. 시스템에 로그인한 사람이 없더라도 계속 실행됩니다. 가능할 때마다 전용 서비스 계정에서 서비스를 실행하는 것이 보안상 좋지만 때로는 서비스를 루트로 시작해야 하며 서비스 계정에 대한 TCP 또는 UDP 포트 열기와 같이 일반적으로 루트 액세스가 필요한 일부 초기 작업을 수행한 후 스스로 전환될 수 있습니다. 포트 번호는 1024보다 낮습니다.
--user
로그인한 사용자에 대한 서비스를 시작합니다. 기본 가정은 해당 서비스를 소유한 사용자가 시스템의 마지막 남은 세션에서 로그오프할 때 모든 사용자 서비스가 중지된다는 것입니다. 그러나 시스템 관리자는 로그아웃 후에도 사용자 프로세스가 지속되도록 허용할 수 있습니다. 일부 배포판에서는 Unix/Linux 시스템이 역사적으로 로그아웃 시 사용자 프로세스를 가져오는 데 엄격하지 않고 사용자가 특정 작업을 수행하지 않고도 로그아웃 시 백그라운드 프로세스를 계속 실행할 수 있다고 기대할 수 있기 때문에 기본적으로 이를 허용합니다 systemd
.
(반면에 다중 사용자 시스템의 관리자는 전통적으로 예를 들어 노트북 사용자가 실제로 로그아웃하지 않고 노트북 덮개를 닫고 자리를 떠나는 경우 레거시 사용자 프로세스를 정리하기 위해 다양한 솔루션을 구현해야 했습니다. 세션별 프로세스를 필요할 때 정확히 종료할 수 있지만 결과적으로 시스템 관리자는 systemd
자동 세션 정리가 필요한지 여부와 시기에 대한 정책 결정을 내려야 합니다.)
동일한 사용자가 동시에 여러 세션에 로그인하는 경우 --user
서비스 사본 하나만 실행됩니다. 따라서 --user
서비스는 실제로 사용자의 특정 세션과 연결되지 않고 사용자 자신과만 연결됩니다.
세션이 속한 로그인한 사용자가 아닌 다른 사람으로 서비스를 실행하는 것은 --user
매우 제한된 상황에서만 유용하다고 생각합니다. 서비스에 대한 액세스를 특정 공유 계정으로 제한해야 하는 경우 일반적으로 해당 서비스를 시스템 서비스로 만드는 것이 가장 좋다고 생각합니다. 필요한 경우 액세스 권한을 가집니다. 계정을 공유하는 다른 사람이 제공합니다.
답변2
문제는 어떤 systemd 인스턴스가 서비스를 실행하고 있고 누가 그 서비스에서 명령을 실행해야 하는지입니다.
사용자가 로그인할 때 서비스가 시작되지만 joe
명령 자체는 일반 계정으로 실행되기를 원할 수 있습니다 shared_account
. 이 경우 서비스는 사용자 인스턴스에서 실행되지만 joe
명령에 대한 액세스는 으로 제한될 수 있습니다 shared_account
.
일반적으로 말하면, 서비스 인스턴스를 소유한 사람과 서비스에서 명령을 실행하는 UID --user
의 차이점은 다음과 같습니다. 지정하지 User=
않으면 User=
기본값은 systemd 인스턴스의 소유자입니다.