เป็นวิธีที่ถูกต้องในการป้องกันผู้ใช้ที่ไม่ใช่รูทจากการปิดระบบหรือรีบูต


7

สมมติว่าคุณได้ตั้งค่าระบบหลายที่นั่งสำหรับใช้ในโรงเรียนหรือห้องสมุดทำให้ GDM สามารถเปิดใช้งานเซสชัน X หลายรายการพร้อมกันโดยใช้ผู้ใช้ / คีย์บอร์ด / จอภาพที่แตกต่างกัน

ตามค่าเริ่มต้นใน Debian / Ubuntu ใน Gnome คุณไม่จำเป็นต้องรูทการปิดหรือรีบูต แต่นี่หมายความว่าผู้ใช้สามารถเลือก "รีบูต" หรือ "ปิดระบบ" และเริ่มต้นกับผู้ใช้สามคน

คุณได้ปิดกั้นการเข้าถึงทางกายภาพไปยังเซิร์ฟเวอร์เพื่อให้พวกเขาไม่สามารถกดปุ่มเปิดปิดหรือรีเซ็ต

วิธีที่ถูกต้องในการปิดการใช้งานฟังก์ชั่น "ปิด" และ "รีบูต" ซึ่งผู้ใช้ทั่วไปจะต้องสัมผัสผ่าน GDM / Gnome / ตัวจัดการหน้าต่างที่คุณใช้อยู่คืออะไร?


1
เกิดอะไรขึ้นถ้าพวกเขาดึงปลั๊ก?
wizlog

2
@wizlog โปรดดู "คุณได้ปิดกั้นการเข้าถึงเซิร์ฟเวอร์แบบฟิสิคัล" นี้ไปสำหรับปลั๊กไฟด้วย
thomasrutter

คำตอบ:


2

ก่อนอื่นให้สังเกตว่าฟังก์ชั่นการปิดระบบของ ConsoleKit จะพิจารณาว่า "ผู้ใช้คนเดียว" และ "ผู้ใช้หลายคน" เป็นสองสถานการณ์ที่แตกต่าง - การปิดระบบต้องการการรับรองความถูกต้องของผู้ดูแลระบบเสมอหากผู้ใช้รายอื่นลงชื่อเข้าใช้


การกระทำดังกล่าวทั้งหมดได้รับการจัดการโดย PolicyKit หากคุณต้องการปรับนโยบายคุณสามารถทำได้ตามที่อธิบายไว้ใน polkit (8) - /etc/polkit-1/rules.d/20-disallow-shutdown.rules:

polkit.addRule(function(action, subject) {
    if ((action.id == "org.freedesktop.consolekit.system.stop" ||
         action.id == "org.freedesktop.consolekit.system.restart") &&
         subject.isInGroup ( "ผู้ใช้")  ) {
            ส่งคืนหัวเรื่อง polkit.Result.AUTH_ADMIN: polkit.Result.NO;
    }
}); 

PolicyKit 0.105 และรุ่นก่อนหน้านี้เอกสารนี้ pklocalauthority (8) - /etc/polkit-1/localauthority/50-local.d/20-disallow-shutdown.pkla:

[Disallow shutdown]
Identity= ยูนิกซ์กลุ่มผู้ใช้  Action = org.freedesktop.consolekit.system.stop; org.freedesktop.consolekit.system.restart
ResultAny = ไม่มี
ResultInactive = ไม่มี
ResultActive =  auth_admin 

Action s มีการระบุไว้ใน ConsoleKit ไฟล์นโยบาย หรือโดยการทำงาน pkaction.


4
  • pklocalauthority คือ เลิกใช้
  • คุณต้องการ systemd ด้วย logind และ polkit

การกระทำที่มีอยู่

pkaction
# or /usr/share/polkit-1/actions/

คุณควรดู /usr/share/polkit-1/actions/org.freedesktop.login1.policy

เพิ่มกฎ

เริ่มต้นข้อความการตรวจสอบระบบเพื่อให้เราสามารถดูว่ากฎใหม่ของเราทำงาน:

journalctl -f

จากนั้นสร้างไฟล์ /etc/polkit-1/rules.d/60-noreboot_norestart.rules (ในจาวาสคริปต์)

ในไฟล์นี้เราเพิ่มตรรกะเพื่อตรวจสอบการกระทำและอนุญาต users ใน power กลุ่มหรือต้องการ su อนุมัติ:

polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.login1.reboot" ||
        action.id == "org.freedesktop.login1.reboot-multiple-sessions" ||
        action.id == "org.freedesktop.login1.power-off" ||
        action.id == "org.freedesktop.login1.power-off-multiple-sessions") {
        if (subject.isInGroup("power")) {
            return polkit.Result.YES;
        } else {
            return polkit.Result.AUTH_ADMIN;
        }
    }
});

ควรโหลดกฎและควรใช้งานได้ ข้อมูลอ้างอิงด้านล่าง

  1. https://lists.fedoraproject.org/pipermail/users/2013-September/440457.html
  2. https://wiki.archlinux.org/index.php/Polkit#Authorization_rules
  3. http://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html
  4. https://bbs.archlinux.org/viewtopic.php?pid=1335204#p1335204

2
คุณแน่ใจหรือว่าจะต้องกลับมา polkit.Result.NO? ฉันคิดว่ามันคงเป็นเช่นนั้น polkit.Result.YES การอนุญาตให้ผู้ใช้ในกลุ่ม "พลังงาน"
ffledgling

@ffledgling ถูกต้องแล้ว ฉันได้แก้ไขคำตอบเพื่อสะท้อนถึงสิ่งนี้และเพื่อเพิ่มรั้งที่ขาดหาย
Legooolas

1
นอกจากนี้ยังเป็นไปได้ที่จะใช้ "ไม่" แทน "AUTH_ADMIN" เพื่อปิดการใช้งานเมนูบนหน้าจอการเข้าสู่ระบบทั้งหมดและตัวเลือก "org.freedesktop.login1.suspend" และ "org.freedesktop.login1.suspend-multiple-session" หลายรายการสำหรับ ควบคุมรายการเมนูหยุดชั่วคราว
Legooolas

หวังว่าฉันจะสามารถโหวตได้หลายครั้ง
Mark K Cowan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.