ไดเรกทอรีที่มีสิทธิ์ + x ผู้ปกครองไม่มี สิ่งนี้จะมีประโยชน์เมื่อใด


11

ว่าฉันมีโฟลเดอร์ที่เรียกว่าfolderในเส้นทางต่อไปนี้:

my_path = /a/b/c/d/e/folder

และไฟล์ที่เรียกว่าfileในโฟลเดอร์นั้น

จากนั้นพูดว่าฉันรันคำสั่งนี้เพื่อลบการอนุญาตกลุ่มภายใต้ / a /

> chmod g-rwx -R /a/

ตอนนี้บอกว่าฉันให้+rxสิทธิ์folder:

> chmod g+rx /a/b/c/d/e/folder

จากนั้นหากผู้ใช้คนที่สองในกลุ่มของฉันทำงาน:

> ls /a/b/c/d/e/folder

หรือ

> cat /a/b/c/d/e/folder/file 

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

ขอบคุณ


1
คุณแน่ใจchmod +grx -R /a/b/c/d/e/folderเหรอ มันผิดวิธีที่ถูกต้องในการดำเนินการคือchmod g+rx -R /a/b/c/d/e/folder
nozimica

3
ไม่ตอบคำถามนี้โดยตรง แต่ควรอ่านพื้นหลังที่แนะนำ: คำอธิบายเกี่ยวกับการอนุญาตของไดเรกทอรี
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

คำตอบ:


6

ส่วนใหญ่เวลาที่ถ้าคุณต้องการที่จะปิดกั้นการเข้าถึงและการใช้งานของสารบบทั้งหมด (รวมทั้งไดเรกทอรีย่อยของมัน) คุณสามารถทำมันได้โดยการเอามัน -x(ที่ไม่ซ้ำ) ดังนั้นคุณอาจออกจากไดเรกทอรีย่อยด้วย+xโดยไม่ทำอันตรายใด ๆ

การรักษาสิทธิ์ในไดเรกทอรีย่อยอาจมีประโยชน์ได้หลายประการ (โดยเฉพาะอย่างยิ่งเมื่อ-xไม่ได้ใช้กับทุกคน แต่ผู้ใช้อย่างน้อยหนึ่งคนยังสามารถทำอะไรได้)

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

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


7

คุณต้องมีสิทธิ์ + x ในทุก ๆ ไดเรกทอรีหลักเพื่อ cd หรือเข้าถึงไฟล์ในไดเรกทอรี

คุณต้องการสิทธิ์ + r ในไดเรกทอรีเพื่อแสดงรายการไฟล์ ดังนั้นนี่คือตัวอย่าง:

คุณสามารถออกคำสั่งเหล่านี้เพื่อตั้งค่าบางอย่าง:

mkdir -p /a/b

touch /a/b/{file1,file2}

cd /a

echo 1 > b/file1

echo 2 > b/file2

ไม่มีสิทธิ์:

pwd
/a$ pwd
/a
/a$ chmod -rwx b
/a$ ls -l
d---------  4 mike  admin  136 Jun  1 14:44 b/
/a$ ls -l b/
ls: : Permission denied
/a$ cat b/file1
cat: b/file1: Permission denied

ด้วยการดำเนินการเท่านั้น

/a$ chmod +x b
/a$ ls -l
total 0
d--x--x--x  4 mike  admin  136 Jun  1 14:44 b/
/a$ ls -l b
ls: b: Permission denied
/a$ cat b/file1
a
/a$ ls -l b/file1
-rw-r--r--  1 mike  admin  2 Jun  1 14:43 b/file1

ขณะนี้มีการอ่าน:

/a$ chmod +r b/
/a$ ls -l
/a$ ls -l
total 0
dr-xr-xr-x  4 mike  admin  136 Jun  1 14:44 b/
/a$ ls -l b/
total 16
-rw-r--r--  1 mike  admin  2 Jun  1 14:43 file1
-rw-r--r--  1 mike  admin  2 Jun  1 14:43 file2

ส่วนนี้อาจสับสนเล็กน้อย แต่ด้วยการอ่านอย่างเดียวและไม่มีผู้ดำเนินการคุณสามารถแสดงรายการไฟล์ในไดเรกทอรีได้ แต่ไม่ได้อ่านข้อมูลเมตาของ inodes ดังนั้นคุณจะได้รับการปฏิเสธสิทธิ์ แต่ยังสามารถดูรายการไฟล์ได้ ในไดเรกทอรีดังต่อไปนี้ ..

/a$ chmod -x b/
/a$ ls -l
total 0
dr--r--r--  4 mike  admin  136 Jun  1 14:44 b/
/a$ ls -l b
ls: file1: Permission denied
ls: file2: Permission denied

2
ขอบคุณ @skrewler คุณพูดว่า: "คุณต้องมีสิทธิ์ + x ในทุกไดเรกทอรีหลักเพื่อ cd หรือเข้าถึงไฟล์ในไดเรกทอรี" ซึ่งเป็นสิ่งที่ฉันคิด คำถามของฉันแล้วคือเหตุผลที่คุณจะเคยยอม + x สิทธิ์ในการไดเรกทอรีที่มีพ่อแม่ผู้ปกครองจะไม่ได้รับอนุญาต + x?
Amelio Vazquez-Reina

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

ข้างต้นควรมีความชัดเจนมากขึ้น ผู้ใช้รูทที่มีสิทธิ์ในไดเรกทอรีหลักทั้งหมดสามารถทำให้การเชื่อมโยงนี้อนุญาตให้ผู้ใช้รายอื่นเข้าถึงไดเรกทอรีได้ เนื่องจากพวกเขาสามารถเข้าถึง / a / b / c / d / e ที่ d หรือ e เท่านั้นที่มีการดำเนินการทั่วโลกคุณสามารถทำการผูกติดจาก / mnt / d -> / a / b / c / d / e และผู้ใช้สามารถเข้าถึง มันโดยไปที่จุดเมานท์ มันเป็นความคิดเดียวกันกับการสร้างลิงก์ไปยังที่ใดที่หนึ่งที่ลึกลงไปในแผนผังไดเรกทอรีที่ไม่สามารถเข้าถึงได้ ลิงก์สัญลักษณ์ไม่ทำงานเช่นนี้ถึงแม้ว่าจะต้องใช้การเชื่อมแบบผูก
skrewler

2

คุณต้องการใช้การ+xอนุญาตแบบไม่เรียกซ้ำในสถานการณ์ที่คุณให้:

chmod g+x /a /a/b /a/b/c /a/b/c/d /a/b/c/d/e

(ซึ่งถือว่าผู้ใช้เป็นสมาชิกของกลุ่มของแต่ละไดเรกทอรีถ้าไม่คุณจะต้องทำchmod o+xกับไดเรกทอรีดังกล่าว)

เพื่อให้ผู้ใช้สามารถทำls /a/b/c/d/e/folderประสบความสำเร็จเขาจะต้องมีผู้ได้รับอนุญาตในทุกfolderไดเรกทอรีในเส้นทางและอ่านได้รับอนุญาต

ถ้าคุณทำ

chmod g+x -R /a

มันจะทำงานได้ แต่คุณจะให้สิทธิ์ดำเนินการเป็นกลุ่มแก่ทุกไฟล์และไดเรกทอรีภายใต้ / a นั่นไม่จำเป็นและในกรณีของไฟล์อาจผิด


1

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

หากคุณดำเนินการ:

chmod g-rwx -R /a/

เมื่อนั้นaและลูก ๆ ของมันทั้งหมดจะได้รับอนุญาต

เมื่อ yhou รัน:

chmod g+rx -R /a/b/c/d/e/folder

เมื่อนั้นfolderลูก ๆ ทุกคนจะได้รับอนุญาตเช่นกัน แต่มีคำสั่งในภายหลังนี้โฟลเดอร์a/, a/bและอื่น ๆ จนa/b/c/d/eจะไม่เปลี่ยนแปลงสิทธิ์ของพวกเขา


0

กรณีทั่วไปสำหรับการลบบิต x ในไดเรกทอรีคือการล็อคผู้ใช้ในไดเรกทอรีบ้านของพวกเขา เชลล์ที่ จำกัดมีตัวเลือกที่จะไม่อนุญาตให้cdอ้างอิงชื่อพา ธ สัมบูรณ์และไม่อนุญาตให้เรียกใช้งานโปรแกรมโดยใช้พา ธ สัมบูรณ์ พวกเขายังไม่สามารถcd ..ไปยังไดเรกทอรีหลักของโฮมไดเร็กตอรี่ของพวกเขาได้และถูกล็อคอย่างมีประสิทธิภาพและไม่สามารถรันโปรแกรมใด ๆ ที่ไม่ได้อยู่ใน $ PATH

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