สิทธิ์ของไดเรกทอรีหลักสำคัญเมื่อเข้าถึงไดเรกทอรีย่อยหรือไม่?


159

ถ้าฉันมีรูทโฟลเดอร์ที่มีสิทธิ์ จำกัด บางอย่างสมมติว่า 600 และถ้าโฟลเดอร์ย่อย / ไฟล์มีสิทธิ์ 777 ทุกคนจะสามารถอ่าน / เขียน / เรียกใช้ไฟล์ย่อยแม้ว่าโฟลเดอร์รูทจะมี 600 หรือไม่


12
โปรดทราบว่า chmodding ไดเรกทอรี 600 ทำให้ unaccessible ที่จะได้เป็นเจ้าของตามที่คุณต้องการดำเนินการได้รับอนุญาตให้เข้าไปใน chdir มัน ...
Shadur

คำตอบ:


183

กฎที่ถูกต้องคือ: คุณสามารถเข้าไปในไดเรคทอรีหากคุณมีสิทธิ์ดำเนินการ

ดังนั้นตัวอย่างเช่นในการเข้าถึงdir/subdir/fileคุณต้องดำเนินการอนุญาตdirและdir/subdirรวมถึงสิทธิ์fileสำหรับประเภทการเข้าถึงที่คุณต้องการ ในกรณีมุมฉันไม่แน่ใจว่ามันเป็นสากลที่คุณต้องใช้สิทธิ์ในไดเรกทอรีปัจจุบันเพื่อเข้าถึงไฟล์ผ่านทางญาติ (คุณทำบน Linux)

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

ลิงก์สัญลักษณ์ไม่มีอะไรเปลี่ยนแปลง เคอร์เนลใช้สิทธิ์การเข้าถึงของกระบวนการที่เรียกเพื่อเข้าไปสำรวจ ตัวอย่างเช่นหากsymการเชื่อมโยงสัญลักษณ์ไปยังไดเรกทอรีdirคุณจะต้องดำเนินการในวันที่ได้รับอนุญาตในการเข้าถึงdir sym/fooการอนุญาตบน symlink นั้นอาจขึ้นอยู่กับระบบปฏิบัติการและระบบไฟล์ (บางคนก็เคารพบางคนก็ไม่สนใจมัน)

การลบการเรียกใช้งานการอนุญาตจากไดเรกทอรีรูทจะ จำกัด ผู้ใช้ให้เป็นส่วนหนึ่งของแผนผังไดเร็กทอรีได้อย่างมีประสิทธิภาพ ต้องใช้รายการควบคุมการเข้าถึงเพื่อใช้งาน ตัวอย่างเช่นหาก/และ/homeมีข้อ จำกัด ในการjoe( setfacl -m user:joe:0 / /home) และ/home/joeเป็นjoeโฮมไดเรกทอรีของคุณjoeจะไม่สามารถเข้าถึงส่วนที่เหลือของระบบ (รวมถึงการเรียกใช้เชลล์สคริปต์ด้วย/bin/shหรือไบนารีที่เชื่อมโยงแบบไดนามิกที่จำเป็นต้องเข้าถึง/libดังนั้นคุณจึง ' จำเป็นต้องเจาะลึกเพื่อการใช้งานจริงเช่นsetfacl -m user:joe:0 /*; setfacl -d user:joe /bin /lib)

อ่านสิทธิ์ในไดเรกทอรีให้สิทธิในการระบุรายการ การให้สิทธิ์ดำเนินการโดยไม่ให้สิทธิ์การอ่านมีประโยชน์บางครั้ง: ชื่อของรายการใช้เป็นรหัสผ่านเพื่อเข้าถึง ฉันไม่สามารถคิดถึงการใช้งานใด ๆ ในการให้สิทธิ์ในการอ่านหรือเขียนไปยังไดเรกทอรีโดยไม่ได้รับอนุญาต


32

ไม่ได้สิทธิ์ในการรูทโฟลเดอร์จะ จำกัด สิทธิ์ของไฟล์รอง คุณสามารถลอง

$ mkdir rootdir
$ touch ./rootdir/childfile
$ chmod 777 ./rootdir/childfile
$ chmod 600 rootdir
$ cat ./rootdir/childfile

ฉันได้รับสิ่งนี้:

$ cat: ./rootfolder/childfile: permission denied

4

คุณสามารถทำให้ไดเรกทอรีลูกเขียนได้แม้ไดเรกทอรีแม่ไม่ได้ ฉันทำสิ่งนี้เพื่อกลุ่ม

ตัวอย่างเช่น: ไดเรกทอรีหลักเป็นเจ้าของโดย coder กลุ่ม

drwxr-sr-x

ไดเรกทอรีลูก

drwxrwsr-x

คุณ (สมาชิกใด ๆ ของกลุ่ม coder) ยังคงสามารถเขียนไปยังไดเรกทอรีลูก แต่ไม่ไปยังไดเรกทอรีหลัก


1

คุณสามารถสร้างฮาร์ดลิงก์เพื่อเข้าถึงไฟล์แม้ว่าคุณจะไม่มีสิทธิ์ดำเนินการในไดเรกทอรีหลัก แต่ catch ที่นี่คือคุณต้องสร้างการเชื่อมโยงอย่างหนักก่อนที่คุณจะสูญเสียสิทธิในการดำเนินการในไดเรกทอรีแม่

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