umożliwiając użytkownikowi uruchamianie usług systemctl / systemd bez hasła

25

Chcę, aby domyślny użytkownik ubuntumó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 ubuntudo nowo utworzonej grupy LimitedAdmins, co potwierdza:

$ getent group LimitedAdmins
LimitedAdmins:x:1001:ubuntu

Utworzono nowy plik limitedadmins(za pomocą sudo vim) w /etc/sudoers.dkatalogu 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 #includedirnie 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.dkatalogu:

$ ls -l /etc/init.d | grep unicorn
-rwxr--r-- 1 ubuntu ubuntu 1874 Oct 29 06:47 unicorn_my_app

Próbowałem chmodding 755w aplikacji, ale nie sądzę, że powinno to mieć znaczenie, ponieważ ubuntui 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ś vimtworzyłem nowy plik /etc/sudoers.d, ponieważ wydaje się, że visudopolecenie służy tylko do edycji /etc/sudoers.

MikeiLL
źródło

Odpowiedzi:

38

Plik sudoers jest dość elastyczny, a wraz z nim złożoność. Chcemy tutaj umożliwić dostęp do polecenia /bin/systemctlz 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.

rosuav
źródło
1
Wygląda na to, że nie działa. Mogę skopiować /bin/systemctl restart unicorn_my_app.servicebezpośrednio z /etc/sudoers.d/limitedadminspliku i uruchomić go w interfejsie CLI i pojawia się monit o hasło. Czy użytkownik ubuntumusi gdzieś określić tp, czy ALLotwiera go dla wszystkich użytkowników dla wszystkich domen?
MikeiLL,
5
Uruchomiłbyś, sudo /bin/systemctl restart unicorn_my_app.servicea następnie powinien działać bez hasła. (publikuje jako komentarz w przypadku oddzielenia odpowiedzi PsiOps od tej)
rosuav,
1
@rosuav Czy jest jakiś sposób, abyśmy mogli uruchomić go bezpośrednio tak, jak systemctl restart myapp.servicebez użycia sudo.
kabirbaidhya
Nie bardzo, ale możesz umieścić polecenie w skrypcie (wraz z prefiksem sudo), a następnie umieścić ten skrypt w $ PATH. Lub uczyń z niego alias powłoki.
rosuav,
3
Uwaga: Na innych dystrybucjach systemctl jest w /usr/bin:-(.
guettli