วัตถุประสงค์ของการอนุญาต 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ได้รับอนุญาตโดยไม่ต้องreadpermisson โดยเฉพาะอย่างยิ่ง "ที่สำคัญการรักษาความปลอดภัย" คำสั่ง - suเช่น
ดังนั้นทำไมไม่ให้ผู้ใช้ - การreadรับ (และเพียงแค่ - executepermisson)? เป็นไฟล์ที่ผู้ใช้ไม่สามารถอ่านได้และผู้ใช้รายนั้นไม่สามารถคัดลอกได้! การลบการreadอนุญาตป้องกันผู้ใช้จากการทำสำเนาไฟล์ส่วนบุคคลของตนเองซึ่งในภายหลังผู้ใช้เหล่านั้นอาจถูกละเมิด (เช่นรับSUID=root on)
และไม่มีการwriteส่ง - ป้องกันไฟล์จากการถูกลบโดยไม่ตั้งใจ
โปรดทราบว่าการไม่ให้หรือreadส่งwriteต่อให้กับเจ้าของเป็นเรื่องแปลก แต่บางครั้งก็อาจเป็นความคิดที่ดีที่จะป้องกันไม่ให้แม้แต่การownerลบไฟล์ แน่นอนowner- ไม่พูดถึงroot- อาจหลีกเลี่ยงมาตรการดังกล่าวหากไม่ได้อยู่ในรูปแบบอื่นแล้วเพียงแค่chmodได้รับอนุญาตจากไฟล์
ownerลบไฟล์" - ยกเว้นว่าคุณไม่ต้องการการอนุญาตใด ๆ ในไฟล์ (อ่านเขียนหรือดำเนินการ) เพื่อลบ
/proc/${PID}/mapsแล้วอ่านส่วนที่เกี่ยวข้องของหน่วยความจำจาก/proc/${PID}/mem? หรือการ จำกัด สิทธิ์ในไฟล์ของไฟล์ที่เรียกทำงานได้นั้น จำกัด สิทธิ์การอ่านในส่วนที่เกี่ยวข้องในหน่วยความจำระหว่างการทำงานหรือไม่? (หลังดูเหมือนไม่น่าเป็นไปได้ IMO.)