กรณีการใช้งานที่ถูกต้องสำหรับการอนุญาตให้ใช้ไฟล์“ เรียกใช้เท่านั้น” คืออะไร


20

ผมได้อ่านบน chmod และโหมดฐานแปด ฉันเห็นว่า1ทำงานได้เท่านั้น กรณีการใช้งานที่ถูกต้องสำหรับการอนุญาตให้ดำเนินการเท่านั้นคืออะไร ในการเรียกใช้ไฟล์โดยทั่วไปจะต้องการอ่านและเรียกใช้สิทธิ์

$ echo 'echo foo' > say_foo
$ chmod 100 ./say_foo
$ ./say_foo
bash: ./say_foo: Permission denied
$ chmod 500 ./say_foo
$ ./say_foo
foo

คำตอบ:


41

เชลล์สคริปต์ต้องการสิทธิ์ในการอ่านที่จะดำเนินการ แต่ไฟล์ไบนารีไม่:

$ cat hello.cpp
#include<iostream>

int main() {
    std::cout << "Hello, world!" << std::endl;
    return 0;
}
$ g++ -o hello hello.cpp
$ chmod 100 hello
$ ./hello
Hello, world!
$ file hello
hello: executable, regular file, no read permission

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

สำหรับไดเรกทอรีการอนุญาตให้ดำเนินการจะแตกต่างกันเล็กน้อย หมายความว่าคุณสามารถทำสิ่งต่าง ๆ กับไฟล์ภายในไดเรกทอรีนั้น (เช่นอ่านหรือดำเนินการ) ดังนั้นสมมติว่าคุณมีชุดเครื่องมือ/toolsที่คุณต้องการให้ผู้คนสามารถใช้ แต่ถ้าพวกเขารู้เกี่ยวกับพวกเขา chmod 711 /tools. จากนั้นสิ่งที่/toolsสามารถดำเนินการได้จะสามารถทำงานได้อย่างชัดเจน (เช่น/tools/mytool) แต่ls /tools/จะถูกปฏิเสธ ในทำนองเดียวกันเอกสารอาจถูกจัดเก็บ/private-docsซึ่งสามารถอ่านได้หากรู้ชื่อไฟล์เท่านั้น


1
อนึ่งไม่มีจุดใดในการตั้งค่ารันอย่างเดียวบนไบนารีระบบอีกต่อไปเว้นแต่ว่าคุณจะเรียกใช้ ftp แบบไม่ระบุชื่อ
Joshua

1
นอกจากนี้การตั้งค่าบิตที่ใช้งานได้บนไดเรกทอรีช่วยให้คุณสามารถcdทำได้
gardenhead


1
BTW ไม่จำเป็นต้องรวมส่วนหัว C stdio.hที่นี่ ฉันขอแนะนำให้ลบออก
Spikatrix

1
@Kevin: อาจเป็นเพราะไม่มีlsแท็บที่ทำงานเสร็จแล้วทำให้งานบำรุงรักษาน่ารำคาญและมันก็ให้ประโยชน์ด้านความปลอดภัยน้อยมาก ไฟล์ส่วนใหญ่ที่ผู้โจมตีอาจสนใจนั้นอยู่ในตำแหน่งมาตรฐานที่รู้จักกันหรือสถานที่ตั้งของพวกเขาสามารถถูกค้นพบโดยอ้อมจากข้อมูลในไฟล์อื่น ๆ
Ilmari Karonen

4

บน Gentoo โปรแกรมที่ดำเนินการได้ที่ setuid (ตั้งค่าให้ทำงานด้วยสิทธิ์ของเจ้าของแทนที่จะเป็นผู้เรียกใช้) จะถูกปฏิเสธการเข้าถึงเพื่ออ่าน (โหมด 4711) นี่คือการเพิ่มชั้นของการป้องกันการใช้ประโยชน์จากข้อบกพร่องเพื่อช่วยในการเพิ่มสิทธิ์

หากผู้โจมตีที่ไม่ได้รับสิทธิพิเศษสามารถอ่านไฟล์ setuid และรู้ข้อผิดพลาดที่อนุญาตให้มีการโจมตีแบบย้อนกลับไปสู่ ​​libcพวกเขาอาจจะสามารถใช้เนื้อหาของไฟล์เพื่อคาดการณ์ว่าฟังก์ชันหรือไลบรารีที่มีประโยชน์บางอย่างน่าจะเป็นอย่างไร อยู่ในหน่วยความจำเมื่อโปรแกรมถูกเรียกใช้

ระบบที่ทันสมัยมักจะมีการป้องกันเพิ่มเติมที่มีประสิทธิภาพมากกว่าเช่นASLRแต่ข้อ จำกัด ที่มีอยู่ในแพลตฟอร์มแบบ 32 บิตอาจทำให้การใช้ประโยชน์ได้ง่ายขึ้น


โปรดทราบว่าการป้องกันใช้กับ distros ตามแหล่งข้อมูลเท่านั้น ด้วย distros แบบไบนารีผู้โจมตีสามารถดูสำเนาของโปรแกรมเพื่อดูว่าสิ่งที่น่าสนใจอยู่ที่ใด
Mark

ไบนารีที่ปฏิบัติการได้เท่านั้นยังสามารถมีรหัสผ่านที่ฝังได้ ผู้ใช้สามารถเรียกใช้โปรแกรมและสามารถส่งรหัสผ่านไปยังเซิร์ฟเวอร์ แต่ผู้ใช้จะไม่สามารถรับรหัสผ่านได้ (ระบบไม่ควรอนุญาตให้ทำการทิ้งหลักได้เช่นกัน)
Barmar

1

ดูเหมือนว่าค่าของ "execute only" ไม่ได้ใช้ประโยชน์กับไฟล์มากนัก แต่สามารถใช้เพื่อป้องกันไม่ให้อ่านเนื้อหาของไดเรกทอรี

$ mkdir foo
$ touch foo/bar
$ ls foo/
bar
$ chmod 100 foo
$ ls foo/
ls: cannot open directory foo/: Permission denied

1
เป็นมูลค่าการกล่าวขวัญว่าเหตุผลนี้มีประโยชน์เพราะคุณยังสามารถอ่าน foo / bar ได้หากคุณรู้จักชื่อไฟล์ ฉันเคยใช้สิ่งนี้กับเว็บเซิร์ฟเวอร์
Random832

0

คุณต้องมีสิทธิ์ในการอ่านและดำเนินการเพื่อที่จะดำเนินการสคริปต์ read and executeอ่านเนื้อหาของสคริปต์เป็นสิ่งที่ช่วยให้สามารถดำเนินการเพื่อให้คุณจะต้องมีความสามารถที่จะ มิฉะนั้นคุณจะไม่สามารถเรียกใช้สคริปต์ได้หากไม่มีสคริปต์

กรณีการใช้งานที่ถูกต้องสำหรับการอนุญาตให้ดำเนินการเท่านั้นคืออะไร

ความปลอดภัย บางคนอาจต้องการที่จะปกป้องไฟล์ของพวกเขาและหยุดคนอื่นจากการดำเนินการหรือใช้พวกเขา


2
chmod 000จะถือว่าสิทธิ์ในการไม่มีใครrootยกเว้น บางครั้งคุณไม่จำเป็นต้องใช้สิ่งนี้เพื่อการป้องกัน - ขึ้นอยู่กับความตั้งใจของผู้ใช้ เพื่อที่จะขอพูดว่า "อีกครั้ง chmod" rootแฟ้มกลับไปสิทธิ์อ่านและเขียนได้ที่คุณจะต้องทำผ่านทางนี้ หากคุณไม่สามารถเข้าถึงrootได้มันจะพิสูจน์ได้ยาก
Jordan Savell

2
สมมติว่าคุณมีชุดเครื่องมือ/toolsที่คุณต้องการให้ผู้คนสามารถใช้ แต่ถ้าพวกเขารู้เกี่ยวกับพวกเขา chmod 711 /tools. แล้วสิ่งที่ปฏิบัติการใน /toolsสามารถทำงานได้อย่างชัดเจน แต่ls /tools/จะถูกปฏิเสธ
DopeGhoti

1
คำตอบที่ดี! สอนฉันบางอย่างที่นั่นด้วย ทำไมไฟล์ไบนารีไม่จำเป็นต้องได้รับอนุญาตให้อ่านเพื่อดำเนินการ?
Jordan Savell

2
เพราะการแสดงเนื้อหาของไฟล์และดำเนินการพวกเขาเป็นสองสิ่งที่แตกต่างกัน เชลล์สคริปต์จะ "ดำเนินการ" โดย "อ่าน" พวกเขาลงในเชลล์ใหม่ (ถ้าคุณไม่ให้อภัยการทำให้เข้าใจง่าย) ซึ่งเป็นสาเหตุที่คุณต้องอ่าน ไบนารีไม่ใช้กลไกนั้น
DopeGhoti

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