Przy sysvinit
takim sudoers
wpisie wystarczy:
%webteam cms051=/sbin/service httpd *
Pozwoliłoby to na takie polecenia jak:
sudo service httpd status
sudo service httpd restart
Teraz systemd
nazwa usługi jest ostatnim argumentem. Tzn. Ponowne uruchomienie usługi można wykonać za pomocą:
systemctl restart httpd.service
Oczywiście myślałem, że zdefiniowanie polecenia systemctl * httpd.service
będzie działało, ale pozwoli to na coś, systemctl restart puppet.service httpd.service
co nie jest pożądanym efektem.
Biorąc to pod uwagę, jaki byłby najlepszy sposób, aby umożliwić użytkownikom innym niż root kontrolowanie system.d
usługi? To nie musi być sudoers
; może zmiana uprawnień do pliku może być wystarczająca?
sudo
konfiguracji, ale czy nie możesz po prostu zrobić czegoś takiegocms051=systemctl * httpd.service
?Odpowiedzi:
Po prostu dodaj wszystkie potrzebne polecenia
sudoers
osobno:źródło
cms051
?*
podobnymi wzorcami.Odpowiedź @ jofel była dokładnie tym, czego potrzebowałem, aby uzyskać działającą konfigurację. Daj to każdemu, kto natknie się na to pytanie. Potrzebowałem sposobu na
capistrano
ponowne uruchomienie aplikacji Ruby po wdrożeniu z mojego komputera lokalnego. Oznacza to, że potrzebowałem dostępu bez hasła do ponownego uruchamianiasystemd
usług. To jest to, co mam i działa cudownie!Uwaga : mój użytkownik i grupa nazywa się
deployer
Umieść kod w pliku niestandardowym tutaj:
/etc/sudoers.d/deployer
Kod:
źródło
deployer
w sprawie powinieneś uruchomićsystemctl
polecenie za pomocą sudo.Utwórz alias polecenia za pomocą poleceń, do których mają mieć dostęp. Następnie przypisz grupę do tego aliasu polecenia:
Dobrą praktyką jest również umieszczanie wszelkich zmian w /etc/sudoers.d/filename zamiast bezpośredniej edycji pliku sudoers. Pamiętaj, aby w sudoers wskazać nazwę pliku .d /, co i tak robi większość nowych dystrybucji. Umieszczenie tych 2 linii w sudoers powinno załatwić sprawę:
Uwaga: Ten # przed argumentem includedir nie jest komentarzem. To musi pozostać.
źródło
Najbezpieczniej jest je wyszczególnić, jak sugeruje Jofel .
Gdybym chciał pozwolić komuś na użycie ograniczonego podzbioru zdolności polecenia, nie ufałbym tym symbolom wieloznacznym w linii sudoers. Nawet jeśli język był bardziej wyrazisty niż globus powłoki, jest po prostu zbyt wiele przypadków narożnych, aby je śledzić.
service httpd *
Wiersz „ ” jest względnie bezpieczny, ponieważ (sprawdź to :)service
ma tylko jedną przydatną flagę (--status-all
), która nie robi nic szczególnie wrażliwego, i (sprawdź to również :)/etc/init.d/httpd
zaakceptuje tylko wiersze poleceń, na które chcesz zezwolić.Jeśli istnieje tak wiele kombinacji, że umieszczenie ich na liście staje się niezręczne, prawdopodobnie powinieneś zapytać, co robisz. Ale możesz dać im dostęp do starannie napisanego skryptu pomocnika, który uruchamia dla nich polecenie (podobnie jak
/etc/init.d/http
). Nawet w tym przypadku powinieneś być tak precyzyjny i wyraźny, jak to możliwe, aby dokładnie określić, jakie polecenia i opcje są dozwolone, i nie przekazywać żadnych danych wejściowych użytkownika bezpośrednio do polecenia docelowego.źródło