พุ่งพรวด: อนุญาตให้ผู้ใช้ทั่วไปหยุดและเริ่มบริการที่กำหนดเองของฉัน


16

ฉันมีแอพพลิเคชั่นเว็บเซิร์ฟเวอร์ของฉันเริ่มต้นจากการบูทด้วยการพุ่งพรวด นี่คือสคริปต์พุ่งพรวด:

# web app node upstart file at /etc/init/webapp.conf

description "web application"

start on started mongodb
stop on runlevel [06]

respawn
respawn limit 10 100

env NODE_ENV=production

pre-start script
    ulimit -n 2048
end script

exec start-stop-daemon --start -c mainuser --exec /usr/bin/make -- -C /home/mainuser/app start-prod

มันทำงานได้อย่างไม่มีที่ติบนเซิร์ฟเวอร์ Ubuntu 10.04 LTS และฉันมีความสุขมากกับมัน

อย่างไรก็ตามฉันมีเชลล์สคริปต์การปรับใช้ซึ่งล็อกอินโดยใช้ SSH เป็นmainuser(นี่ไม่ใช่ sudoer) และจากนั้นจะอัปเดตไดเรกทอรีทำงานเป็นเวอร์ชันการปรับใช้ล่าสุด

ปัญหาที่นี่คือบริการจะต้องเริ่มต้นใหม่เพื่อให้แอปพลิเคชันโหลดไฟล์ต้นฉบับใหม่ อย่างไรก็ตามmainuserได้รับ ...

mainuser@Saturn101:~$ stop webapp
-bash: stop: command not found

... เมื่อพยายามหยุด ฉันต้องเรียกใช้sudo stop webappแต่ผู้ใช้รายนี้ไม่สามารถทำได้เนื่องจากเขาไม่ใช่ sudoer เพื่อเหตุผลด้านความปลอดภัยฉันไม่ต้องการให้เขาเป็น sudoer ด้วยรวมทั้งฉันไม่ต้องการใส่รหัสผ่าน sudo

ดังนั้นฉันmainuserจะอนุญาตให้ทำงานstop webappและได้start webappอย่างไร


1
คุณมีปัญหาด้านความปลอดภัยใด ๆ เกี่ยวกับการเพิ่มผู้ใช้ลงใน sudoers คุณสามารถเขียนกฎที่อนุญาตให้ผู้ใช้เพียงคำสั่งเฉพาะและไม่มากคุณสามารถรวมตัวเลือก nopasswd เพื่อให้พรอมต์รหัสผ่าน สำหรับข้อผิดพลาดเฉพาะที่คุณได้รับนั่นเป็นเพราะ start / stop อยู่ใน / sbin ซึ่งโดยปกติจะไม่ได้เป็นส่วนหนึ่งของเส้นทางของผู้ใช้ปกติ ดังนั้นคุณสามารถทำ "/ sbin / stop" หรือเพิ่ม sbin ไปยังเส้นทาง สิ่งนี้อาจทำงานได้ตราบใดที่ไม่มีรายการอื่นในสคริปต์เริ่ม / หยุดที่ต้องใช้รูท
Derek Pressnall

@DerekPressnall ขอบคุณ แต่เมื่อฉันเรียกฉันได้รับ/sbin/stop webapp stop: Unable to connect to system bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directoryฉันจะอนุญาตให้mainuserเรียกใช้งานคำสั่งนี้เท่านั้นได้อย่างไร
Tom

ข้อผิดพลาดเป็นผลมาจากผู้ใช้นี้ไม่มีสิทธิ์ของผู้ดูแลระบบ
Tom

คำตอบ:


31

sudo สามารถกำหนดค่าได้อย่างมากคุณสามารถอนุญาตให้ผู้ใช้รายนี้รันชุดคำสั่งที่ จำกัด โดยไม่ต้องใส่รหัสผ่าน บรรทัดต่อไปนี้/etc/sudoersควรทำสิ่งที่คุณต้องการ:

mainuser ALL = (root) NOPASSWD: /sbin/start webapp, /sbin/stop webapp

1
ยอดเยี่ยมขอบคุณมาก คุณเรียนรู้ทั้งหมดนี้มาจากman sudoersไหน? ฉันพบว่ามันค่อนข้างยากที่จะแยกวิเคราะห์
Tom

1
ไม่ฉันเคยทำมาก่อน ไม่ใช่ manpage ที่ง่ายที่สุดในการถอดรหัส :-)
mgorven

Unable to connect to system busล้มเหลวด้วย เพิ่มเติม: อนุญาตให้กลุ่มที่ไม่ใช่ sudo ควบคุมงานพุ่งพรวด
ciastek
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.