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

วิธีการตั้งค่ารายการควบคุมการเข้าถึง (ACL) และโควต้าดิสก์สำหรับผู้ใช้และกลุ่ม


รายการควบคุมการเข้าถึง (หรือที่เรียกว่า ACL) เป็นคุณลักษณะหนึ่งของเคอร์เนล Linux ที่ช่วยให้สามารถกำหนดสิทธิ์การเข้าถึงไฟล์และไดเร็กทอรีโดยละเอียดได้มากกว่าสิทธิ์ที่ระบุโดยสิทธิ์ ugo/rwx ทั่วไป

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

การตรวจสอบความเข้ากันได้ของระบบไฟล์กับ ACL

เพื่อให้แน่ใจว่าระบบไฟล์ของคุณรองรับ ACL ในปัจจุบัน คุณควรตรวจสอบว่าระบบไฟล์เหล่านั้นถูกเมาท์โดยใช้ตัวเลือก acl ในการทำเช่นนั้น เราจะใช้ tune2fs สำหรับระบบไฟล์ ext2/3/4 ตามที่ระบุด้านล่าง แทนที่ /dev/sda1 ด้วยอุปกรณ์หรือระบบไฟล์ที่คุณต้องการตรวจสอบ:

tune2fs -l /dev/sda1 | grep "Default mount options:"

หมายเหตุ: ด้วย XFS รายการควบคุมการเข้าถึงจะได้รับการสนับสนุนทันที

ในระบบไฟล์ ext4 ต่อไปนี้ เราจะเห็นว่า ACL ได้รับการเปิดใช้งานสำหรับ /dev/xvda2:

tune2fs -l /dev/xvda2 | grep "Default mount options:"

หากคำสั่งข้างต้นไม่ได้ระบุว่าระบบไฟล์ได้รับการเมานต์โดยรองรับ ACL อาจเป็นไปได้ว่ามีตัวเลือก noacl อยู่ใน /etc/fstab

ในกรณีดังกล่าว ให้ลบออก ถอนการต่อเชื่อมระบบไฟล์ แล้วต่อเชื่อมอีกครั้ง หรือเพียงแค่รีบูตระบบของคุณหลังจากบันทึกการเปลี่ยนแปลงเป็น /etc/fstab

ขอแนะนำ ACL ใน Linux

เพื่อแสดงให้เห็นวิธีการทำงานของ ACL เราจะใช้กลุ่มชื่อ นักพัฒนาซอฟต์แวร์ และเพิ่มผู้ใช้ walterwhite และ saulgoodman (ใช่แล้ว ฉันเป็นแฟนตัวยงของ Breaking Bad! ) ถึงมัน:

groupadd developers
useradd walterwhite
useradd saulgoodman
usermod -a -G developers walterwhite
usermod -a -G developers saulgoodman

ก่อนที่เราจะดำเนินการต่อไป โปรดตรวจสอบว่ามีการเพิ่มผู้ใช้ทั้งสองรายในกลุ่มนักพัฒนาแล้ว:

id walterwhite
id saulgoodman

ตอนนี้เรามาสร้างไดเร็กทอรีชื่อ test ใน /mnt และไฟล์ชื่อ acl.txt ภายใน (/mnt/test/acl .txt)

จากนั้น เราจะตั้งค่าเจ้าของกลุ่มเป็น นักพัฒนา และเปลี่ยนการอนุญาตเริ่มต้น ugo/rwx ซ้ำเป็น 770 (ซึ่งจะให้สิทธิ์ในการอ่าน เขียน และดำเนินการ สิทธิ์ที่มอบให้ทั้งเจ้าของและเจ้าของกลุ่มของไฟล์):

mkdir /mnt/test
touch /mnt/test/acl.txt
chgrp -R developers /mnt/test
chmod -R 770 /mnt/test

ตามที่คาดไว้ คุณสามารถเขียนถึง /mnt/test/acl.txt เป็น walterwhite หรือ saulgoodman:

su - walterwhite
echo "My name is Walter White" > /mnt/test/acl.txt
exit
su - saulgoodman
echo "My name is Saul Goodman" >> /mnt/test/acl.txt
exit

จนถึงตอนนี้ดีมาก อย่างไรก็ตาม เราจะพบปัญหาในเร็วๆ นี้เมื่อเราจำเป็นต้องให้สิทธิ์การเขียนแก่ /mnt/test/acl.txt สำหรับผู้ใช้รายอื่นที่ไม่ได้อยู่ในกลุ่มนักพัฒนาซอฟต์แวร์

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

การตั้งค่า ACL ใน Linux

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

หากไฟล์ภายในไดเร็กทอรีที่ตั้งค่า ACL เริ่มต้น ไว้ไม่มี ACL ของตัวเอง ไฟล์เหล่านั้นจะสืบทอด ACL เริ่มต้นของไดเร็กทอรีหลัก

ให้ผู้ใช้ gacanepa มีสิทธิ์อ่านและเขียน /mnt/test/acl.txt ก่อนที่จะดำเนินการดังกล่าว เรามาดูการตั้งค่า ACL ปัจจุบันในไดเร็กทอรีนั้นด้วย:

getfacl /mnt/test/acl.txt

จากนั้นเปลี่ยน ACL ในไฟล์ ใช้ u: ตามด้วยชื่อผู้ใช้และ :rw เพื่อระบุสิทธิ์ในการอ่าน/เขียน:

setfacl -m u:gacanepa:rw /mnt/test/acl.txt

และเรียกใช้ getfacl บนไฟล์อีกครั้งเพื่อเปรียบเทียบ รูปภาพต่อไปนี้แสดง “ก่อน ” และ “หลัง ”:

getfacl /mnt/test/acl.txt

ต่อไป เราจะต้องให้สิทธิ์ดำเนินการแก่ผู้อื่นในไดเร็กทอรี /mnt/test:


chmod +x /mnt/test

โปรดทราบว่าในการเข้าถึงเนื้อหาของไดเร็กทอรี ผู้ใช้ทั่วไปจำเป็นต้องมีสิทธิ์ดำเนินการในไดเร็กทอรีนั้น

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

echo "My name is Gabriel Cánepa" >> /mnt/test/acl.txt

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

setfacl -m d:o:r /mnt/test
getfacl /mnt/test/

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

หากต้องการลบ ACL เฉพาะ ให้แทนที่ -m ในคำสั่งด้านบนด้วย -x ตัวอย่างเช่น,

setfacl -x d:o /mnt/test

หรือคุณสามารถใช้ตัวเลือก -b เพื่อลบ ACL ทั้งหมดในขั้นตอนเดียว:

setfacl -b /mnt/test

สำหรับข้อมูลเพิ่มเติมและตัวอย่างเกี่ยวกับการใช้ ACL โปรดดูที่ บทที่ 10, ส่วนที่ 2 ของ openSUSE Security Guide (พร้อมให้ดาวน์โหลดโดยไม่มีค่าใช้จ่ายในรูปแบบ PDF ด้วย ).

ตั้งค่าโควต้าดิสก์ Linux บนผู้ใช้และระบบไฟล์

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

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

สิ่งแรกที่คุณต้องทำเพื่อเปิดใช้งานโควต้าบนระบบไฟล์คือเมานต์ด้วยตัวเลือก usrquota หรือ grpquota (สำหรับโควต้าผู้ใช้และกลุ่ม ตามลำดับ) ใน /etc/fstab

ตัวอย่างเช่น เรามาเปิดใช้โควต้าตามผู้ใช้ใน /dev/vg00/vol_backups และโควต้าตามกลุ่มใน /dev/vg00/vol_projects

โปรดทราบว่า UUID ใช้เพื่อระบุแต่ละระบบไฟล์

UUID=f6d1eba2-9aed-40ea-99ac-75f4be05c05a /home/projects ext4 defaults,grpquota 0 0
UUID=e1929239-5087-44b1-9396-53e09db6eb9e /home/backups ext4 defaults,usrquota 0 0

ถอนติดตั้งและติดตั้งระบบไฟล์ทั้งสองอีกครั้ง:

umount /home/projects
umount /home/backups
mount -o remount /home/projects
mount -o remount /home/backups 

จากนั้นตรวจสอบว่ามีตัวเลือก usrquota และ grpquota อยู่ในผลลัพธ์ของการเมานต์ (ดูไฮไลต์ด้านล่าง):

mount | grep vg00

สุดท้าย ให้รันคำสั่งต่อไปนี้เพื่อเริ่มต้นและเปิดใช้งานโควต้า:

quotacheck -avugc
quotaon -vu /home/backups
quotaon -vg /home/projects

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

การตั้งค่าโควต้าดิสก์ Linux

เริ่มต้นด้วยการตั้งค่า ACL บน /home/backups สำหรับผู้ใช้ gacanepa ซึ่งจะให้สิทธิ์ในการอ่าน เขียน และดำเนินการในไดเรกทอรีนั้น:

setfacl -m u:gacanepa:rwx /home/backups/

แล้วด้วย

edquota -u gacanepa

เราจะสร้างบล็อก soft limit=900 และฮาร์ด limit=1000 (1024 ไบต์/บล็อก * 1,000 บล็อก=1024000 ไบต์=1 MB ) ของการใช้พื้นที่ดิสก์

นอกจากนี้เรายังสามารถกำหนดขีดจำกัด 20 และ 25 เป็นขีดจำกัดซอฟต์และฮาร์ดสำหรับจำนวนไฟล์ที่ผู้ใช้นี้สามารถสร้างได้

คำสั่งดังกล่าวจะเปิดตัวแก้ไขข้อความ ($EDITOR) พร้อมไฟล์ชั่วคราวที่เราสามารถกำหนดขีดจำกัดที่กล่าวถึงก่อนหน้านี้:

การตั้งค่าเหล่านี้จะทำให้มีคำเตือนแสดงต่อผู้ใช้ gacanepa เมื่อถึงขีดจำกัด 900-block หรือ 20-inode สำหรับค่าเริ่มต้น ระยะเวลาผ่อนผัน 7 วัน

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

ในการทดสอบ ให้ผู้ใช้ gacanepa พยายามสร้างไฟล์เปล่า 2 MB ชื่อ test1 ภายใน /home/backups:

dd if=/dev/zero of=/home/backups/test1 bs=2M count=1
ls -lh /home/backups/test1

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

ในทำนองเดียวกัน คุณสามารถสร้าง ACL สำหรับกลุ่มนักพัฒนาเพื่อให้สมาชิกของกลุ่มนั้นเข้าถึง rwx เพื่อ /home/projects:

setfacl -m g:developers:rwx /home/projects/

และกำหนดขีดจำกัดโควต้าด้วย:

edquota -g developers

เช่นเดียวกับที่เราทำกับผู้ใช้ gacanepa ก่อนหน้านี้

ระยะเวลาผ่อนผันสามารถระบุเป็นจำนวนวินาที นาที ชั่วโมง วัน สัปดาห์ หรือเดือนเท่าใดก็ได้โดยการดำเนินการ

edquota -t

และอัปเดตค่าภายใต้ บล็อกระยะเวลาผ่อนผันและระยะเวลาผ่อนผันของไอโหนด

ตรงข้ามกับการใช้งานบล็อกหรือไอโหนด (ซึ่งตั้งค่าตามผู้ใช้หรือกลุ่ม) ระยะเวลาผ่อนผันจะถูกตั้งค่าทั้งระบบ

หากต้องการรายงานโควต้า คุณสามารถใช้โควต้า -u [user] หรือ quota -g [group] สำหรับรายการด่วนหรือ repquota -v [/path/to /filesystem] สำหรับรายงานที่มีรายละเอียดมากขึ้น (แบบละเอียด) และมีรูปแบบที่สวยงาม

แน่นอน คุณจะต้องแทนที่ [user], [group] และ [/path/to/filesystem] ด้วยผู้ใช้เฉพาะ/ชื่อกลุ่มและระบบไฟล์ที่คุณต้องการตรวจสอบ

สรุป

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

หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับโควต้า คุณสามารถดู Quota Mini-HowTo ใน The Linux Documentation Project

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