Kullanıcının parola olmadan systemctl / systemd servislerini çalıştırmasını sağlamak


25

Varsayılan kullanıcının, ubuntuşifre sorulmadan belirli bir servisi çalıştırabilmesini istiyorum .

Özellikle systemctl restart unicorn_my_app.service.

Talimatları takip ettiniz burada kullanıcı eklemek için ubuntuyeni oluşturulan grubuna LimitedAdminsteyit edilir:

$ getent group LimitedAdmins
LimitedAdmins:x:1001:ubuntu

Aşağıdaki metni içeren dizinde limitedadmins(kullanarak sudo vim) yeni bir dosya oluşturuldu /etc/sudoers.d:

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

Ben de denedim:

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

(Ve /bin/systemd)

İçeriği (veya ) /etc/sudoers/ile onaylandığı şekilde varsayılandır :sudo visudosudo 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

(Karma oturum açma #includedirbir yorum değil, #include yönergesi sözdiziminin bir parçasıdır ).

Ancak çalıştırdıktan sonra hala bir şifre istemi var systemctl restart unicorn_my_app.service

Servis init.ddizinde var:

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

755App chmodding çalıştı , ama ubuntuyine de sahibi olduğu için bunun bir fark yaratması gerektiğini düşünmeyin .

Fark etmeden sistemi yeniden başlatmayı bile denedim. Yeniden başlatma / yeniden yükleme gibi bir adımı mı özlüyorum? Yanlış bir şey mi yapılandırıyorsunuz?

Ben de kullanıldığı bahsetmeliyiz vimiçinde yeni dosya oluşturmak için /etc/sudoers.dgöründüğü gibi, visudokomut sadece düzenleme için /etc/sudoers.


Yanıtlar:


38

Sudoers dosyası oldukça esnektir ve bununla birlikte karmaşıklık gelir. Burada istediğiniz /bin/systemctl, belirli parametrelerle komuta erişime izin vermektir:

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

Temel olarak, yazacağınız komut satırının tamamını alırsınız, güvenliğin hatırı için yol adını kodlarsınız ve bunu sudoers dosyanıza (veya /etc/sudoers.d) koyarsınız . Ve 'başla' ve 'yeniden başlatmanın' sudo konusunda tamamen farklı olduğunu unutmayın; birine izin vermek diğerine erişim izni vermez.


1
Çalışıyor gibi görünmüyor. /bin/systemctl restart unicorn_my_app.serviceDoğrudan /etc/sudoers.d/limitedadminsdosyadan kopyalayabilir ve CLI'de çalıştırabilirim ve bir şifre istenir. Kullanıcının bir ubuntuyerde belirtilmesi gerekiyor mu, yoksa ALLtüm alanlar için tüm kullanıcılara açıyor mu?
— MikeiLL

5
Koşacaktınız sudo /bin/systemctl restart unicorn_my_app.serviceve şifre olmadan çalışmalı. (PsiOps'un cevabının bundan ayrılması durumunda yorum olarak yayınlanması)
— rosuav

1
@rosuav doğrudan gibi çalıştırmak, böylece herhangi bir yolu var mı systemctl restart myapp.servicekullanmadan sudo.
— kabirbaidhya

Gerçekten değil, ancak komutu bir komut dosyasına koyabilir (sudo öneki ile birlikte) ve sonra bu komut dosyasını $ PATH üzerine koyabilirsiniz. Veya bir kabuk takma adı yapın.
— rosuav

3
Dikkat: diğer dağıtımlar üzerinde systemctl olduğunu /usr/bin. :-(
— guettli
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.