เหตุใดจึงไม่สามารถเรียกใช้งานรูทได้เมื่อตั้งค่าบิตที่สามารถเรียกทำงานได้


26

rootผู้ใช้สามารถเขียนไปยังไฟล์แม้ว่าwriteจะไม่ได้ตั้งค่าการอนุญาต

rootผู้ใช้สามารถอ่านไฟล์ได้แม้ว่าreadจะไม่ได้ตั้งค่าการอนุญาต

rootผู้ใช้สามารถ cdเข้าไปในไดเรกทอรีแม้ว่าexecuteจะไม่ได้ตั้งค่าการอนุญาต

rootผู้ใช้ไม่สามารถเรียกใช้ไฟล์เมื่อexecuteไม่ได้ตั้งค่าการอนุญาต

ทำไม?

user$ echo '#!'$(which bash) > file
user$ chmod 000 file
user$ ls -l file
---------- 1 user user 12 Jul 17 11:11 file
user$ cat file                      # Normal user cannot read
cat: file: Permission denied
user$ su
root$ echo 'echo hello' >> file     # root can write
root$ cat file                      # root can read
#!/bin/bash
echo hello
root$ ./file                        # root cannot execute
bash: ./file: Permission denied

คำตอบ:


25

ในระยะสั้นเพราะบิตดำเนินการถือว่าเป็นพิเศษ หากไม่ได้ตั้งค่าเลยไฟล์จะถือว่าไม่สามารถเรียกใช้งานได้และไม่สามารถเรียกใช้งานได้

อย่างไรก็ตามหากแม้แต่หนึ่งในบิตเรียกใช้งานถูกตั้งค่ารูทสามารถและจะดำเนินการได้

สังเกต:

caleburn: ~/ >cat hello.sh
#!/bin/sh

echo "Hello!"

caleburn: ~/ >chmod 000 hello.sh
caleburn: ~/ >./hello.sh
-bash: ./hello.sh: Permission denied
caleburn: ~/ >sudo ./hello.sh 
sudo: ./hello.sh: command not found

caleburn: ~/ >chmod 100 hello.sh
caleburn: ~/ >./hello.sh
/bin/sh: ./hello.sh: Permission denied
caleburn: ~/ >sudo ./hello.sh 
Hello!

0

ในวันเก่าเครื่องมือการบริหารระบบที่อาศัยอยู่ใน/etcเช่น/etc/restore, /etc/rrestore, /etc/init, /etc/haltฯลฯ คิดอะไรจะเกิดขึ้นถ้าroot's PATHถูกกำหนดให้/etc:/binและวิ่งrootpasswd

มันทำงานไม่ถูกต้อง

ในการทำให้เรื่องแย่ลงในสมัยก่อนระบบปฏิบัติการไบนารีไม่มีส่วนหัวเวทย์มนตร์ดังนั้นตรวจสอบว่าไบนารีนั้นเป็นไฟล์ปฏิบัติการไม่ได้จริงๆยกเว้นในการตรวจสอบบิตสิทธิ์ ดังนั้นพวกเขาจึงทำไฟล์ไม่ได้เป็นเป้าหมายที่ถูกต้องของexec* เว้นแต่ว่าพวกเขาจะเป็นไฟล์จริง ๆ (ไม่มีไดเรกทอรี ฯลฯ ) และมีบิตเรียกใช้งานอย่างน้อยหนึ่งชุด

* การตรวจสอบอาจอยู่ในรูปแบบ execvp ซึ่งเป็นฟังก์ชั่นโหมดผู้ใช้

มันยังมีการตรวจสอบที่มีประโยชน์เหมือนในทางทฤษฎีทุกอย่างอาจเป็นเชลล์สคริปต์ดังนั้นทำไมจึงออกมา

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