วิธีทำ / sbin / shutdown, / sbin / reboot เป็นต้นต้องใช้ sudo อีกครั้งใน 16.04?


18

สำหรับเหตุผลใดที่เราทำไม่จำเป็นอีกต่อไปจะเป็นราก (หรือใช้sudo) เพื่อเรียกใช้/sbin/shutdown, /sbin/rebootฯลฯ

ดูเหมือนว่าจะเป็นเพราะไฟล์เหล่านั้นตอนนี้ symlink /bin/systemctlซึ่งจัดการทุกอย่างในฐานะผู้ใช้ปกติ

อย่างไรก็ตามจะเกิดอะไรขึ้นถ้าฉันต้องการshutdownและrebootต้องการการรับรองความถูกต้องของรูทอีกครั้ง ฉันจะบรรลุสิ่งนี้ได้อย่างไร


3
ฉันเดากฎของ polkit ปรับเปลี่ยนaskubuntu.com/a/570969/158442ตามต้องการ (ใช้pkaction | grep login1สำหรับกฎที่น่าสนใจอื่น ๆ )
muru

3
(ตัวอย่างของกฎสำหรับการขอสิทธิ์ผู้ดูแลระบบ: askubuntu.com/a/744094/158442 )
muru

1
นี่ไม่ใช่สิ่งเดียวถ้าคุณเป็นคนเดียวที่เข้าสู่ระบบหากมีบุคคลอื่นเข้าสู่ระบบคุณจะถูกขอให้ใส่รหัสผ่านรูท
ognjen

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

คำตอบ:


5

Systemd ไม่แน่นอนจัดการshutdown, rebootและคำสั่งอื่น ๆ และสิทธิพิเศษเริ่มต้นที่ได้รับมอบหมายมีบุตร ในการเปลี่ยนแปลงสิ่งนี้คุณต้องสร้างกฎ Polkit สร้าง.pklaไฟล์ใน/etc/polkit-1/localauthority/50-local.d(พูด, confirm-shutdown.pkla) ที่มี:

[Confirm shutdown]
Identity=unix-user:*
Action=org.freedesktop.login1.*
ResultActive=auth_admin_keep

ปิดต่างๆ, รีบูต ฯลฯ คำสั่งที่มีในแง่ Polkit การกระทำในorg.freedesktop.login1ตัวอย่างเช่นorg.freedesktop.login1.power-off, org.freedesktop.login1.rebootฯลฯ ปัญหาที่นี่คือการกำหนดค่าเริ่มต้นซึ่งอยู่ใน/usr/share/polkit-1/actions/org.freedesktop.login1.policy:

<action id="org.freedesktop.login1.power-off">
        <description>Power off the system</description>
        ...
        <defaults>
                <allow_any>auth_admin_keep</allow_any>
                <allow_inactive>auth_admin_keep</allow_inactive>
                <allow_active>yes</allow_active>
        </defaults>

โปรดทราบว่ามันช่วยให้ผู้ใช้ที่ใช้งานสามารถปิดเครื่องรีบูต ฯลฯ


0

คุณสามารถใช้chmodคำสั่ง

  • หากคุณต้องการให้สิทธิ์การเข้าถึงรูทเท่านั้นคุณสามารถเขียน:

    chmod 700 directory/to/the/file
    
  • หากคุณต้องการให้ permisson กับรูทและกลุ่ม sudo คุณสามารถเขียน:

    chmod 770 directory/to/the/file
    
  • หากคุณต้องการเปลี่ยนกลุ่มของไฟล์จาก sudo เป็นกลุ่มอื่น (เช่นผู้ใช้หรือผู้ดูแลระบบ) คุณต้องพิมพ์:

    chown owner:group directory/to/the/file
    
  • หากคุณต้องการเปลี่ยนกลับให้รัน:

    chown root:sudo filedirectory 
    

หมายเหตุ : คุณอาจต้องใช้sudoคำสั่งเหล่านี้หรือลงชื่อเข้าใช้ในบัญชีรูท


โปรดทราบว่าการพยายามเปลี่ยนการอนุญาตของลิงก์จะเป็นการเปลี่ยนแปลงการอนุญาตของเป้าหมาย (ในกรณีนี้/bin/systemctl) ดังนั้นการรัน chmod / sbin / shutdown จะส่งผลต่อลิงก์ทั้งหมดที่ชี้ไปยัง/bin/systemctlสิทธิ์ที่bin/systemctlจะเปลี่ยนแปลงตามที่ยืนยันโดยคำสั่ง $ ll /bin/systemctl -rwx ------ 1 รูทราก 659848 18 ม.ค. 16:04 / bin / systemctl *
Elder Geek

หากคุณต้องการเปลี่ยนกลับการอนุญาตเริ่มต้นคือ-rwxr-xr-x 1 root root 659848 Jan 18 16:04 /bin/systemctl
Elder Geek

0

เนื่องจากการเปลี่ยนการอนุญาตของ symlink บนระบบ Linuxจะไม่เปลี่ยนการอนุญาตของการเชื่อมโยง แต่แทนที่ไฟล์จะชี้ไปที่ (ใน Ubuntu อย่างน้อย) ฉันคิดว่าวิธีที่ปลอดภัยที่สุดในการทำสิ่งนี้ให้สำเร็จคือการลบลิงค์และสร้างใหม่ด้วยumask ที่จำเป็นเพื่อรับผลลัพธ์ที่คุณต้องการ

โพสต์ที่เกี่ยวข้องอีกสามารถพบได้ที่นี่


-1

คุณสามารถสร้างสคริปต์ที่ตรวจสอบว่าผู้ใช้กำลังรันด้วยการอนุญาตรูทหรือไม่
จากนั้นจะรันคำสั่ง systemctl หรือส่งคืนข้อผิดพลาด

#! / bin / ทุบตี
ถ้า ["$ (whoami)"! = "root"]; แล้วก็
    echo "ขออภัยคุณไม่ใช่รูต"
    ทางออก 1
อื่น
    (คำสั่งปิดระบบ systemctl)
Fi

แหล่ง


4
สิ่งที่จะหยุดผู้ใช้ที่ไม่ใช่รากเพียงแค่ข้ามสคริปต์นี้
Robie Basak

-1

ลองเปลี่ยนการอนุญาตในเทอร์มินัล คุณสามารถทำให้มันใช้งานได้โดยกลุ่มบางกลุ่มเท่านั้นเช่นล้อหรือผู้ดูแลระบบ น่าเศร้า (หรืออาจโชคดี) ไฟล์สามารถมีความเป็นเจ้าของกลุ่มได้เพียงกลุ่มเดียวดังนั้นจึงไม่สามารถทำงานได้ด้วยตัวเอง ลองใช้ "sudo chown root: wheel / sbin / shutdown" แล้ว "sudo chmod g + x / sbin / shutdown" สิ่งนี้จะทำให้ไฟล์ประมวลผลได้โดย root และผู้ดูแลระบบ (ตัวสั่น) และ sudoers จะต้องป้อนรหัสผ่านของพวกเขา


2
กลุ่ม "wheel" นั้นเป็นของ Arch Linux และอาจมีการกระจายอื่น ๆ แต่ไม่แน่นอนบน Ubuntu btw
ผู้บัญชาการ Byte

2
สิ่งนี้ไม่ได้มีประสิทธิภาพ ผู้ใช้สามารถดาวน์โหลดไบนารี systemctl จากที่อื่นแล้วเรียกใช้แทน
Robie Basak

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