ใครคือ "ผู้อื่น" ถ้าเราให้บริการทั้งหมดบนเซิร์ฟเวอร์ของเรากับผู้ใช้ "คนอื่น ๆ " ไม่ถูกต้อง? ตัวอย่างเช่นถ้าเรานำ Apache ไปใช้กับผู้ใช้และเราตั้งค่า/var/www
ให้ทำapache
ตามและเราchmod 700
ควรจะใช้งานได้ใช่ไหม?
นี่คือวิธีการอนุญาตทำงานอธิบายโดยย่อ:
ตัวเลขตัวแรกคือสำหรับเจ้าของไฟล์จริง (ตรวจสอบว่าใครเป็นเจ้าของไฟล์ls -l
และแก้ไขด้วยchown
)
ตัวเลขตัวที่สองใช้สำหรับกลุ่มของไฟล์ (แม้ว่าเจ้าของไฟล์จะต้องไม่อยู่ในกลุ่มเดียวกันกับที่เป็นเจ้าของไฟล์)
สามหลักคือคนอื่นที่มีความหมายไม่ได้เจ้าของไฟล์และทุกคนไม่ได้อยู่ในกลุ่ม
ดังนั้นหากคุณchmod
มีไฟล์ถึง 700 และเป็นเจ้าของapache
แม้แต่ผู้ใช้ "ปกติ" ของคุณก็จะไม่สามารถอ่านเขียนหรือดำเนินการได้ นี่เป็นข้อ จำกัด อย่างมากและจำเป็นเฉพาะในโอกาสที่หายาก - ตัวอย่างเช่นเมื่อคุณต้องการรักษาความปลอดภัยคีย์ส่วนตัว SSH ของคุณจะได้รับ600
สิทธิ์ สำหรับ Apache สิ่งนี้อาจส่งผลให้เกิดปัญหาอื่นนอกเหนือจากข้อเท็จจริงที่ว่าด้วยบัญชีผู้ใช้ปกติของคุณคุณจะไม่สามารถแก้ไขไฟล์ใด ๆ ใน/var/www
อีกต่อไป
ดังนั้นโดยทั่วไปคุณไม่จำเป็นต้องลบการอนุญาตเพื่ออ่าน ( x00
) สำหรับผู้อื่น
คุณสามารถปล่อยให้apache
เป็นเจ้าของ/var/www
ไดเรกทอรี แต่อาจมี644
(แบบอ่านอย่างเดียวสำหรับคนอื่น) อีกวิธีหนึ่งที่ผมมักจะใช้คือการเพิ่มผู้ใช้ของคุณเองและผู้ใช้ Apache ไปใหม่www-users
กลุ่มแล้ว chmodding ไฟล์ในการ/var/www
775
วิธีนี้ทั้งคุณและ Apache สามารถเขียนลงไฟล์ได้ ดูที่นี่สำหรับข้อมูลเพิ่มเติม: สิทธิ์กลุ่มสำหรับ apache
ความแตกต่างระหว่าง "execute" และ "read" คืออะไร?
ไฟล์ที่รันได้สามารถเรียกใช้โดยตรงโดยผู้ใช้ - ตรงจากเชลล์ เพื่อแสดงสิ่งนี้ลองเขียนไฟล์สั้น ๆ แล้วเรียกมันว่า "test" เพิ่มเนื้อหาต่อไปนี้:
echo "I am executable"
บันทึกไฟล์ ./test
ขณะนี้ในเปลือกของคุณพยายามที่จะใส่ คุณจะได้รับข้อผิดพลาด " -bash: ./test: การอนุญาตที่ถูกปฏิเสธ " นี่เป็นเพราะโดยค่าเริ่มต้นไฟล์ที่สร้างขึ้นใหม่จะไม่มีการดำเนินการอนุญาต หากคุณเพิ่มสิทธิ์ดำเนินการมันจะทำงาน
$ chmod +x test
$ ./test
I am executable
ตอนนี้ก็เป็นแค่สคริปต์ทดสอบ แต่โดยทั่วไปแล้วไฟล์ไบนารีทั้งหมด (เหมือนโปรแกรมที่รวบรวม) นอกจากนี้ยังจำเป็นที่จะต้องดำเนินการตั้งค่าสิทธิ์เพื่อให้คุณสามารถจริงทำงานและทำอะไรกับพวกเขาและไม่เพียง แต่อ่าน
เหล่านี้เป็นตัวอย่างโปรแกรมระบบที่พบส่วนใหญ่/bin
มา เรียกใช้ls -l /bin
เพื่อตรวจสอบสิทธิ์ของพวกเขา อย่างที่คุณเห็นพวกเขาเป็นเจ้าของroot
และคุณไม่สามารถเปลี่ยนแปลงได้ แต่คุณสามารถดำเนินการได้ตลอดเวลา
ดังนั้นนี่เป็นคุณลักษณะด้านความปลอดภัยด้วยเนื่องจากคุณสามารถ จำกัด การใช้งานสคริปต์และไบนารีบางอย่างสำหรับผู้ใช้บางคน
ต้องการเรียนรู้เพิ่มเติมเกี่ยวกับสิทธิ์ Unix อ่านบทความวิกิพีเดีย การอนุญาตพื้นฐานที่คุณรู้จักในฐานะ "อ่าน - เขียน - ดำเนินการ" ได้รับการดำเนินการมาเป็นเวลานาน แต่เป็นเพียงส่วนหนึ่งของสิ่งที่คุณเรียกรายการควบคุมการเข้าถึง - ซึ่งมีฟังก์ชั่นมากกว่านี้
สิทธิ์เริ่มต้นของไฟล์สำหรับระบบทั้งหมดคืออะไรหลังจากการติดตั้งใหม่ทั้งหมด (เช่นใน Ubuntu)?
พวกเขาแตกต่างกันไปตามไดเรกทอรีและเจ้าของ root
ไฟล์และไดเรกทอรีบางคนมีระบบที่สงวนและเป็นเจ้าของโดย ในกรณีส่วนใหญ่คุณจะสามารถอ่านได้ด้วยบัญชีผู้ใช้ปกติของคุณอย่างไรก็ตาม
ไดเรกทอรีอื่น ๆ เช่นโฟลเดอร์บ้านของคุณเห็นได้ชัดว่าเป็นของผู้ใช้ของคุณ มันสมเหตุสมผลแล้วที่จะปฏิเสธการอ่านการอนุญาตแก่ผู้ใช้รายอื่นบนเครื่องถ้ามันถูกแชร์ระหว่างคนหลายคน - หลังจากทั้งหมดคุณไม่ต้องการให้ข้อมูลส่วนตัวของคุณเปิดเผย
ในที่สุดไฟล์บางไฟล์สามารถใช้งานได้ตามค่าเริ่มต้น (เช่นใน/bin
) แต่ไฟล์อื่น ๆ ไม่ได้ (เช่นไฟล์กำหนดค่า/etc
)
ระบบแฟ้มลำดับชั้นมาตรฐานระบุวัตถุประสงค์การใช้งานสำหรับไดเรกทอรีที่พบในระบบลินุกซ์ คุณเกือบจะสามารถ "เดา" สิทธิ์ที่ควรจะขึ้นอยู่กับสิ่งที่คุณต้องการทำกับไดเรกทอรี