การอนุญาตให้ผู้ใช้ที่ไม่ใช่รูทเพื่อรีสตาร์ทเซอร์วิส


27

พื้นหลัง :

ฉันสร้าง app ที่เรียกว่ามีmyapp Spring-bootประกอบด้วย jar ที่สามารถเรียกใช้งานได้ด้วยตนเองและเข้ากันได้กับบริการ systemd ตอนนี้ฉันกำลังพยายามรวมเข้ากับเจนกินส์

สิ่งที่ฉันต้องการ:

ฉันต้องการให้เจนกินส์สามารถ:

  • หยุดบริการ
  • แทนที่โถ
  • เริ่มบริการใหม่

ปัญหา:

ถึงตอนนี้เฉพาะ sudoers เท่านั้นที่สามารถเริ่ม / หยุดบริการได้ ฉันไม่ต้องการให้เจนกินส์เป็นคนโง่ (ดูเหมือนว่ายุ่ง)

โครงสร้างปัจจุบัน:

ฉันมีผู้ใช้myappที่มี/home/myappโฟลเดอร์ โถสร้างขึ้นเรียกว่าและถูกวางไว้ที่myapp /home/myappผู้ใช้myappเป็นเจ้าของ jar ที่สร้างขึ้น:

myapp@myserver:~/backend$ ll
total 53900
drwxrwxr-x 2 myapp myapp     4096 Apr 25 17:09 ./
drwxr-xr-x 6 myapp myapp     4096 Apr 25 17:08 ../
-rw-rw-r-- 1 myapp myapp      511 Apr 20 16:13 application.properties
-rwxr--r-- 1 myapp myapp 55175294 Apr 20 19:06 backend-1.0-SNAPSHOT.jar*
lrwxrwxrwx 1 myapp myapp       24 Apr 20 19:20 myapp -> backend-1.0-SNAPSHOT.jar*
-rw-r--r-- 1 myapp myapp      179 Apr 20 19:26 myapp.service

ฉันวางกุญแจ ssh เพื่อให้เจนกินส์สามารถเข้าสู่ระบบmyapp@myserverได้

ในฐานะที่myappเป็นเจ้าของโถผมคิดว่าอาจจะมีตัวเลือกที่ช่วยให้ผู้ที่จะโทรmyapp systemctl start/stop myappที่จริงแล้วฉันสามารถโทรsystemctl status myappแต่ไม่ได้start/stop(ถามรหัสผ่านรูท)

ข้อเสนอแนะใด ๆ


ฉันไม่เห็นเหตุผลที่จะพิจารณาความsudoยุ่งเหยิงโดยทั่วไปแล้ววิธีที่คุณควรนำสิ่งนี้ไปใช้ สร้างกลุ่มกำหนดผู้ใช้ jenkins ให้กับกลุ่มนั้นและใช้visudoคำสั่งที่ จำกัด ให้กับกลุ่มนั้นเพื่อจัดการบริการ
รนต์

@brent มีวิธีอนุญาตให้myappโทรsudo systemctlสำหรับบริการของตัวเองเท่านั้นหรือไม่
Arnaud Denoyelle

คำตอบ:


24

sudoเป็นวิธีที่จะไป สร้างกลุ่มใหม่ ( appadminตัวอย่าง) ใส่jenkinsผู้ใช้ของคุณและใช้visudoเพิ่มรายการใหม่ด้วยรายการคำสั่งที่ จำกัด ตัวอย่างเช่น:

Cmnd_Alias MYAPP_CMNDS = /bin/systemctl start myapp, /bin/systemctl stop myapp
%appadmin ALL=(ALL) MYAPP_CMNDS

หากคุณต้องการให้appadminกลุ่มสามารถใช้งานบริการได้โดยไม่ต้องป้อนรหัสผ่านก่อน (มีประโยชน์หากผู้ใช้ได้รับการพิสูจน์ตัวตนโดยใช้คีย์ SSH เท่านั้น)

Cmnd_Alias MYAPP_CMNDS = /bin/systemctl start myapp, /bin/systemctl stop myapp
%appadmin ALL=(ALL) NOPASSWD: MYAPP_CMNDS

1
อย่าลืมคำสั่งคำสั่งunix.stackexchange.com/a/13058/86443
Gilberto
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.