อนุญาตให้กลุ่มที่ไม่ใช่ sudo ควบคุมงานพุ่งพรวด


11

ฉันพยายามที่จะตั้งค่าการงานพุ่งพรวดในการทำงานในการเริ่มต้นระบบและที่ยังสามารถเริ่มต้น / sudoหยุดโดยสมาชิกของกลุ่มอื่นที่ไม่ใช่ ด้วยเวอร์ชันก่อนหน้านี้ฉันใช้update-rc.dและสคริปต์ที่เก็บไว้/etc/init.d/เพื่อให้ทำงานได้โดยการเพิ่ม%Group ALL = NOPASSWD: /etc/init.d/scriptnameไฟล์ sudoers ของฉัน แต่ดูเหมือนว่าฉันจะไม่สามารถทำงานได้เทียบเท่ากับการพุ่งพรวด

ฉันพยายามเพิ่ม%Group ALL = NOPASSWD: /sbin/initctl start jobnameไฟล์ sudoers แต่พยายามเรียกใช้คำสั่งstart jobnameสร้างข้อผิดพลาดนี้:

start: Rejected send message, 1 matched rules; type="method_call", sender=":1.21" (uid=1000 pid=5148 comm="start jobname " interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")

ใกล้ที่ฉันสามารถบอกได้ว่าเป็นเรื่องร้องเรียนเกี่ยวกับวิธีที่บัญชีผู้ใช้ของฉันไม่ได้รับอำนาจในการส่งข้อความ 'เริ่ม' ในไฟล์กำหนดค่า D-Bus สำหรับการเริ่มต้น ฉันไม่สามารถค้นหาข้อมูลใด ๆ เกี่ยวกับวิธีแก้ไขไฟล์นั้นเพื่อให้สิทธิ์กลุ่มในการเข้าถึงบริการเฉพาะ - ตัวเลือกดังกล่าวมีอยู่จริงหรือไม่? มีวิธีแก้ไขไฟล์ Sudoers หรือไม่เพื่อให้ฉันสามารถเรียกใช้งานได้โดยไม่ต้องแก้ไขไฟล์ config? ฉันดีกว่าแค่ติดกับรุ่นก่อนหน้าใช่ไหม

คำตอบ:


7

คุณสามารถเริ่มต้นด้วยการค้นหาว่าการกำหนดค่า D-Bus เฉพาะสำหรับการพุ่งพรวดเป็นอย่างไร เห็นdestination="com.ubuntu.Upstart"ข้อมูลโค้ดนั้นจากข้อความแสดงข้อผิดพลาดหรือไม่ ทีนี้ลอง grep ลงในโฟลเดอร์ที่มีไฟล์กำหนดค่า D-Bus:

vhost07:~ $ grep -r "com.ubuntu.Upstart" /etc/dbus-1
/etc/dbus-1/system.d/Upstart.conf:    <allow own="com.ubuntu.Upstart" />
[...skipped...]

ว่าUpstart.confไฟล์มีตัวอย่างบางส่วนของนโยบาย ฉันเดาว่าคุณสามารถลองหารูปแบบของนโยบายจากพวกเขาได้ จากนั้นพยายามอนุญาตให้ผู้ใช้ของคุณเฉพาะการกระทำที่ต้องการ ตัวอย่างเช่นใน:

<policy user="pope_benedict">
  <allow send_destination="com.ubuntu.Upstart"
         send_interface="com.ubuntu.Upstart0_6.Job"
         send_member="Start"/>
</policy>

สิ่งนี้ควรอนุญาตให้pope_benedictผู้ใช้เริ่มงานนั้น

โปรดทราบว่าค่าสำหรับแอตทริบิวต์นโยบาย 'อนุญาต' แสดงอยู่ในข้อความแสดงข้อผิดพลาดเดิมของคุณ


1
โอ้และอย่าลืมรีสตาร์ท D-Bus หลังจากนี้! :)
Iuliu Pascaru

ฉันพบสิ่งนี้ทำให้สับสนเล็กน้อย แต่สิ่งนี้ช่วย: blog.arkency.com/2014/07/…
Mike Campbell

7

ฉันใช้บรรทัดต่อไปนี้เป็นการส่วนตัวในไฟล์ /etc/sudoers.d/jobname_myuser:

myuser ALL = (root) NOPASSWD: /sbin/start jobname, /sbin/stop jobname, /sbin/restart jobname, /sbin/status jobname

ตามที่อธิบายไว้ที่นี่: /server//a/390723/68608


2

ตัวเลือกดังกล่าวไม่มีอยู่ใน sudo

ความแตกต่างระหว่างสคริปต์ Sysv และไฟล์การตั้งค่าแบบพุ่งพรวดคือ: สคริปต์ Sysv เป็นสคริปต์ไฟล์สั่งการในแบบของตนเองและคุณสามารถบอก sudo เพื่อให้กลุ่มบางกลุ่มสามารถเรียกใช้งานได้ ในอีกทางหนึ่งไฟล์กำหนดค่าพุ่งพรวดเป็นเพียงไฟล์กำหนดค่าไม่ใช่ไฟล์ปฏิบัติการดังนั้นการดำเนินการstart(symlink to initctl) จึงเป็นสิ่งที่ sudo อนุญาต ปัญหาของคุณที่นี่คือการอนุญาตให้ผู้คนเรียกใช้initctlคุณอนุญาตให้พวกเขาinitctlทุกอย่าง

การแก้ปัญหานั้นง่ายหากคุณกังวลในงานเดียว เขียนสคริปต์พูด/usr/bin/jobname.shด้วย

#!/bin/sh
initctl $1 jobname

จากนั้นchmod 755 /usr/bin/jobname.shและในที่สุดก็เพิ่มไฟล์ที่เรียกใช้ลงในไฟล์ sudoers ของคุณ:

%Group ALL = NOPASSWD: /usr/bin/jobname.sh

ด้วยวิธีนี้ทุกคนสามารถโทรjobname.sh startหรือjobname.sh stopเพื่อควบคุมงานเฉพาะนี้ คุณอาจต้องการเพิ่มการตรวจสอบบางอย่างเพื่ออนุญาตเฉพาะstartและstopพารามิเตอร์อื่น ๆ


ในคำอื่น ๆ ปัญหาของฉันไม่ได้ว่าระบบปฏิเสธสมาชิกในกลุ่มความสามารถในการทำงานinitctlแต่ที่พุ่งพรวดปฏิเสธสัญญาณใด ๆ ที่ส่งโดยผู้ใช้ / กลุ่มที่ไม่ได้รับอนุญาตนโยบายรายการใน Upstart.conf? และไม่มีวิธีใดที่จะให้ความละเอียดมากกว่าการตั้งค่าทั้งหมดหรือไม่มีเลยในไฟล์ปรับแต่ง
Angle O'Saxon

เริ่มต้นในกรณีของคุณทำงานได้ดีแม้ไม่มีการเปลี่ยนแปลง sudoers พุ่งพรวดเป็นเพียงการปฏิเสธข้อความจากมันถ้าคุณไม่อนุญาตให้เฉพาะผู้ใช้ที่ไม่ใช่รูท ดูอีกสองคำตอบ คุณสามารถกำหนดนโยบาย dbus ตามงาน (ดูที่com.ubuntu.Upstart0_6.<JOB>ส่วน) ใน Upstart.conf ขึ้นอยู่กับความต้องการของคุณมันอาจจะง่ายกว่าที่จะสร้างสคริปต์แบบนี้แทนการเขียนนโยบาย dbus และเริ่ม dbus ใหม่เป็นต้นนโยบาย Dbus นั้นชัดเจนว่า "ถูกต้อง" สิ่งที่ต้องทำ แต่ขึ้นอยู่กับกรณีสคริปต์ง่าย ๆ อาจไป ทางยาวกับปัญหาน้อยลง
Tuminoid

การแก้ไขนโยบาย DBus เพื่อใช้com.ubuntu.Upstart0_6.jobnameเป็นข้อความที่send_interfaceสร้างข้อผิดพลาดเหมือนเดิม ถ้าฉันเดาถูกว่าเอาท์พุทของข้อผิดพลาดนั้นมีข้อมูลสัญญาณอยู่ดูเหมือนว่าอินเตอร์เฟสหรือปลายทางไม่ได้สะท้อนถึงบริการพุ่งพรวดที่สัญญาณอ้างอิง ฉันคิดว่าข้อมูลการบริการเป็นเพียงข้อโต้แย้งในข้อความเรียกวิธี D-Bus และฉันไม่แน่ใจว่าฉันสามารถแก้ไขนโยบาย D-Bus สำหรับพุ่งพรวดเพื่อตัดสินใจตามค่าอาร์กิวเมนต์
มุมของ O'Saxon

สคริปต์ประเภทที่คุณแนะนำนั้นใช้งานได้ดีสำหรับฉันโดยมีข้อแม้หนึ่งข้อ: ฉันจำเป็นต้องเรียกใช้sudo jobname.sh startงานเพื่อให้ Upstart เห็นคำขอเป็นว่ามาจากผู้ใช้rootฉันกำลังพยายามทำ วิธีนี้ "ถูกต้อง" (ดังนั้นการย้ายออกจากสคริปต์ Sys-V ในตอนแรก) ดังนั้นฉันต้องการให้ทำงานผ่านนโยบาย D-Bus หรือตัวเลือกการตั้งค่า Upstart อื่น ๆ แต่ถ้าฉันไม่สามารถ ทำงานได้ฉันจะยอมรับคำตอบนี้
มุมของ O'Saxon

1
"$1"ฉันยังต้องการพูด จาก[ "$1" = "start" -o "$1" = "stop" ]การทดสอบของคุณฉันเชื่อว่ามันปลอดภัย แต่ไม่มี$1การขยายขอบเขตในการเรียกใช้สคริปต์เนื่องจากรากเป็นเพียงนิสัยที่ไม่ดีต่อสุขภาพ (ยกเว้นกรณีที่ต้องการแยกคำโดยเจตนา)
เบนิเชอร์เคียฟสกี้ - ปาสกิ้

0

ตามที่กล่าวไว้ข้างต้น dbus daemon มีไฟล์กำหนดค่าที่เชี่ยวชาญสำหรับแอปพลิเคชันเฉพาะ

ls /etc/dbus-1/system.d/
avahi-dbus.conf
bluetooth.conf
...
Upstart.conf
wpa_supplicant.con

ไฟล์การกำหนดค่ายังสร้างข้อ จำกัด ทรัพยากรพารามิเตอร์ความปลอดภัยและอื่น ๆ

ดูรายละเอียดได้ที่dbus-daemon-1 (1) - หน้า man Linux

เพื่อให้กลุ่มเริ่ม / หยุดงานพุ่งพรวดเพิ่มนโยบายต่อไปนี้ใน /etc/dbus-1/system.d/Upstart.conf

  <policy group="YourGroupName">
    <allow send_destination="com.ubuntu.Upstart"
       send_interface="com.ubuntu.Upstart0_6.Job"
       send_type="method_call" send_member="Start" />
    <allow send_destination="com.ubuntu.Upstart"
       send_interface="com.ubuntu.Upstart0_6.Job"
       send_type="method_call" send_member="Stop" />
  </policy>

คุณควรพิจารณาถึงผลกระทบด้านความปลอดภัยของนโยบายดังกล่าวก่อนเปลี่ยนนโยบายเริ่มต้น สมาชิกของYourGroupNameจะสามารถเริ่ม / หยุดงานพุ่งพรวดทั้งหมดได้


แต่มีวิธี จำกัด งานที่พวกเขาสามารถควบคุมได้หรือไม่? หรือเป็นไปไม่ได้เพราะ D-Bus ไม่สนใจเนื้อหาของข้อความ?
มุมของ O'Saxon

ฉันพยายามเพิ่มนโยบายนั้นใน Upstart.conf (แทนที่ชื่อกลุ่มด้วยชื่อจริงของฉัน) เริ่มต้น D-Bus ใหม่และได้รับstart: You do not have permission to modify job: jobnameเมื่อฉันพยายามเริ่มบริการ
มุมของ O'Saxon

ตกลง. นั่นหมายความว่ามีการนำนโยบายไปใช้เรียบร้อยแล้ว ดูเหมือนว่า yourjob.conf อยู่ใน / etc / init งานของผู้ใช้ควรอยู่ใน ~ / .init เป็นไปได้ไหมในกรณีที่คุณใช้เพื่อวาง yourjob.conf ใน ~ / .init
Goran Miskovic

ในเรื่องที่เกี่ยวกับคำถามแรกของคุณ: นโยบายกำหนดว่าสามารถเข้าถึงอินเทอร์เฟซและสมาชิกใดได้บ้าง มันจะกำหนดเนื้อหา / ข้อโต้แย้งที่สามารถส่ง / ส่ง นโยบายที่เข้มงวดในปัจจุบันได้คลี่คลายลงในทวนน้ำ ดูไม่สามารถเริ่มต้นเพื่อเรียกใช้งานผู้ใช้ได้
Goran Miskovic
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.