lib/systemd/system
서비스를 쿼리하고 예를 들어 서비스가 에서 시작되었는지 또는 에서 시작되었는지 알 수 있습니까 /.config/systemd/user/
?
저는 서비스를 작성하는 중이며 systemd
현재 루트로 실행되도록 설정했지만 lib/systemd/system
각 사용자에게도 작동하도록 만들고 싶습니다.
내 서비스에는 루트 액세스 권한이 있는지 여부를 알아야 하는 몇 가지 검사가 있습니다. 그래서 나는 서비스에 관한 그러한 정보를 얻을 수 있는지 알아보려고 노력하고 있습니다.
저는 Ubuntu를 사용하고 있지만 이 솔루션이 Ubuntu를 사용하는 다른 배포판에도 적용 가능한지 알고 싶습니다 systemd
.
답변1
기본 서비스가 루트로 실행된다고 가정하면 다음과 같이 매우 간단한 테스트를 할 수 있습니다.
if(getuid() == 0)
{
...act as root...
}
else
{
...act as user...
}
기능 에 관심이 있을 수도 있습니다 seteuid()
. 이를 통해 사용자 간 변경이 가능하며 이는 루트가 된 후 다른 사용자로 전환할 수 있는 경우에만 가능합니다. 실행 파일에 플래그가 있으면 루트가 될 수 있는데 s
, 이는 서비스에 대해 실제로 권장되지 않습니다(그리고 기본적으로 systemd는 이러한 변경이 발생하지 않도록 합니다).
마지막으로 systemd를 사용하면 루트가 아닌 사용자로 다중 사용자 서비스를 실행할 수 있습니다. 이는 해당 식별자가 0이 아니라는 의미입니다. 이러한 기능을 사용하는 경우 먼저 ID를 확인해야 합니다.
struct passwd * p = getpwnam("my-global-service-user-name");
if(getuid() == p->pw_uid)
...
사용자 이름은 다음과 같을 수 "root"
있으며 함수는 0으로 설정된 /etc/passwd
루트 사용자에 대한 항목을 반환합니다.uid