ผมอยู่ใน/sbin
และผมเห็นว่ามีสิทธิ์shutdown
rwxr-xr-x
นี่ไม่ได้หมายความว่าทุกคนสามารถทำงานได้หรือไม่
shutdown
คำสั่ง
shutdown
หรือไม่
ผมอยู่ใน/sbin
และผมเห็นว่ามีสิทธิ์shutdown
rwxr-xr-x
นี่ไม่ได้หมายความว่าทุกคนสามารถทำงานได้หรือไม่
shutdown
คำสั่ง
shutdown
หรือไม่
คำตอบ:
ทุกคนสามารถดำเนินการshutdown
ได้ แต่การทริกเกอร์การปิดระบบต้องใช้สิทธิ์พิเศษ แต่shutdown
ไม่ใช่ setuidและมีเพียง root เท่านั้นที่สามารถเรียกใช้งานได้สำเร็จ shutdown
โปรแกรมก็พอมีความสุขในการตรวจสอบสิทธิ์ของคุณและให้คุณทราบว่ามีปัญหา แต่แม้ว่าจะพยายามอย่างไร้เดียงสาปิดระบบไม่มีอะไรที่จะเกิดขึ้น
GLENDOWER: ฉันสามารถเรียกวิญญาณจากสิ่งที่ลึกล้ำ
แรงบันดาลใจ: ทำไมฉันสามารถหรือเพื่อให้คนใดคนหนึ่งสามารถ; แต่พวกเขาจะมาเมื่อคุณเรียกร้องพวกเขา?
(จาก Henry IV)
shutdown
/bin/rm
ไม่แตกต่างจาก ทุกคนสามารถดำเนินการได้ แต่ผู้ใช้ปกติไม่สามารถลบ/etc
หรือไดเรกทอรีบ้านของผู้ใช้อื่น
โดยเฉพาะ: กระบวนการที่รันด้วยสิทธิพิเศษรูท (UID ที่มีประสิทธิภาพ 0) เท่านั้นที่สามารถสั่งให้ระบบ initหยุดบริการระบบยุติกระบวนการผู้ใช้ทั้งหมดและออกการเรียกระบบที่หยุดเครื่องจริง (ถ้าshutdown
setuid มันจะทำงานเหมือนรูทไม่ว่าใครจะเรียกมัน แต่มันไม่ใช่)
แล้วการโทรshutdown
จาก GUI เช่นด้วย control-alt-del ล่ะ สิ่งสำคัญคือต้องตระหนักว่าในกรณีshutdown
นั้นเริ่มต้นโดยตรงinit
และจะทำงานด้วยสิทธิ์พิเศษของรูท ดังนั้นทุกคนที่เดินขึ้นไปที่คอนโซลอาจปิดระบบได้ หากไม่เป็นที่พึงประสงค์ควบคุม Alt-Delete shutdown -a
จะทำงานจริง (ดูเอกสารที่ @ some1 อ้างถึงในคำตอบ) ที่บอกshutdown
ให้ตรวจสอบว่าผู้ใช้ที่เข้าสู่ระบบในปัจจุบันได้รับอนุญาตให้เรียกใช้มัน แต่สิ่งนี้มีความเกี่ยวข้องเท่านั้นเนื่องจากshutdown
ใช้งานเป็นรูทในสถานการณ์นี้
shutdown
ได้ แต่โปรแกรมนั้นไม่สามารถกระตุ้นการปิดระบบได้เว้นแต่ผู้ใช้ปัจจุบันจะมีสิทธิ์ใช้งานรูท ขวา?
shutdown
และนี่ก็เป็นกรณีที่มี โปรแกรม setuid ทำงานโดยได้รับอนุญาตจากผู้ใช้ที่เป็นเจ้าของไฟล์ปฏิบัติการ เช่น/etc/passwd
ทำงานด้วยการอนุญาตรากเพื่อให้คุณแก้ไขไฟล์รหัสผ่าน ดู manpage chmod
สำหรับ
/usr/bin/passwd
ทำงานด้วยสิทธิ์ root"! /etc/passwd
ไม่สามารถใช้งานได้ (เป็น "ไฟล์รหัสผ่าน" ที่กำลังแก้ไข)
ไบนารีshutdown
เองตรวจสอบว่า UID ของคุณเป็น 0
ดูผลลัพธ์ของ strace ของ:
strace /sbin/shutdown -r -h now
...
...
geteuid() = 10001
setuid(10001) = 0
getuid() = 10001
write(2, "shutdown: Need to be root\n", 26shutdown: Need to be root
) = 26
exit_group(1) = ?
shutdown
UID ของคุณเป็น 0
if(getuid() != 0) printf("Need to be root");
มีผู้ติดตามอย่างใกล้ชิดโดยเขียนข้อความข้อผิดพลาดว่ารหัสคือคล้ายกับ ซึ่งในความเป็นจริงรหัสแหล่งที่มาแสดงให้เห็นว่ามันเป็น
ใช่! ทุกคนสามารถเรียกใช้คำสั่งนั้น ในขณะที่คุณพูดว่าคุณจะสามารถเรียกใช้มัน แต่คุณต้องเผชิญกับ "จะต้องมีรากข้อความ" permission denied
ไม่ได้เป็น shutdown
การตรวจสอบคำสั่งของคุณUID
เพื่อดูว่าคุณกำลังรากหรือไม่
ดูเหมือนว่าการปิดระบบจะตรวจสอบรายการการเข้าถึงหากคุณตั้งค่าสถานะด้วย -a:
ACCESS CONTROL
shutdown can be called from init(8) when the magic keys CTRL-ALT-DEL are pressed, by creating an appropriate entry in /etc/inittab. This means that every‐
one who has physical access to the console keyboard can shut the system down. To prevent this, shutdown can check to see if an authorized user is logged
in on one of the virtual consoles. If shutdown is called with the -a argument (add this to the invocation of shutdown in /etc/inittab), it checks to see
if the file /etc/shutdown.allow is present. It then compares the login names in that file with the list of people that are logged in on a virtual console
(from /var/run/utmp). Only if one of those authorized users or root is logged in, it will proceed. Otherwise it will write the message
shutdown: no authorized users logged in
to the (physical) system console. The format of /etc/shutdown.allow is one user name per line. Empty lines and comment lines (prefixed by a #) are
allowed. Currently there is a limit of 32 users in this file.
เนื่องจากขณะนี้คุณกำลังเรียกใช้โดยไม่มีแฟล็ก -a จึงเป็นค่าเริ่มต้นที่อนุญาตการปิดรูทเท่านั้น
หากคุณต้องการให้ผู้ใช้เพิ่มเติมสามารถรันคำสั่งได้ให้กำหนดค่าไฟล์นั้นและใช้แฟล็ก
Why can't I execute shutdown when the permission is rwxr-xr-x?
บิตการอนุญาตไม่จำเป็นต้องยกเว้นการควบคุมการเข้าถึงตามผู้ใช้หรือกลุ่ม
-a
commandline จะไม่สร้างความแตกต่าง: shutdown -a
จะต้องยังคงดำเนินการต่อด้วยสิทธิ์init
การใช้งานรูท