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

รักษาความปลอดภัยไฟล์/ไดเร็กทอรีโดยใช้ ACL (รายการควบคุมการเข้าถึง) ใน Linux


ในฐานะผู้ดูแลระบบ สิ่งที่สำคัญที่สุดของเราคือการปกป้องและรักษาความปลอดภัยข้อมูลจากการเข้าถึงโดยไม่ได้รับอนุญาต เราทุกคนต่างทราบดีถึงการอนุญาตที่เราตั้งค่าโดยใช้คำสั่ง Linux ที่เป็นประโยชน์ เช่น chmod, chown, chgrp… ฯลฯ อย่างไรก็ตาม การอนุญาตเริ่มต้นเหล่านี้ ชุดมีข้อจำกัดบางประการและบางครั้งอาจไม่ทำงานตามความต้องการของเรา ตัวอย่างเช่น เราไม่สามารถตั้งค่าชุดสิทธิ์ที่แตกต่างกันสำหรับผู้ใช้ที่แตกต่างกันในไดเรกทอรีหรือไฟล์เดียวกัน ดังนั้น รายการควบคุมการเข้าถึง (ACLs) จึงถูกนำมาใช้

สมมติว่าคุณมีผู้ใช้สามคน ได้แก่ 'tecmint1', 'tecmint2' และ 'tecmint3' แต่ละกลุ่มจะมีกลุ่มร่วมกันพูดว่า 'acl' ผู้ใช้ 'tecmint1' ต้องการเฉพาะผู้ใช้ 'tecmint2' เท่านั้นที่สามารถ อ่าน และ เข้าถึง ไฟล์ที่เป็นของ ' tecmint1' และไม่มีใครควรมีสิทธิ์เข้าถึงข้อมูลนั้น

ACL (รายการควบคุมการเข้าถึง) ช่วยให้เราทำเคล็ดลับเดียวกันได้ ACL เหล่านี้ช่วยให้เราสามารถให้สิทธิ์แก่ ผู้ใช้, กลุ่ม และกลุ่มของผู้ใช้ใด ๆ ที่ไม่อยู่ในรายชื่อกลุ่มของผู้ใช้

หมายเหตุ: ตามเอกสารประกอบผลิตภัณฑ์ Redhat มีการรองรับ ACL สำหรับระบบไฟล์ ext3 และระบบไฟล์ที่ส่งออก NFS

วิธีตรวจสอบการสนับสนุน ACL ในระบบ Linux

ก่อนที่จะดำเนินการต่อ คุณควรได้รับการสนับสนุน ACL บนเคอร์เนลปัจจุบันและระบบไฟล์ที่เมาท์

1. ตรวจสอบเคอร์เนลเพื่อรับการสนับสนุน ACL

เรียกใช้คำสั่งต่อไปนี้เพื่อตรวจสอบการสนับสนุน ACL สำหรับระบบไฟล์และตัวเลือก POSIX_ACL=Y (หากมี N แทนที่จะเป็น Y แสดงว่าหมายถึง Kernel ไม่รองรับ ACL และจำเป็นต้องคอมไพล์ใหม่)

[root@linux ~]# grep -i acl /boot/config*

CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_JFS_POSIX_ACL=y
CONFIG_XFS_POSIX_ACL=y
CONFIG_BTRFS_FS_POSIX_ACL=y
CONFIG_FS_POSIX_ACL=y
CONFIG_GENERIC_ACL=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFSD_V2_ACL=y
CONFIG_NFSD_V3_ACL=y
CONFIG_NFS_ACL_SUPPORT=m
CONFIG_CIFS_ACL=y
CONFIG_9P_FS_POSIX_ACL=y

2. ตรวจสอบแพ็คเกจที่จำเป็น

ก่อนที่จะเริ่มเล่นกับ ACL ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งแพ็คเกจที่จำเป็นแล้ว ด้านล่างนี้คือแพ็คเกจที่จำเป็นซึ่งจำเป็นต้องติดตั้งโดยใช้ yum หรือ apt-get

[root@linux ~]# yum install nfs4-acl-tools acl libacl		[on RedHat based systems]
[tecmint@linux ~]$ sudo apt-get install nfs4-acl-tools acl	[on Debian based systems]

3. ตรวจสอบระบบไฟล์ที่เมาท์เพื่อรองรับ ACL

ตอนนี้ให้ตรวจสอบระบบไฟล์ที่เมาท์ว่ามันถูกเมาท์ด้วยตัวเลือก ACL หรือไม่ เราสามารถใช้คำสั่ง 'mount' เพื่อตรวจสอบสิ่งเดียวกันดังที่แสดงด้านล่าง

[root@linux ~]# mount  | grep -i root

/dev/mapper/fedora-root on / type ext4 (rw,relatime,data=ordered)

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

[root@linux ~]# tune2fs -l /dev/mapper/fedora-root | grep acl

Default mount options:    user_xattr acl

ในผลลัพธ์ด้านบน คุณจะเห็นว่าตัวเลือกการเมานต์เริ่มต้นนั้นรองรับ acl แล้ว อีกทางเลือกหนึ่งคือติดตั้งพาร์ติชันใหม่ดังที่แสดงด้านล่าง

[root@linux ~]# mount -o remount,acl /

จากนั้นเพิ่มรายการด้านล่างลงในไฟล์ '/etc/fstab' เพื่อให้เป็นแบบถาวร

/dev/mapper/fedora-root /	ext4    defaults,acl 1 1

ติดตั้งพาร์ติชันอีกครั้ง

[root@linux ~]# mount -o remount  /

4. สำหรับเซิร์ฟเวอร์ NFS

บนเซิร์ฟเวอร์ NFS หากระบบไฟล์ที่ส่งออกโดยเซิร์ฟเวอร์ NSF รองรับ ACL และ ACL สามารถอ่านได้โดยไคลเอ็นต์ NFS ดังนั้น ACL จะถูกใช้โดยระบบไคลเอ็นต์

หากต้องการปิดใช้งาน ACL บนการแบ่งปัน NFS คุณต้องเพิ่มตัวเลือก “no_acl ” ในไฟล์ '/etc/exportfs' บนเซิร์ฟเวอร์ NFS หากต้องการปิดการใช้งานบนฝั่งไคลเอ็นต์ NSF อีกครั้ง ให้ใช้ตัวเลือก “no_acl ” ในระหว่างเวลาเมานท์

วิธีการใช้การสนับสนุน ACL ในระบบ Linux

ACL มีสองประเภท:

  1. ACL การเข้าถึง: ACL การเข้าถึงใช้สำหรับให้สิทธิ์ในไฟล์หรือไดเรกทอรีใดๆ
  2. ACL เริ่มต้น: ACL เริ่มต้นใช้สำหรับการให้สิทธิ์/การตั้งค่ารายการควบคุมการเข้าถึงในไดเร็กทอรีที่ระบุเท่านั้น

ความแตกต่างระหว่าง ACL การเข้าถึงและ ACL เริ่มต้น:

  1. ACL เริ่มต้นสามารถใช้ได้ในระดับไดเรกทอรีเท่านั้น
  2. ไดเร็กทอรีย่อยหรือไฟล์ใดๆ ที่สร้างขึ้นภายในไดเร็กทอรีนั้นจะสืบทอด ACL จากไดเร็กทอรีหลัก ในทางกลับกัน ไฟล์จะสืบทอด ACL เริ่มต้นเป็น ACL สำหรับการเข้าถึง
  3. เราใช้ “–d ” ในการตั้งค่า ACL เริ่มต้น และ ACL เริ่มต้นเป็นทางเลือก
ก่อนตั้งค่า ACL เริ่มต้น

หากต้องการกำหนด ACL เริ่มต้นสำหรับไฟล์หรือไดเร็กทอรีเฉพาะ ให้ใช้คำสั่ง 'getfacl' ในตัวอย่างด้านล่าง getfacl ถูกใช้เพื่อรับ ACL เริ่มต้นสำหรับโฟลเดอร์ 'Music'

[root@linux ~]# getfacl Music/

file: Music/
owner: root
group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:other::rw-
หลังจากตั้งค่า ACL เริ่มต้นแล้ว

หากต้องการตั้งค่า ACL เริ่มต้นสำหรับไฟล์หรือไดเร็กทอรีเฉพาะ ให้ใช้คำสั่ง 'setfacl' ในตัวอย่างด้านล่าง คำสั่ง setfacl จะตั้งค่า ACL ใหม่ (อ่าน และ ดำเนินการ) ในโฟลเดอร์ 'Music'.

[root@linux ~]# setfacl -m d:o:rx Music/
[root@linux ~]# getfacl Music/
file: Music/
owner: root
group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:other::r-x

วิธีการตั้งค่า ACL ใหม่

ใช้คำสั่ง 'setfacl' เพื่อตั้งค่าหรือแก้ไขไฟล์หรือไดเร็กทอรีใดๆ ตัวอย่างเช่น เพื่อให้สิทธิ์ อ่าน และ เขียน แก่ผู้ใช้ 'tecmint1'

setfacl -m u:tecmint1:rw /tecmint1/example

วิธีดู ACL

ใช้คำสั่ง 'getfacl' เพื่อดู ACL ในไฟล์หรือไดเร็กทอรีใดก็ได้ ตัวอย่างเช่น หากต้องการดู ACL บน '/tecmint1/example' ให้ใช้คำสั่งด้านล่าง

getfacl /tecmint1/example

file: tecmint1/example/
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::rwx
mask::rwx
other::---

วิธีลบ ACL

สำหรับการลบ ACL ออกจากไฟล์/ไดเร็กทอรีใด ๆ เราจะใช้ตัวเลือก x และ b ดังที่แสดงด้านล่าง

setfacl -x ACL file/directory  	# remove only specified ACL from file/directory.

setfacl -b  file/directory   		#removing all ACL from file/direcoty

ลองใช้ ACL ในสถานการณ์ต่อไปนี้

ผู้ใช้สองคน (tecmint1 และ tecmint2) ทั้งสองมีกลุ่มรองร่วมกันชื่อ 'acl' เราจะสร้างหนึ่งไดเร็กทอรีที่เป็นของ 'tecmint1' และจะให้สิทธิ์ อ่าน และ ดำเนินการ ในไดเร็กทอรีนั้นแก่ผู้ใช้ 'tecmint2< /แข็งแกร่ง>'

ขั้นตอนที่ 1: สร้างผู้ใช้สองคนและลบรหัสผ่านออกจากทั้งสองราย

[root@linux ~]# for user in tecmint1 tecmint2

> do
> useradd $user
> passwd -d $user
> done
Removing password for user tecmint1.
passwd: Success
Removing password for user tecmint2.
passwd: Success

ขั้นตอนที่ 2: สร้างกลุ่มและผู้ใช้ไปยังกลุ่มรอง

[root@linux ~]# groupadd acl
[root@linux ~]# usermod -G acl tecmint1
[root@linux ~]# usermod -G acl tecmint2

ขั้นตอนที่ 3: สร้างไดเรกทอรี /tecmint และเปลี่ยนความเป็นเจ้าของเป็น tecmint1

[root@linux ~]# mkdir /tecmint1
[root@linux ~]# chown tecmint1 /tecmint1/
[root@linux ~]# ls -ld /tecmint1/

drwxr-xr-x 2 tecmint1 root 4096 Apr 17 14:46 /tecmint1/
[root@linux ~]# getfacl /tecmint1

getfacl: Removing leading '/' from absolute path names
file: tecmint1
owner: tecmint1
group: root
user::rwx
group::r-x
other::r-x

ขั้นตอนที่ 4: เข้าสู่ระบบด้วย tecmint1 และสร้างไดเรกทอรีในโฟลเดอร์ /tecmint

[tecmint@linux ~]$ su - tecmint1

Last login: Thu Apr 17 14:49:16 IST 2014 on pts/4
[tecmint1@linux ~]$ cd /tecmint1/
[tecmint1@linux tecmint1]$ mkdir example
[tecmint1@linux tecmint1]$ ll

total 4
drwxrwxr-x 2 tecmint1 tecmint1 4096 Apr 17 14:50 example
[tecmint1@linux tecmint1]$ whoami 
tecmint1

ขั้นตอนที่ 5: ตอนนี้ตั้งค่า ACL โดยใช้ 'setfacl' เพื่อให้ 'tecmint1' จะมีสิทธิ์ rwx ทั้งหมด 'tecmint2' จะมีสิทธิ์ อ่าน ในโฟลเดอร์ 'example' เท่านั้น ส่วนโฟลเดอร์อื่นๆ จะไม่มีสิทธิ์

setfacl -m u:tecmint1:rwx example/
setfacl -m u:tecmint2:r-- example/
setfacl -m  other:--- example/
getfacl example/

file: example
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::r-x
mask::rwx
other::---

ขั้นตอนที่ 6: ตอนนี้เข้าสู่ระบบด้วยผู้ใช้อื่น เช่น 'tecmint2' บนเทอร์มินัลอื่น และเปลี่ยนไดเร็กทอรีเป็น '/tecmint1' ตอนนี้ลองดูเนื้อหาโดยใช้คำสั่ง 'ls' จากนั้นลองเปลี่ยนไดเร็กทอรีและดูความแตกต่างด้านล่าง

[tecmint@linux ~]$ su - tecmint2

Last login: Thu Apr 17 15:03:31 IST 2014 on pts/5
[tecmint2@linux ~]$ cd /tecmint1/
[tecmint2@linux tecmint1]$ ls -lR example/
example/:
total 0
[tecmint2@linux tecmint1]$ cd example/

-bash: cd: example/: Permission denied
[tecmint2@linux tecmint1]$ getfacl example/

file: example
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::rwx
mask::rwx
other::---

ขั้นตอนที่ 7: ตอนนี้ให้สิทธิ์ 'execute' แก่ 'tecmint2' ในโฟลเดอร์ 'example' แล้วใช้ 'cd' เพื่อดูเอฟเฟกต์ ตอนนี้ 'tecmint2' มีสิทธิ์ในการดูและเปลี่ยนไดเร็กทอรี แต่ไม่มีสิทธิ์ในการเขียนอะไรเลย

[tecmint1@linux tecmint1]$ setfacl -m u:tecmint2:r-x example/
[tecmint1@linux tecmint1]$ getfacl example/

file: example
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r-x
group::rwx
mask::rwx
other::---
[tecmint@linux ~]$ su - tecmint2

Last login: Thu Apr 17 15:09:49 IST 2014 on pts/5
[tecmint2@linux ~]$ cd /tecmint1/
[tecmint2@linux tecmint1]$ cd example/
[tecmint2@linux example]$ getfacl .
[tecmint2@linux example]$ mkdir test

mkdir: cannot create directory ‘test’: Permission denied
[tecmint2@linux example]$ touch test

touch: cannot touch ‘test’: Permission denied

หมายเหตุ: หลังจากใช้ ACL แล้ว คุณจะเห็นเครื่องหมาย '+' พิเศษสำหรับเอาต์พุต 'ls –l' ตามด้านล่างนี้

[root@linux tecmint1]# ll

total 4
drwxrwx---+ 2 tecmint1 tecmint1 4096 Apr 17 17:01 example

ลิงค์อ้างอิง

เอกสารของ ACL


สงวนลิขสิทธิ์. © Linux-Console.net • 2019-2024