Mam usługę w postaci aplikacji node.js skonfigurowanej z Systemd na Raspbian Jessie i używa ona własnego konta użytkownika. Jednak stwierdzam, że usługa nie działa poprawnie, ponieważ nie ma niezbędnych uprawnień. Jeden z zainstalowanych modułów węzła wymaga dostępu do konta root. Jeśli uruchomię aplikację ręcznie za pomocą sudo, wszystko działa dobrze.
Czy istnieje sposób, aby poinformować systemd o uruchomieniu usługi za pomocą sudo?
systemd
uruchamia pliki jednostek z prawami administratora.Odpowiedzi:
sudo
nie ma z tym nic wspólnego.Zazwyczaj instruujesz systemd, aby uruchamiał usługę jako określony użytkownik / grupa z wytycznymi
User=
iGroup=
w[Service]
sekcji pliku jednostkowego.Ustaw je jako root (lub usuń, ponieważ domyślnie działa jako root).
źródło
User=root
. Zobacz moją odpowiedź.Aby usunąć,
systemd
usługi systemowe domyślnie działają jako root, ale nadal istnieje różnica między domyślnym zachowaniem a uruchomieniem usługi systemowejUser=root
.Jak udokumentowano w Zmiennych środowiskowych w procesach spawnowanych , zmienne te są ustawiane tylko, jeśli
User=
są ustawione:Testowałem, aby potwierdzić to odkrycie. Więc jeśli chcesz uruchomić usługę systemową jako root, która potrzebuje jednej z powyższych zmiennych, musisz ustawić
User=root
.źródło
rozwiązanie tymczasowe, ale sprawiło, że działało w mgnieniu oka:
Może działać z użytkownikiem, który ma uprawnienia sudo w pliku jednostki systemowej w następujący sposób:
źródło
sudo
nieco spowolni uruchamianie. I to jest niepotrzebne.W tym przypadku uruchom go jako użytkownik systemu. Domyślnie usługa działa jako root.
źródło