เหตุใด chmod 644 จึงทำให้ไดเรกทอรีไม่สามารถเข้าถึงได้


8

ฉันมีไฟล์มีเดียมากมาย (ที่จำเป็นต้องเป็น 644) เท่านั้นซึ่งเป็นการผสมผสานของการอนุญาตที่หลากหลาย บางคนเขียนเป็นกลุ่มหรือเขียนทั่วโลกดังนั้นฉันจึงคิดว่าปลอดภัยฉันจะ chmod พวกเขาทั้งหมดกลับไปที่ 644

ปัญหาคือมีลำดับชั้นไดเรกทอรีและไดเรกทอรีทั้งหมดที่ติดอยู่ในนี้ls -lแสดงพวกเขาเป็น:

d????????? ? ? ? ?            ? Dirname

ถ้าฉัน chmod ถึง 744 มันคงที่

คำถามของฉันคือ: เกิดอะไรขึ้นที่นี่? ไดเรกทอรีจำเป็นต้องสามารถเรียกใช้งานได้หรือไม่

คำตอบ:


7

ตามที่ระบุไว้ใน manpage สำหรับที่chmodเกี่ยวข้องกับสิทธิ์:

ตัวอักษร rwxXst เลือกบิตโหมดไฟล์สำหรับผู้ใช้ที่ได้รับผลกระทบ: อ่าน (r), เขียน (w), เรียกใช้ (หรือค้นหาไดเรกทอรี) (x), เรียกใช้ / ค้นหาเฉพาะในกรณีที่ไฟล์เป็นไดเรกทอรีหรือมีสิทธิ์ดำเนินการบางอย่างแล้ว ผู้ใช้ (X)

บิตที่เรียกใช้งานได้บนโฟลเดอร์ถูกอธิบายไว้ด้านบนว่าเป็นสิทธิ์ 'ค้นหา'; เช่นรันคำสั่งเพียงอนุญาตให้คุณเข้าถึงโฟลเดอร์ในเบราว์เซอร์ไฟล์หรือย้ายไปยังโฟลเดอร์จากเทอร์มินัลโดยการรันcdคำสั่งหรือรันls ~/folderเพื่อแสดงรายการไฟล์ในโฟลเดอร์

โฟลเดอร์จะต้องสามารถเรียกใช้งานได้สำหรับเจ้าของแม้ว่า superuser จะยังสามารถเข้าถึงโฟลเดอร์ได้เช่นเดียวกับเมื่อใช้sudoไฟล์หรือไดเรกทอรีใด ๆ สามารถเข้าถึงหรือลบได้ นอกจากนี้ไดเรกทอรีและไฟล์สิทธิ์ที่จะอธิบายต่อไปในบทความที่มีประโยชน์นี้ที่ Stackoverflow

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

สำหรับผู้ใช้เดสก์ท็อปที่บ้าน (แต่อาจไม่ใช่เซิร์ฟเวอร์ของคุณ) โฟลเดอร์ส่วนใหญ่ภายใน$HOMEมีสิทธิ์ดำเนินการที่กำหนดไว้สำหรับผู้ใช้กลุ่มและอื่น ๆ หากดูด้วยstat ~/myfolder(ตัดตอนด้านล่าง):

Access: (0755/drwxr-xr-x)  Uid: ( 1000/    mike)   Gid: ( 1000/    mike)

สิทธิ์มาตรฐานสำหรับโฟลเดอร์ภายใน $HOMEคือ 755 หรือ 775 และสำหรับไฟล์ที่มี 644 อย่างไรก็ตามส่วนที่เหลือของระบบไฟล์จะแตกต่างกัน อีกครั้งโฟลเดอร์จะต้องมีบิตเรียกใช้งานสำหรับเจ้าของไม่เช่นนั้นเขาจะไม่สามารถเปิดได้ มันเป็นสิ่งสำคัญที่จะต้องระมัดระวังในchmodการเปลี่ยนการอนุญาตและโดยเฉพาะอย่างยิ่งเมื่อทำแบบวนซ้ำเนื่องจากสถานการณ์อาจสับสนได้อย่างรวดเร็ว

สำหรับข้อมูลเพิ่มเติมโปรดดูที่man chmodหรืออูบุนตู manpages ออนไลน์และนี้บทความที่ Superuser


0

ไดเรกทอรีต้องการxชุดบิต (สำหรับไดเรกทอรีที่บิตถูกมองว่าเป็นบิตการค้นหา) เพื่อเปิด หลายคนค้นพบว่าเมื่อพวกเขาลบบิตที่สามารถเรียกใช้งานได้chmod -Rในโฟลเดอร์ทั้งหมดแล้วพวกเขาก็ไม่สามารถเข้าถึงได้อีกต่อไป ในการแก้ไขปัญหานี้ฉันใช้treeเพื่อฉันจะได้รับเฉพาะชุดโฟลเดอร์และหลีกเลี่ยงฝันร้ายของการตั้งค่าไฟล์ทั้งหมดเป็นไฟล์ปฏิบัติการ (ตัวเลือกสำหรับทรีคือ -d List directories only.):

sudo tree -faid dirname | xargs -L1 -I{} sudo chmod +x "{}"

หากคุณไม่มีtree:

find  dirname -type d -exec chmod +x {} 

คำเตือน!!! คุณควรนำสิ่งนี้ไปพิจารณา:

  • การใช้ chmod หรือ chown ซ้ำใน/ไดเรกทอรีรากหรือไดเรกทอรีระบบจะทำลายระบบปฏิบัติการของคุณ (จริง ๆ แล้วสิ่งที่เกิดซ้ำใน/ไดเรกทอรีหรือไดเรกทอรีระบบเป็นอันตราย)

  • นี่ไม่ใช่วิธีปฏิบัติด้านความปลอดภัยที่ดีในการตั้งค่าการอนุญาตเป็นกลุ่ม


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