วัตถุประสงค์ของการอนุญาต Linux เช่น 111 หรือ 333 คือผู้ใช้สามารถดำเนินการแต่ไม่สามารถอ่านไฟล์ได้หากความสามารถในการดำเนินการไม่ได้หมายความถึงความสามารถในการอ่านโดยอัตโนมัติ
วัตถุประสงค์ของการอนุญาต Linux เช่น 111 หรือ 333 คือผู้ใช้สามารถดำเนินการแต่ไม่สามารถอ่านไฟล์ได้หากความสามารถในการดำเนินการไม่ได้หมายความถึงความสามารถในการอ่านโดยอัตโนมัติ
คำตอบ:
ฉันเล่นกับมันและเห็นได้ชัดว่าสิทธิ์ exec ไม่ได้หมายถึงสิทธิ์ ไบนารีสามารถปฏิบัติการได้โดยไม่ต้องอ่านได้:
$ echo 'int main(){ puts("hello world"); }' > hw.c
$ make hw
$ ./hw
hello world
$ chmod 111 hw
$ ./hw
hello world
$ cat hw
/bin/cat: hw: Permission denied
ฉันไม่สามารถเรียกใช้งานสคริปต์ได้เว้นแต่จะมีทั้งบิตการอ่านและการอนุญาตให้ทำงานบน:
$ cat > hw.sh
#!/bin/bash
echo hello world from bash
^D
$ chmod +x ./hw.sh
$ ./hw.sh
hello world from bash
$ chmod 111 ./hw.sh
$ ./hw.sh
/bin/bash: ./hw.sh: Permission denied
/bin/bash hw.sh
แล้วทุบตีพยายามเปิดhw.sh
อ่าน (และล้มเหลว)
มันเหมาะสมสำหรับไดเรกทอรีเช่นถ้าคุณเก็บ (ความลับ) ไฟล์ปฏิบัติการในไดเรกทอรีที่เฉพาะเจาะจงและอนุญาตให้ผู้ใช้เรียกไฟล์เหล่านั้นโดยไม่สามารถดูเนื้อหาของไดเรกทอรี (แต่รู้ว่ามีไฟล์เฉพาะที่นั่น 333 เปรียบเทียบกับ 111 ช่วยให้การเขียน / ลบไฟล์ไปยัง / จากไดเรกทอรีเหล่านั้นโดยไม่สามารถดูเนื้อหาของไดเรกทอรี
เห็นได้ชัดว่าไม่ใช่ชุดค่าผสมทั้งหมดที่มีประโยชน์ แต่จะนำชุดที่คุณกล่าวถึงโดยเฉพาะ ... จริง ๆ แล้วคุณไม่จำเป็นต้องread
ได้รับอนุญาตให้ดำเนินการไฟล์ - execute
สิทธิ์เท่านั้น- เว้นแต่ไฟล์ที่สงสัยคือสคริปต์ (เช่นเชลล์สคริปต์) ( .sh
), perl-script ( .pl
) และอื่น ๆ ) ไบนารีปกติสามารถดำเนินการได้ด้วยการexecute
อนุญาต เมื่อวันที่ * BSD-systmes หลาย executables จะช่วยให้execute
ได้รับอนุญาตโดยไม่ต้องread
permisson โดยเฉพาะอย่างยิ่ง "ที่สำคัญการรักษาความปลอดภัย" คำสั่ง - su
เช่น
ดังนั้นทำไมไม่ให้ผู้ใช้ - การread
รับ (และเพียงแค่ - execute
permisson)? เป็นไฟล์ที่ผู้ใช้ไม่สามารถอ่านได้และผู้ใช้รายนั้นไม่สามารถคัดลอกได้! การลบการread
อนุญาตป้องกันผู้ใช้จากการทำสำเนาไฟล์ส่วนบุคคลของตนเองซึ่งในภายหลังผู้ใช้เหล่านั้นอาจถูกละเมิด (เช่นรับSUID=root on
)
และไม่มีการwrite
ส่ง - ป้องกันไฟล์จากการถูกลบโดยไม่ตั้งใจ
โปรดทราบว่าการไม่ให้หรือread
ส่งwrite
ต่อให้กับเจ้าของเป็นเรื่องแปลก แต่บางครั้งก็อาจเป็นความคิดที่ดีที่จะป้องกันไม่ให้แม้แต่การowner
ลบไฟล์ แน่นอนowner
- ไม่พูดถึงroot
- อาจหลีกเลี่ยงมาตรการดังกล่าวหากไม่ได้อยู่ในรูปแบบอื่นแล้วเพียงแค่chmod
ได้รับอนุญาตจากไฟล์
owner
ลบไฟล์" - ยกเว้นว่าคุณไม่ต้องการการอนุญาตใด ๆ ในไฟล์ (อ่านเขียนหรือดำเนินการ) เพื่อลบ
/proc/${PID}/maps
แล้วอ่านส่วนที่เกี่ยวข้องของหน่วยความจำจาก/proc/${PID}/mem
? หรือการ จำกัด สิทธิ์ในไฟล์ของไฟล์ที่เรียกทำงานได้นั้น จำกัด สิทธิ์การอ่านในส่วนที่เกี่ยวข้องในหน่วยความจำระหว่างการทำงานหรือไม่? (หลังดูเหมือนไม่น่าเป็นไปได้ IMO.)