memungkinkan pengguna untuk menjalankan layanan systemctl / systemd tanpa kata sandi

25

Saya ingin pengguna default, ubuntuuntuk dapat menjalankan layanan tertentu tanpa diminta kata sandi.

Khusus systemctl restart unicorn_my_app.service.

Telah mengikuti instruksi di sini untuk menambahkan pengguna ubuntuke grup yang baru dibuat LimitedAdmins, yang dikonfirmasi dengan:

$ getent group LimitedAdmins
LimitedAdmins:x:1001:ubuntu

Membuat file baru, limitedadmins(menggunakan sudo vim) di /etc/sudoers.ddirektori yang berisi teks berikut:

%LimitedAdmins ALL=NOPASSWD: /etc/init.d/unicorn_ofn_america restart, /etc/init.d/unicorn_ofn_america start

Saya juga sudah mencoba:

%LimitedAdmins ALL=NOPASSWD: /bin/systemctl/unicorn_ofn_america restart, /bin/systemctl/unicorn_ofn_america start

(Dan /bin/systemd)

Konten /etc/sudoers/adalah default sebagaimana dikonfirmasi dengan sudo visudo(atau 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

(Tanda pagar #includedirbukan komentar, tetapi bagian dari sintaks arahan #include ).

Namun masih ada prompt kata sandi yang berjalan systemctl restart unicorn_my_app.service

Layanan ada di init.ddirektori:

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

Sudah mencoba chmodding 755pada aplikasi, tetapi jangan berpikir itu akan membuat perbedaan, karena ubuntumemilikinya.

Bahkan mencoba me-reboot sistem tanpa perbedaan. Apakah saya melewatkan langkah, seperti memulai ulang / memuat ulang)? Mengkonfigurasi sesuatu yang salah?

Saya juga harus menyebutkan bahwa saya dulu vimmembuat file baru di dalamnya /etc/sudoers.d, karena sepertinya visudoperintah itu hanya untuk mengedit /etc/sudoers.

MikeiLL
sumber

Jawaban:

38

File sudoers cukup fleksibel, dan dengan itu muncul kompleksitas. Yang Anda inginkan di sini adalah mengizinkan akses ke perintah /bin/systemctl, dengan parameter khusus:

%LimitedAdmins ALL=NOPASSWD: /bin/systemctl restart unicorn_my_app.service

Pada dasarnya Anda hanya mengambil baris perintah persis yang akan Anda ketik, hard-code nama path demi keselamatan, dan memasukkannya ke file sudoers Anda (atau /etc/sudoers.d). Dan perhatikan bahwa 'mulai' dan 'mulai ulang' sama sekali berbeda sejauh menyangkut sudo; mengizinkan satu tidak akan memberikan akses ke yang lain.

rosuav
sumber
1
Sepertinya tidak berfungsi. Saya bisa menyalin /bin/systemctl restart unicorn_my_app.servicelangsung dari /etc/sudoers.d/limitedadminsfile dan menjalankannya di CLI, dan saya diminta kata sandi. Apakah pengguna ubuntuperlu ditentukan di suatu tempat atau tidak ALLmembukanya untuk semua pengguna untuk semua domain?
MikeiLL
5
Anda akan menjalankan sudo /bin/systemctl restart unicorn_my_app.servicedan kemudian harus berjalan tanpa kata sandi. (memposting sebagai komentar jika jawaban PsiOps terpisah dari yang ini)
rosuav
1
@rosuav Apakah ada cara agar kita dapat menjalankannya langsung seperti systemctl restart myapp.servicetanpa menggunakan sudo.
kabirbaidhya
Tidak juga, tetapi Anda bisa memasukkan perintah ke dalam skrip (lengkap dengan awalan sudo), dan kemudian letakkan skrip itu ke $ PATH. Atau menjadikannya shell alias.
rosuav
3
Perhatian: Di distro lain systemctl ada di /usr/bin:-(.
guettli