모든 사용자에 대해 systemd 사용자 서비스를 설치하고 활성화합니다.

모든 사용자에 대해 systemd 사용자 서비스를 설치하고 활성화합니다.

목표: 모든 사용자가 시작할 수 있는 시스템 서비스를 설치합니다. 문제는 사용자 서비스를 sudo설치(사용)하는 단계로 활성화(아니요) 하는 것입니다 sudo.

에 서비스 파일을 넣었습니다 /etc/systemd/user/. 이것은 필수입니다 sudo.

그러면 sudo systemctl --user enable my_service작동하지 않습니다. 슈퍼유저는 사용자를 위해 서비스를 활성화할 수 없으며 오직 사용자만 그렇게 할 수 있습니다.

sudo make install문제: 이 서비스를 내 프로젝트의 일부로 설치하고 싶습니다 . sudo서비스 파일을 복사하기 위해 여기에 필요합니다 /etc/systemd/user/. 이 설치 단계에서 사용자 서비스도 활성화하여 사용자가 활성화하지 않고도 시작할 수 있도록 하고 싶습니다.

내가 생각할 수 있는 솔루션은 다음과 같습니다.

  • 이후에 설치 프로그램이 추가 활성화 단계를 수행해야 합니다(Sudo 없이) sudo make install.
  • 설치 단계의 일부로 활성화 단계를 실행하고 sudo -E -u $USER systemctl....required 를 사용하여 -E도달합니다 DBUS_SESSION_BUS_ADDRESS(사용자의 systemctl에 필요함). 문제는 설치 명령도 필요하다는 점인데 -E -u $USER, 이는 이례적이다.
  • 실패하면 사용자에게 enable서비스를 실행하라는 메시지가 표시됩니다.start
  • 어떻게든 해당 단계에 대한 권한을 포기합니다 enable. 방법을 모르겠습니다.

이것이 일반적인 사용 사례가 되어야 할 것 같습니다. 사람들은 일반적으로 이 문제를 어떻게 해결합니까?

답변1

모든 사용자를 위한 systemd 사용자 서비스 설치

모든 사용자를 위한 systemd 사용자 서비스를 설치하려면 .service아래 나열된 폴더 중 하나에 유닛 파일을 배치 하면 됩니다.사용자 단위 검색 경로존재하다man systemd.unit(5). 중요한 것은:

  • /etc/systemd/user/*(일반적으로 시스템 관리자가 사용하도록 고안됨)
  • /usr/lib/systemd/user/*(일반적으로 설치된 패키지에서 사용될 것으로 예상됩니다)

sudo이러한 서비스 파일을 이러한 폴더에 설치하려면 일반적으로 /root 권한이 필요합니다 .

모든 사용자에 대해 시스템 사용자 서비스 활성화

모든 사용자에 대해 서비스를 활성화하려면 /root 권한이 필요한 --globalwith 와 같은 systemctl 플래그를 사용할 수 있습니다.systemctl --global enablesudo

--global

활성화 및 비활성화와 함께 사용하면 전역 사용자 구성 디렉터리에서 작동하여 모든 사용자의 향후 모든 로그인에 대해 전역적으로 장치 파일을 활성화하거나 비활성화합니다.

에서 가져옴man systemctl(1)

systemctl preset대신 사용systemctl enable

사용을 고려해 볼 수도 있습니다.systemctl preset바꾸다 systemctl enable. systemctl enable없는 한 과 동일하게 작동합니다 .시스템 기본 파일disable my-service.service이 경우 교체됩니다 라는 줄이 있습니다 systemctl disable.

이를 통해 사용자/관리자는 서비스를 자동으로 활성화할지 여부를 결정할 수 있습니다. 예를 들어 Fedora에는 disable *기본값이 있으므로 Fedora의 모든 시스템 서비스는아니요설치 중에 기본적으로 활성화됩니다.


그런데 일반적으로 systemd 서비스는 프로젝트의 Makefile이 아니라 패키지 관리자에 의해 설치/활성화됩니다.

예를 들어 .debDebian/Ubuntu용 서비스 파일을 이미 생성한 경우 systemd 사용자 서비스 파일을 추가하고 활성화하는 것은 sudo apt install ./my-deb패키지에 이름이 지정된 파일을 생성하는 것만큼 간단합니다. debian/my-package.user.service그 다음에dh_installsystemduser패키지를 설치할 때 자동으로 설치 및 활성화는 물론 제거/비활성화도 처리합니다.

답변2

모든 사용자 또는 특정 사용자에 대해 특정 "sudo-less" 명령 실행을 활성화하면 이를 달성할 수 있습니다. 문제의 명령은 다음과 같습니다 systemctl enable <my_service>. 지침을 따르기 전에 이 기사를 읽어 보시기 바랍니다 $ man 5 sudoers.

이 작업은 두 가지 방법으로 수행할 수 있습니다.

  • /etc/sudoers특정 명령을 사용하여 편집하십시오: $ sudo visudo. 참고: 엉망으로 만들면 호스팅이 손상되거나 액세스할 수 없게 될 수도 있습니다 sudo. 편집할 내용은 아래와 같습니다.
  • 파일 만들기: $ sudo visudo -f /etc/sudoers.d/my_service내용은 나중에 자세히 설명하겠습니다. 이는 위의 직접 수정만큼 미묘하다는 점에 유의하세요 /etc/sudoers. /etc/sudoers.d/파일을 편집하는 것보다 삭제 /etc/sudoers하면 sudo시스템 업데이트 프로세스 전반에 걸쳐 지속되는 정책 수정이 생성된다는 이점이 있습니다 .sudoers

편집할 내용은 다음과 같습니다.

ALL <your_host_name>=NOPASSWD: /usr/bin/systemctl enable <my_service>

이 경우 (사용자)는 를 사용하지 않고도 ALL호스트에서 명령을 실행(및 실행)할 수 있습니다 .<your_host_name>sudo

한 명의 사용자에 대해서만 이 작업을 수행하려면 ALL해당 사용자 이름을 바꾸십시오. 둘 다 아닌 경우(즉, ALL하나의 사용자 이름이 아니라 여러 사용자 이름) 사용자 별칭을 만들어 sudo-less cmd를 실행할 수 있는 권한이 있는 사용자 이름을 집계합니다. 이 경우 추가한 한 줄은 두 줄이 됩니다.

User_Alias <systserv_enable_users> = Kamela, bkd12, Oliver, Gauthier
<systserv_enable_users> <your_host_name>=NOPASSWD: /usr/bin/systemctl enable <my_service>

이 줄이나 다음 줄을 직접 추가하려면 /etc/sudoers다음 줄 위에 추가하세요.

@includedir /etc/sudoers.d

HTH.

관련 정보