การเข้าถึงไฟล์ในไดเรกทอรีที่ไม่มีสิทธิ์ x?


19

ฉันมีปัญหาเล็กน้อยในการทำความเข้าใจว่าสิทธิ์ในการดำเนินการหมายถึงไดเรกทอรีอย่างไร ฉันเข้าใจถูกต้องหรือไม่ว่าสิ่งใดในไดเรกทอรีที่ผู้ใช้ไม่มีสิทธิ์ x ไม่สามารถเข้าถึงได้แม้ว่าสิ่งที่อยู่ในไดเรกทอรีจะให้สิทธิ์เฉพาะแก่ผู้ใช้หรือไม่

หรือผู้ใช้จะยังคงเข้าถึงสิ่งต่าง ๆ ในไดเรกทอรีโดยตรง แต่ไม่สามารถแสดงรายการสิ่งที่อยู่ในไดเรกทอรีได้

(สิ่งที่ฉันพยายามเข้าใจจริงๆคือความปลอดภัยในการเข้าถึงไดเร็กตอรี่จากผู้ใช้รายอื่นหากพวกเขาไม่ได้รับอนุญาต x)

คำตอบ:


20

x bit สำหรับไดเรกทอรีเรียกอีกอย่างว่า bit การค้นหา ที่จริงแล้วมันช่วยให้คุณสามารถเข้าถึง inodes ของไฟล์ที่อยู่ในโฟลเดอร์ ดังนั้นหากคุณต้องการเข้าถึง /home/user/foo/bar.txt คุณต้องมีการเข้าถึงการค้นหาในทุกบรรพบุรุษของ bar.txt

การอ้างอิงจากหน้า

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

จำเป็นต้องใช้สิทธิ์ดำเนินการในไดเรกทอรีเพื่อให้สามารถเข้าไปในซีดีได้ (นั่นคือเพื่อทำให้ไดเรกทอรีบางส่วนเป็นไดเรกทอรีทำงานปัจจุบันของคุณ)

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

ต้องมีสิทธิ์การค้นหาในสถานการณ์ทั่วไปหลายอย่าง พิจารณาคำสั่ง cat / home / user / foo คำสั่งนี้ต้องมีสิทธิ์อ่านอย่างชัดเจนสำหรับไฟล์ foo แต่ถ้าคุณไม่ได้รับอนุญาตให้ค้นหาใน /, / home, และ / home / user directory แมวไม่สามารถหา inode of foo และไม่สามารถอ่านได้! คุณต้องได้รับอนุญาตในการค้นหาในทุกไดเรกทอรีบรรพบุรุษเพื่อเข้าถึง inode ของไฟล์ใด ๆ (หรือไดเรกทอรี) และคุณไม่สามารถอ่านไฟล์ได้จนกว่าคุณจะได้รับ inode

โปรดอ่านเพิ่มเติมที่ส่วนไดเรกทอรีสิทธิ์ไฟล์

อัปเดต:เลโอตั้งคำถามที่ดีมาก ถ้าเรารู้ว่าไอโหนดเราจะสามารถเข้าถึงไฟล์จากไดเรกทอรีที่มี x บิตได้หรือไม่? ฉันเชื่อว่าเราไม่ควรทำเช่นนั้น ฉันไม่ได้ทดสอบด้วยโปรแกรม c แต่ใช้คำสั่ง bash ที่มีประโยชน์บางคำสั่งเพื่อยืนยัน

user@user-desktop:~/test$ ls -lart
total 12
drwxr-xr-x 49 user user 4096 2011-11-30 22:37 ..
drwxr-xr-x  3 user user 4096 2011-11-30 22:37 .
drwxr-xr-x  2 user user 4096 2011-11-30 22:38 level1
user@user-desktop:~/test$ ls -lart level1/
total 12
drwxr-xr-x 3 user user 4096 2011-11-30 22:37 ..
drwxr-xr-x 2 user user 4096 2011-11-30 22:38 .
-rw-r--r-- 1 user user    8 2011-11-30 22:38 file1
user@user-desktop:~/test$ stat level1
  File: `level1'
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 808h/2056d  Inode: 95494       Links: 2
Access: (0755/drwxr-xr-x)  Uid: ( 1000/    user)   Gid: ( 1000/    user)
Access: 2011-11-30 22:46:16.576702105 +0530
Modify: 2011-11-30 22:38:12.386701913 +0530
Change: 2011-11-30 22:46:08.876702102 +0530
user@user-desktop:~/test$ stat level1/file1 
  File: `level1/file1'
  Size: 8           Blocks: 8          IO Block: 4096   regular file
Device: 808h/2056d  Inode: 60775       Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/    user)   Gid: ( 1000/    user)
Access: 2011-11-30 22:38:19.846701917 +0530
Modify: 2011-11-30 22:38:16.366701915 +0530
Change: 2011-11-30 22:38:16.366701915 +0530
user@user-desktop:~/test$ chmod -x level1
user@user-desktop:~/test$ stat level1/file1 
stat: cannot stat `level1/file1': Permission denied
user@user-desktop:~/test$ ls -lart level1/
ls: cannot access level1/..: Permission denied
ls: cannot access level1/.: Permission denied
ls: cannot access level1/file1: Permission denied
total 0
-????????? ? ? ? ?                ? file1
d????????? ? ? ? ?                ? ..
d????????? ? ? ? ?                ? .
user@user-desktop:~/test$ cat level1/file1
cat: level1/file1: Permission denied
user@user-desktop:~/test$ find . -inum 95494
./level1
user@user-desktop:~/test$ find . -inum 60775
user@user-desktop:~/test$ find ./level -inum 60775
find: `./level': No such file or directory
user@user-desktop:~/test$ find ./level1 -inum 60775

2
ดังนั้นหากฉันมีหมายเลข inode ของไฟล์ / ไดเรกทอรีในไดเรกทอรีที่ไม่มีสิทธิ์ในการค้นหาฉันจะสามารถเข้าถึงได้ตราบเท่าที่สิทธิ์อนุญาตอนุญาตหรือไม่ (การรับหมายเลข inode โดยที่ไม่สามารถทำสถิติได้ค่อนข้างยากแม้ว่าฉันจะคิด)
Leo

@Leo ฉันเชื่อว่าเราไม่ควรทำเช่นนั้น ฉันได้อัพเดตคำตอบแล้ว หากคุณมีต้นขั้วเล็ก ๆ โปรดตรวจสอบและแจ้งให้เราทราบ
Amey Jah

1
@ AmeyJah ที่จริงฉันพนันได้เลย พิจารณาสิ่งที่เกิดขึ้นเมื่อคุณฮาร์ดลิงก์ไฟล์ไปยังไดเรกทอรีอื่นที่คุณได้รับอนุญาต ไอโหนดเดียวกัน แต่คุณสามารถอ่านได้ สิทธิ์ในการอ่านไม่ได้ขึ้นอยู่กับระบบที่ค้นหาโฟลเดอร์ทั้งหมดที่ไอโหนดอาจอยู่และดูว่าพวกเขามี x บิตหรือไม่ คำตอบที่ดีแม้ว่า ขอบคุณมาก.
user1477

@AmeyJah ls , statเป็นต้นใช้stat (2)เป็นต้นในกรณีที่คุณยังไม่รู้ ฉันสามารถเขียนโปรแกรม C แต่การทดสอบของคุณทำทุกอย่างที่โปรแกรมจะแสดงแม้ว่าแน่ใจว่าสามารถทำได้มากกว่านี้เหมือนกัน: ใช้ syscalls (ส่วนที่ 2) การเรียกใช้ไลบรารี (ส่วนที่ 3) มีระดับสูงกว่า syscalls แต่ไม่เปลี่ยนแปลงอะไรเลย (เช่นลบ (3) ใช้ rmdir (2) สำหรับไดเรกทอรีและยกเลิกการเชื่อมโยง (2) สำหรับไฟล์)
Pryftan

5

เนื่องจากคุณจะขอไดเรกทอรี:

อ่านหมายถึง:อ่านเนื้อหาคือการแสดงรายการพวกเขาด้วย ls

หมายถึงการเขียน:เขียนเป็นผู้อำนวยการ เช่นการสร้างไฟล์หรือไดเรกทอรีย่อย

ดำเนินการหมายถึง:เข้าสู่ไดเรกทอรีนั้น

สิทธิ์ในการอ่านและดำเนินการอาจเป็นเรื่องยากสำหรับไดเรกทอรี

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

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


2
หากคุณมีสิทธิ์อ่าน แต่ไม่ได้ดำเนินการคุณสามารถแสดงรายการ (ls) เนื้อหาของไดเรกทอรี แต่ไม่สามารถเข้าถึง (cat) ไฟล์ในนั้น หากคุณมีสิทธิ์ดำเนินการ แต่ไม่ได้อ่านและคุณรู้ชื่อของไฟล์คุณสามารถเข้าถึง (cat) พวกเขา
dash17291

2

สิทธิ์ดำเนินการในไดเรกทอรีหมายถึง:

ความสามารถในการ cd ลงในไดเรกทอรีนี้และเข้าถึงไฟล์ในไดเรกทอรีนี้

หากคุณไม่มีxสิทธิ์ในไดเรกทอรีคุณจะไม่สามารถ:

  • ใส่ลงในไดเรกทอรี (เช่น: cd)
  • ไม่สามารถเข้าถึงไฟล์ใด ๆ ในไดเรกทอรีนี้ (แม้ว่าคุณจะรู้ชื่อ)

ตัวอย่าง:

$ ls -ld testdir
drw------- 2 xxxxxx xxxxxx 14 2011-11-29 19:38 testdir

$ cd testdir
bash: cd: testdir: Permission denied

$ cat testdir/a
cat: testdir/a: Permission denied

$ chmod 700 testdir
$ cat testdir/a
Some text.

อ่านLinux File Permission Confusion pt 2เพื่อการแนะนำที่ดีในหัวข้อ

สิ่งเดียวที่xดูเหมือนว่าการอนุญาตไม่ได้รับอนุญาตคือการเข้าถึงชื่อของไฟล์ในไดเรกทอรีนั้น

ตัวอย่าง:

$ ls -ld testdir
drw------- 2 xxxxxx xxxxxx 14 2011-11-29 19:38 testdir

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