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.