อนุญาตให้ผู้ใช้เรียกใช้บริการ systemctl / systemd โดยไม่ต้องใช้รหัสผ่าน


25

ฉันต้องการให้ผู้ใช้เริ่มต้นubuntuเพื่อให้สามารถเรียกใช้บริการเฉพาะโดยไม่ต้องได้รับแจ้งให้ใส่รหัสผ่าน

systemctl restart unicorn_my_app.serviceเฉพาะ

ปฏิบัติตามคำแนะนำที่นี่เพื่อเพิ่มผู้ใช้ubuntuในกลุ่มที่สร้างขึ้นใหม่LimitedAdminsซึ่งได้รับการยืนยันด้วย:

$ getent group LimitedAdmins
LimitedAdmins:x:1001:ubuntu

สร้างไฟล์ใหม่limitedadmins(ใช้sudo vim) ใน/etc/sudoers.dไดเรกทอรีที่มีข้อความต่อไปนี้:

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

ฉันได้ลองด้วย:

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

(และ/bin/systemd)

เนื้อหาของ/etc/sudoers/เป็นค่าเริ่มต้นตามที่ยืนยันด้วยsudo visudo(หรือ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

(การลงชื่อเข้าใช้แฮช#includedirไม่ใช่ความคิดเห็น แต่เป็นส่วนหนึ่งของ#include ไวยากรณ์คำสั่ง )

อย่างไรก็ตามยังมีพรอมต์รหัสผ่านหลังจากเรียกใช้ systemctl restart unicorn_my_app.service

บริการอยู่ในinit.dไดเรกทอรี:

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

พยายาม chmodding 755ในแอพ แต่อย่าคิดว่าควรสร้างความแตกต่างเพราะubuntuเป็นเจ้าของมันอยู่ดี

แม้ลองรีบูตระบบโดยไม่มีความแตกต่าง ฉันไม่มีขั้นตอนเช่นเริ่ม / โหลดใหม่) กำหนดค่าสิ่งผิดปกติหรือไม่

ฉันควรจะพูดถึงว่าผมใช้vimในการสร้างไฟล์ใหม่ใน/etc/sudoers.dขณะที่มันดูเหมือนว่าvisudoคำสั่งเป็นเพียง/etc/sudoersสำหรับการแก้ไข


ดูเพิ่มเติมที่unix.stackexchange.com/questions/192706/…
Raedwald

คำตอบ:


38

ไฟล์ sudoers นั้นค่อนข้างยืดหยุ่นและด้วยความซับซ้อนที่เกิดขึ้น สิ่งที่คุณต้องการที่นี่คือการอนุญาตให้เข้าถึงคำสั่ง/bin/systemctlพร้อมพารามิเตอร์เฉพาะ:

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

โดยทั่วไปคุณเพียงแค่ใช้บรรทัดคำสั่งที่แน่นอนที่คุณจะพิมพ์รหัสยากชื่อพา ธ เพื่อความปลอดภัยและใส่ลงในไฟล์ sudoers ของคุณ (หรือ/etc/sudoers.d) และโปรดทราบว่า 'เริ่มต้น' และ 'เริ่มต้นใหม่' มีความแตกต่างอย่างสิ้นเชิงตราบใดที่ sudo เกี่ยวข้อง การอนุญาตอย่างใดอย่างหนึ่งจะไม่ให้สิทธิ์การเข้าถึงแก่ผู้อื่น


1
ดูเหมือนจะไม่ทำงาน ฉันสามารถคัดลอก/bin/systemctl restart unicorn_my_app.serviceโดยตรงจาก/etc/sudoers.d/limitedadminsไฟล์และเรียกใช้ใน CLI และได้รับแจ้งให้ใส่รหัสผ่าน ผู้ใช้ubuntuต้องมีการระบุ tp ไว้ที่ใดที่หนึ่งหรือALLเปิดให้ผู้ใช้ทั้งหมดสำหรับทุกโดเมนหรือไม่
MikeiLL

5
คุณจะเรียกใช้sudo /bin/systemctl restart unicorn_my_app.serviceและควรรันโดยไม่มีรหัสผ่าน (โพสต์เป็นความคิดเห็นในคำตอบกรณี PsiOps ถูกแยกออกจากนี้)
rosuav

1
@rosuav มีวิธีการใด ๆ เพื่อให้เราสามารถทำงานได้โดยตรงเช่นโดยไม่ต้องใช้systemctl restart myapp.service sudo
kabirbaidhya

ไม่ใช่จริง ๆ แต่คุณสามารถใส่คำสั่งลงในสคริปต์ (พร้อมคำนำหน้า sudo) แล้วใส่สคริปต์นั้นลงใน $ PATH หรือทำเป็นชื่อแทนเชลล์
rosuav

3
ข้อควรระวัง: สำหรับคนอื่น ๆsystemctl อยู่ในdistros /usr/bin:-(.
guettli
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.