ค้นหาเว็บไซต์

ซีรี่ส์ RHCSA: การใช้ ACL (รายการควบคุมการเข้าถึง) และการติดตั้ง Samba/NFS Shares - ตอนที่ 7


ในบทความล่าสุด (ซีรี่ส์ RHCSA ตอนที่ 6) เราเริ่มอธิบายวิธีการตั้งค่าและกำหนดค่าที่เก็บข้อมูลระบบในเครื่องโดยใช้ แยกส่วน และ ssm

นอกจากนี้เรายังกล่าวถึงวิธีการสร้างและเมานต์วอลลุ่มที่เข้ารหัสด้วยรหัสผ่านระหว่างการบู๊ตระบบ นอกจากนี้ เราเตือนคุณให้หลีกเลี่ยงการดำเนินการจัดการพื้นที่จัดเก็บข้อมูลที่สำคัญบนระบบไฟล์ที่ติดตั้ง ด้วยเหตุนี้ เราจะตรวจสอบรูปแบบระบบไฟล์ที่ใช้มากที่สุดใน Red Hat Enterprise Linux 7 จากนั้นจึงดำเนินการครอบคลุมหัวข้อการติดตั้ง การใช้ และ การยกเลิกการต่อเชื่อม ด้วยตนเอง และระบบไฟล์เครือข่ายโดยอัตโนมัติ (CIFS และ NFS) พร้อมด้วยการใช้งานรายการควบคุมการเข้าถึงสำหรับระบบของคุณ

ข้อกำหนดเบื้องต้น

ก่อนที่จะดำเนินการต่อ โปรดตรวจสอบให้แน่ใจว่าคุณมีเซิร์ฟเวอร์ Samba และเซิร์ฟเวอร์ NFS ที่พร้อมใช้งาน (โปรดทราบว่า NFSv2 ไม่ได้รับการสนับสนุนอีกต่อไปใน RHEL 7)

ในระหว่างคู่มือนี้ เราจะใช้เครื่องที่มี IP 192.168.0.10 โดยมีบริการทั้งสองทำงานเป็นเซิร์ฟเวอร์ และกล่อง RHEL 7 เป็นไคลเอนต์ที่มีที่อยู่ IP 192.168 .0.18. ต่อไปในบทความเราจะบอกคุณว่าแพ็คเกจใดที่คุณต้องติดตั้งบนไคลเอนต์

รูปแบบระบบไฟล์ใน RHEL 7

ตั้งแต่ RHEL 7 เป็นต้นไป XFS ได้รับการแนะนำเป็นระบบไฟล์เริ่มต้นสำหรับสถาปัตยกรรมทั้งหมด เนื่องจากมีประสิทธิภาพและความสามารถในการปรับขนาดสูง ขณะนี้รองรับขนาดระบบไฟล์สูงสุด 500 TB ตามการทดสอบล่าสุดที่ดำเนินการโดย Red Hat และพันธมิตรสำหรับฮาร์ดแวร์กระแสหลัก

นอกจากนี้ XFS ยังเปิดใช้งาน user_xattr (แอตทริบิวต์ผู้ใช้แบบขยาย) และ acl (รายการควบคุมการเข้าถึง POSIX) เป็นตัวเลือกการเมานต์เริ่มต้น ซึ่งแตกต่างจาก ext3 หรือ ext4 (ext2 ถือว่าเลิกใช้แล้ว ณ RHEL 7) ซึ่งหมายความว่าคุณไม่จำเป็นต้องระบุตัวเลือกเหล่านั้นอย่างชัดเจนบนบรรทัดคำสั่งหรือใน /etc/fstab เมื่อติดตั้งระบบไฟล์ XFS (หากคุณต้องการ ปิดการใช้งานตัวเลือกดังกล่าวในกรณีสุดท้าย คุณต้องใช้ no_acl และ no_user_xattr อย่างชัดเจน)

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

รายการควบคุมการเข้าถึง

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

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

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

1. ACLs มีสองประเภท: ACLs การเข้าถึง ซึ่งสามารถนำไปใช้กับไฟล์เฉพาะหรือไดเร็กทอรี) และ ACL เริ่มต้น ซึ่งสามารถนำไปใช้กับไดเร็กทอรีเท่านั้น หากไฟล์ที่อยู่ในนั้นไม่มีการตั้งค่า ACL ไฟล์เหล่านั้นจะสืบทอด ACL เริ่มต้นของไดเร็กทอรีหลัก

2. ในการเริ่มต้น คุณสามารถกำหนดค่า ACL ต่อผู้ใช้ ต่อกลุ่ม หรือต่อผู้ใช้ที่ไม่อยู่ในกลุ่มที่เป็นเจ้าของไฟล์

3. ACLs ได้รับการตั้งค่า (และลบออก) โดยใช้ setfacl โดยมี -m หรือ - x ตัวเลือก ตามลำดับ

ตัวอย่างเช่น ให้เราสร้างกลุ่มชื่อ tecmint และเพิ่มผู้ใช้ johndoe และ davennull เข้าไป:

groupadd tecmint
useradd johndoe
useradd davenull
usermod -a -G tecmint johndoe
usermod -a -G tecmint davenull

และมาตรวจสอบว่าผู้ใช้ทั้งสองอยู่ในกลุ่มเสริม tecmint:

id johndoe
id davenull

ตอนนี้เรามาสร้างไดเรกทอรีชื่อ Playground ภายใน /mnt และไฟล์ชื่อ testfile.txt อยู่ข้างใน เราจะตั้งค่าเจ้าของกลุ่มเป็น tecmint และเปลี่ยนสิทธิ์เริ่มต้นของ ugo/rwx เป็น 770 (อ่าน เขียน และดำเนินการสิทธิ์ที่มอบให้กับทั้งสอง เจ้าของและเจ้าของกลุ่มของไฟล์):

mkdir /mnt/playground
touch /mnt/playground/testfile.txt
chmod 770 /mnt/playground/testfile.txt

จากนั้นเปลี่ยนผู้ใช้เป็น johndoe และ davennull ตามลำดับ และเขียนลงในไฟล์:

echo "My name is John Doe" > /mnt/playground/testfile.txt
echo "My name is Dave Null" >> /mnt/playground/testfile.txt

จนถึงตอนนี้ดีมาก ตอนนี้ให้ผู้ใช้ gacanepa เขียนลงในไฟล์ และการดำเนินการเขียนจะล้มเหลว ซึ่งเป็นไปตามที่คาดไว้

แต่จะเกิดอะไรขึ้นถ้าเราต้องการให้ผู้ใช้ gacanepa (ซึ่งไม่ใช่สมาชิกของกลุ่ม tecmint) มีสิทธิ์ในการเขียนบน /mnt/playground/testfile.txt?< สิ่งแรกที่คุณอาจนึกถึงคือการเพิ่มบัญชีผู้ใช้นั้นในกลุ่ม tecmint แต่นั่นจะทำให้เขามีสิทธิ์ในการเขียนไฟล์ ทั้งหมด หากบิตการเขียนถูกตั้งค่าไว้สำหรับกลุ่ม และเราไม่ต้องการเช่นนั้น เราเพียงต้องการให้เขาเขียนถึง /mnt/playground/testfile.txt ได้

touch /mnt/playground/testfile.txt
chown :tecmint /mnt/playground/testfile.txt
chmod 777 /mnt/playground/testfile.txt
su johndoe
echo "My name is John Doe" > /mnt/playground/testfile.txt
su davenull
echo "My name is Dave Null" >> /mnt/playground/testfile.txt
su gacanepa
echo "My name is Gabriel Canepa" >> /mnt/playground/testfile.txt

ให้ผู้ใช้ gacanepa มีสิทธิ์อ่านและเขียน /mnt/playground/testfile.txt

ทำงานเป็นรูท

setfacl -R -m u:gacanepa:rwx /mnt/playground

และคุณได้เพิ่ม ACL ที่อนุญาตให้ gacanepa เขียนลงในไฟล์ทดสอบได้สำเร็จ จากนั้นเปลี่ยนไปใช้ผู้ใช้ gacanepa แล้วลองเขียนลงในไฟล์อีกครั้ง:

echo "My name is Gabriel Canepa" >> /mnt/playground/testfile.txt

หากต้องการดู ACLs สำหรับไฟล์หรือไดเรกทอรีเฉพาะ ให้ใช้ getfacl:

getfacl /mnt/playground/testfile.txt

หากต้องการตั้งค่า ACL เริ่มต้น ให้กับไดเร็กทอรี (ซึ่งเนื้อหาจะสืบทอดมาเว้นแต่จะเขียนทับเป็นอย่างอื่น) ให้เพิ่ม d: ก่อนกฎและระบุไดเร็กทอรีแทนชื่อไฟล์:

setfacl -m d:o:r /mnt/playground

ACL ข้างต้นจะอนุญาตให้ผู้ใช้ที่ไม่ได้อยู่ในกลุ่มเจ้าของสามารถเข้าถึงเนื้อหาในอนาคตของไดเรกทอรี /mnt/playground ได้ สังเกตความแตกต่างในผลลัพธ์ของ getfacl /mnt/playground ก่อนและหลังการเปลี่ยนแปลง:

บทที่ 20 ในคู่มือการดูแลระบบพื้นที่เก็บข้อมูล RHEL 7 อย่างเป็นทางการมีตัวอย่าง ACL เพิ่มเติม และฉันขอแนะนำให้คุณดูและนำไปใช้เป็นข้อมูลอ้างอิง