Konfigurowanie usługi systemowej do działania z dostępem do konta root


21

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?


2
Jak wygląda plik jednostki, dodaj go do pytania? Zwykle systemduruchamia pliki jednostek z prawami administratora.
— Thomas

Odpowiedzi:


31

powiedzieć systemd, aby uruchomił usługę sudo?

sudo nie ma z tym nic wspólnego.

Zazwyczaj instruujesz systemd, aby uruchamiał usługę jako określony użytkownik / grupa z wytycznymi User=i Group=w [Service]sekcji pliku jednostkowego.

Ustaw je jako root (lub usuń, ponieważ domyślnie działa jako root).


Miałem to skonfigurowane do używania określonego użytkownika, ponieważ korzystałem z przewodnika, aby go skonfigurować. Jednak w moim przypadku nie było to właściwe. Usunąłem to, aby domyślnie działało jako root, a teraz wszystko działa!
— Łukasz

2
Uruchamianie jako root to nie to samo, co uruchamianie z User=root. Zobacz moją odpowiedź.
— Mark Stosberg

Gdzie można edytować ten plik?
— Matthew


15

Aby usunąć, systemdusługi systemowe domyślnie działają jako root, ale nadal istnieje różnica między domyślnym zachowaniem a uruchomieniem usługi systemowej User=root.

Jak udokumentowano w Zmiennych środowiskowych w procesach spawnowanych , zmienne te są ustawiane tylko, jeśli User=są ustawione:

$USER, $LOGNAME, $HOME, $SHELL

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.


Dziękuję Ci! To była jedyna rzecz, która działała dla mnie w aplikacji, którą mam
— Pedro Torres

NB Jeśli ustawisz Użytkownik = root powinieneś również ustawić group = korzeń :) superuser.com/a/1452367/39364
— rogerdpack

2

rozwiązanie tymczasowe, ale sprawiło, że działało w mgnieniu oka:

/usr/bin/sudo /bin/bash -lc 'bundle exec rails server -e demo -p 80'

Może działać z użytkownikiem, który ma uprawnienia sudo w pliku jednostki systemowej w następujący sposób:

[Unit]
Description=Rails Webserver
After=syslog.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/var/www/webserver
ExecStart=/usr/bin/sudo /bin/bash -lc 'bundle exec rails server -e demo -p 80'
Restart=always
KillSignal=SIGQUIT

[Install]
WantedBy=multi-user.target

Ma to wiele problemów: po pierwsze, dwie pierwsze odpowiedzi wyjaśniają, dlaczego korzystanie z użytkownika, a następnie sudo jest niepotrzebne, i wskazują właściwy sposób, aby to zrobić. Po drugie, i tak nie powinieneś uruchamiać swojej aplikacji jako root. Po trzecie, twoja aplikacja internetowa powinna znajdować się za normalnym serwerem internetowym, takim jak nginx.
— Michael Hampton

Nie będę się z tobą nie zgadzał co do twoich punktów. Ale jeśli ktoś, tak jak ja, chciałby zbudować serwer tak szybko, jak tylko potrafisz, jest to realna opcja, która działa.
— daino3,

Prawie tak szybko jak to możliwe. Oczywiście użycie sudonieco spowolni uruchamianie. I to jest niepotrzebne.
— Michael Hampton

@MichaelHampton Próbuję napisać backdoor, więc uważam, że ta odpowiedź jest pomocna!
— P. Soutzikevich,

1

W tym przypadku uruchom go jako użytkownik systemu. Domyślnie usługa działa jako root.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.