Chcę, aby domyślny użytkownik ubuntu
mógł uruchomić określoną usługę bez pytania o hasło.
Konkretnie systemctl restart unicorn_my_app.service
.
Postępowałem zgodnie z instrukcjami tutaj, aby dodać użytkownika ubuntu
do nowo utworzonej grupy LimitedAdmins
, co potwierdza:
$ getent group LimitedAdmins
LimitedAdmins:x:1001:ubuntu
Utworzono nowy plik limitedadmins
(za pomocą sudo vim
) w /etc/sudoers.d
katalogu zawierającym następujący tekst:
%LimitedAdmins ALL=NOPASSWD: /etc/init.d/unicorn_ofn_america restart, /etc/init.d/unicorn_ofn_america start
Próbowałem także:
%LimitedAdmins ALL=NOPASSWD: /bin/systemctl/unicorn_ofn_america restart, /bin/systemctl/unicorn_ofn_america start
(I /bin/systemd
)
Treść /etc/sudoers/
jest wartością domyślną potwierdzoną za pomocą sudo visudo
(lub sudo cat /etc/sudoers
):
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
(Logowanie hashowe #includedir
nie jest komentarzem, ale częścią składni dyrektywy #include ).
Jednak po uruchomieniu nadal pojawia się monit o podanie hasła systemctl restart unicorn_my_app.service
Usługa znajduje się w init.d
katalogu:
$ ls -l /etc/init.d | grep unicorn
-rwxr--r-- 1 ubuntu ubuntu 1874 Oct 29 06:47 unicorn_my_app
Próbowałem chmodding 755
w aplikacji, ale nie sądzę, że powinno to mieć znaczenie, ponieważ ubuntu
i tak jest jej właścicielem.
Próbowałem nawet zrestartować system bez różnicy. Czy brakuje mi kroku, takiego jak ponowne uruchomienie / przeładowanie)? Konfigurujesz coś źle?
Powinienem również wspomnieć, że kiedyś vim
tworzyłem nowy plik /etc/sudoers.d
, ponieważ wydaje się, że visudo
polecenie służy tylko do edycji /etc/sudoers
.
Odpowiedzi:
Plik sudoers jest dość elastyczny, a wraz z nim złożoność. Chcemy tutaj umożliwić dostęp do polecenia
/bin/systemctl
z określonymi parametrami:%LimitedAdmins ALL=NOPASSWD: /bin/systemctl restart unicorn_my_app.service
Zasadniczo wystarczy wziąć dokładny wiersz poleceń, który należy wpisać, na stałe wpisać nazwę ścieżki ze względów bezpieczeństwa i umieścić ją w pliku sudoers (lub
/etc/sudoers.d
). I zauważ, że „start” i „restart” są zupełnie inne, jeśli chodzi o sudo; zezwalanie jednemu nie daje dostępu do drugiego.źródło
/bin/systemctl restart unicorn_my_app.service
bezpośrednio z/etc/sudoers.d/limitedadmins
pliku i uruchomić go w interfejsie CLI i pojawia się monit o hasło. Czy użytkownikubuntu
musi gdzieś określić tp, czyALL
otwiera go dla wszystkich użytkowników dla wszystkich domen?sudo /bin/systemctl restart unicorn_my_app.service
a następnie powinien działać bez hasła. (publikuje jako komentarz w przypadku oddzielenia odpowiedzi PsiOps od tej)systemctl restart myapp.service
bez użyciasudo
.systemctl
jest w/usr/bin
:-(.