ປອດໄພໄຟລ໌/ໄດເລກະທໍລີທີ່ໃຊ້ ACLs (ລາຍການຄວບຄຸມການເຂົ້າເຖິງ) ໃນ Linux


ໃນຖານະເປັນຜູ້ຄຸ້ມຄອງລະບົບ, ບູລິມະສິດ ທຳ ອິດຂອງພວກເຮົາແມ່ນເພື່ອປົກປ້ອງແລະຮັບປະກັນຂໍ້ມູນຈາກການເຂົ້າເຖິງທີ່ບໍ່ໄດ້ຮັບອະນຸຍາດ. ພວກເຮົາທຸກຄົນຮູ້ກ່ຽວກັບສິດອະນຸຍາດທີ່ພວກເຮົາ ກຳ ນົດໃຊ້ບາງ ຄຳ ສັ່ງ Linux ທີ່ມີປະໂຫຍດເຊັ່ນ: chmod, chown, chgrp …ອື່ນໆ. ຕົວຢ່າງ, ພວກເຮົາບໍ່ສາມາດຕັ້ງຊຸດການອະນຸຍາດທີ່ແຕກຕ່າງກັນ ສຳ ລັບຜູ້ໃຊ້ທີ່ແຕກຕ່າງກັນໃນໄດເລກະທໍລີຫລືເອກະສານດຽວກັນ. ດັ່ງນັ້ນ, ລາຍການຄວບຄຸມການເຂົ້າເຖິງ (ACLs) ໄດ້ຖືກຈັດຕັ້ງປະຕິບັດ.

ໃຫ້ເວົ້າວ່າ, ທ່ານມີຜູ້ໃຊ້ສາມຄົນ, 'tecmint1', 'tecmint2' ແລະ 'tecmint3'. ແຕ່ລະກຸ່ມທີ່ມີກຸ່ມ ທຳ ມະດາເວົ້າວ່າ 'acl'. ຜູ້ໃຊ້ 'tecmint1' ຕ້ອງການໃຫ້ຜູ້ໃຊ້ສາມາດອ່ານແລະເຂົ້າເຖິງເອກະສານທີ່ເປັນເຈົ້າຂອງ 'tecmint1' ແລະບໍ່ມີຜູ້ອື່ນຄວນເຂົ້າເຖິງສິ່ງນັ້ນ.

ACLs (ລາຍການຄວບຄຸມການເຂົ້າເຖິງ) ອະນຸຍາດໃຫ້ພວກເຮົາເຮັດແນວທາງດຽວກັນ. ACLs ເຫຼົ່ານີ້ອະນຸຍາດໃຫ້ພວກເຮົາອະນຸຍາດ ສຳ ລັບຜູ້ໃຊ້, ກຸ່ມແລະກຸ່ມຂອງຜູ້ໃຊ້ໃດ ໜຶ່ງ ທີ່ບໍ່ຢູ່ໃນລາຍຊື່ກຸ່ມຂອງຜູ້ໃຊ້.

ໝາຍ ເຫດ: ອີງຕາມເອກະສານຜະລິດຕະພັນ Redhat, ມັນໃຫ້ການສະ ໜັບ ສະ ໜູນ ACL ສຳ ລັບລະບົບແຟ້ມ ext3 ແລະລະບົບແຟ້ມເອກະສານສົ່ງອອກຂອງ NFS.

ວິທີການກວດສອບ ACL Support ໃນ Linux Systems

ກ່ອນທີ່ຈະກ້າວໄປຂ້າງ ໜ້າ ທ່ານຄວນຈະໄດ້ຮັບການສະ ໜັບ ສະ ໜູນ ACLs ໃນລະບົບ Kernel ແລະລະບົບແຟ້ມເອກະສານ.

ດຳ ເນີນການ ຄຳ ສັ່ງຕໍ່ໄປນີ້ເພື່ອກວດສອບ ACL Support ສຳ ລັບລະບົບແຟ້ມເອກະສານແລະ POSIX_ACL = Y (ຖ້າມີ N ແທນ Y, ມັນ ໝາຍ ຄວາມວ່າ Kernel ບໍ່ສະ ໜັບ ສະ ໜູນ ACL ແລະ ຈຳ ເປັນຕ້ອງມີການສະ ເໜີ ໃໝ່).

 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

ກ່ອນທີ່ຈະເລີ່ມຕົ້ນຫຼີ້ນກັບ ACLs ໃຫ້ແນ່ໃຈວ່າທ່ານໄດ້ຕິດຕັ້ງແພກເກດທີ່ຕ້ອງການແລ້ວ. ຂ້າງລຸ່ມນີ້ແມ່ນຊຸດທີ່ ຈຳ ເປັນທີ່ຕ້ອງການຕິດຕັ້ງໂດຍໃຊ້ yum ຫຼື apt-get.

 yum install nfs4-acl-tools acl libacl		[on RedHat based systems]
 mount  | grep -i root

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

ແຕ່ໃນກໍລະນີຂອງພວກເຮົາມັນບໍ່ສະແດງ acl ໂດຍຄ່າເລີ່ມຕົ້ນ. ດັ່ງນັ້ນ, ຕໍ່ໄປພວກເຮົາມີທາງເລືອກທີ່ຈະແບ່ງປັນການແບ່ງປັນທີ່ຖືກຕິດຕັ້ງອີກເທື່ອ ໜຶ່ງ ໂດຍໃຊ້ທາງເລືອກ acl. ແຕ່ວ່າ, ກ່ອນທີ່ຈະກ້າວໄປຂ້າງ ໜ້າ, ພວກເຮົາມີທາງເລືອກອື່ນອີກເພື່ອໃຫ້ແນ່ໃຈວ່າການແບ່ງປັນຖືກຕິດກັບຕົວເລືອກ acl ຫຼືບໍ່, ເພາະວ່າ ສຳ ລັບລະບົບທີ່ຜ່ານມາມັນອາດຈະຖືກລວມເຂົ້າກັບຕົວເລືອກ mount ແບບເລີ່ມຕົ້ນ.

 tune2fs -l /dev/mapper/fedora-root | grep acl

Default mount options:    user_xattr acl

ໃນຜົນໄດ້ຮັບຂ້າງເທິງ, ທ່ານສາມາດເຫັນວ່າຕົວເລືອກ mount ໃນຕອນຕົ້ນມີການສະຫນັບສະຫນູນ acl. ທາງເລືອກອີກຢ່າງ ໜຶ່ງ ຄືການແບ່ງປັນການແບ່ງປັນດັ່ງຮູບຂ້າງລຸ່ມນີ້.

 mount -o remount,acl /

ຕໍ່ໄປ, ຕື່ມການເຂົ້າຂ້າງລຸ່ມນີ້ໃສ່ '/ etc/fstab' file ເພື່ອໃຫ້ມັນຖາວອນ.

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

ອີກເທື່ອ ໜຶ່ງ, ແບ່ງສ່ວນແບ່ງອອກ.

 mount -o remount  /

ຢູ່ເຊີຟເວີ NFS, ຖ້າລະບົບເອກະສານທີ່ຖືກສົ່ງອອກໂດຍ server NSF ສະ ໜັບ ສະ ໜູນ ACL ແລະ ACL ສາມາດອ່ານໂດຍລູກຄ້າ NFS, ຫຼັງຈາກນັ້ນ, ACLs ຖືກ ນຳ ໃຊ້ໂດຍ System System.

ສຳ ລັບການປິດ ACLs ໃນການແບ່ງປັນ NFS, ທ່ານຕ້ອງເພີ່ມຕົວເລືອກ“ no_acl” ໃນເອກະສານ ‘/ etc/exportfs’ ໃນ NFS Server. ເພື່ອປິດມັນຢູ່ຂ້າງລູກຄ້າຂອງ NSF ອີກເທື່ອ ໜຶ່ງ ໃຫ້ໃຊ້ຕົວເລືອກ“ no_acl” ໃນຊ່ວງເວລາ mount.

ວິທີການຈັດຕັ້ງປະຕິບັດການສະ ໜັບ ສະ ໜູນ ACL ໃນ Linux Systems

ACLs ມີສອງປະເພດ:

<

  • Access ACLs: ການເຂົ້າເຖິງ ACLs ແມ່ນໃຊ້ ສຳ ລັບການອະນຸຍາດໃນເອກະສານຫຼືໄດເລກະທໍລີໃດໆ.
  • ACLs Default: Default ACLs ແມ່ນໃຊ້ ສຳ ລັບການອະນຸຍາດ/ກຳ ນົດລາຍການຄວບຄຸມການເຂົ້າເຖິງໃນໄດເລກະທໍລີໃດ ໜຶ່ງ ເທົ່ານັ້ນ.

    ຄວາມແຕກຕ່າງລະຫວ່າງ Access ACL ແລະ Default ACL:

    <

  • ຄ່າ ACL Default ສາມາດໃຊ້ໃນລະດັບໄດເລກະທໍລີເທົ່ານັ້ນ.
  • ບັນດາໄດເລກະທໍລີຍ່ອຍຫຼືເອກະສານທີ່ສ້າງຂື້ນພາຍໃນໄດເລກະທໍລີນັ້ນຈະເປັນມໍລະດົກ ACLs ຈາກໄດເລກະທໍລີແມ່ຂອງມັນ. ໃນທາງກົງກັນຂ້າມ, ເອກະສານຈະສືບທອດ ACL ແບບປົກກະຕິດັ່ງທີ່ ACLs ເຂົ້າເຖິງ.
  • ພວກເຮົາ ນຳ ໃຊ້“ –d” ສຳ ລັບການ ກຳ ນົດຄ່າ ACLs ແລະຄ່າ Default ACLs ແມ່ນທາງເລືອກ.
  • ເພື່ອ ກຳ ນົດຄ່າ ACLs ໃນຕອນຕົ້ນ ສຳ ລັບເອກະສານຫຼືໄດເລກະທໍລີສະເພາະ, ໃຫ້ໃຊ້ ຄຳ ສັ່ງ 'getfacl'. ໃນຕົວຢ່າງຂ້າງລຸ່ມນີ້, getfacl ຖືກໃຊ້ເພື່ອເອົາຄ່າ ACLs ໄວ້ໃນຕອນຕົ້ນ ສຳ ລັບໂຟນເດີ ‘Music’.

     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-

    ເພື່ອ ກຳ ນົດຄ່າ ACLs ໃນຕອນຕົ້ນ ສຳ ລັບເອກະສານຫຼືໄດເລກະທໍລີສະເພາະ, ໃຫ້ໃຊ້ ຄຳ ສັ່ງ 'setfacl'. ໃນຕົວຢ່າງຂ້າງລຸ່ມນີ້, ຄຳ ສັ່ງ setfacl ຈະຕັ້ງ ACLs ໃໝ່ (ອ່ານແລະເຮັດ) ໃນໂຟນເດີ 'ເພັງ'.

     setfacl -m d:o:rx Music/
     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

    ໃຊ້ ຄຳ ສັ່ງ 'setfacl' ສຳ ລັບຕັ້ງຫຼືດັດແປງເອກະສານຫຼືໄດເລກະທໍລີ. ຍົກຕົວຢ່າງ, ເພື່ອໃຫ້ສິດໃນການອ່ານແລະຂຽນໃຫ້ຜູ້ໃຊ້ 'tecmint1'.

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

    ໃຊ້ ຄຳ ສັ່ງ ‘getfacl’ ສຳ ລັບເບິ່ງ ACL ໃນທຸກເອກະສານຫຼືໄດເລກະທໍລີ. ຍົກຕົວຢ່າງ, ເພື່ອເບິ່ງ ACL ໃນ '/ tecmint1/ຕົວຢ່າງ' ໃຊ້ຢູ່ຂ້າງລຸ່ມ ຄຳ ສັ່ງ.

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

    ສຳ ລັບການຖອດ 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: ສ້າງຜູ້ໃຊ້ສອງຄົນແລະເອົາລະຫັດຜ່ານຈາກທັງສອງ

     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: ສ້າງກຸ່ມແລະຜູ້ ນຳ ໃຊ້ໃຫ້ກຸ່ມຮອງ.

     groupadd acl
     usermod -G acl tecmint1
     usermod -G acl tecmint2

    ຂັ້ນຕອນທີ 3: ສ້າງ Directory/tecmint ແລະປ່ຽນເຈົ້າຂອງເປັນ tecmint1.

     mkdir /tecmint1
     chown tecmint1 /tecmint1/
     ls -ld /tecmint1/
    
    drwxr-xr-x 2 tecmint1 root 4096 Apr 17 14:46 /tecmint1/
     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 ແລະສ້າງ Directory ໃນ/tecmint folder.

    [[email  ~]$ su - tecmint1
    
    Last login: Thu Apr 17 14:49:16 IST 2014 on pts/4
    [[email  ~]$ cd /tecmint1/
    [[email  tecmint1]$ mkdir example
    [[email  tecmint1]$ ll
    
    total 4
    drwxrwxr-x 2 tecmint1 tecmint1 4096 Apr 17 14:50 example
    [[email  tecmint1]$ whoami 
    tecmint1

    ຂັ້ນຕອນທີ 5: ດຽວນີ້ ກຳ ນົດ ACL ໂດຍໃຊ້ 'setfacl', ເພື່ອວ່າ 'tecmint1' ຈະມີສິດອະນຸຍາດຂອງ rwx ທັງ ໝົດ, 'tecmint2' ຈະໄດ້ຮັບການອະນຸຍາດພຽງແຕ່ໃນ 'ຕົວຢ່າງ' ໂຟນເດີແລະອື່ນໆຈະບໍ່ມີສິດ.

    $ 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: ດຽວນີ້ເຂົ້າສູ່ລະບົບກັບຜູ້ໃຊ້ອື່ນ i.e. ‘tecmint2‘ ຢູ່ທີ່ທ່າອື່ນແລະປ່ຽນໄດເລກະທໍລີໄປຫາ ‘/ tecmint1’. ຕອນນີ້ລອງເບິ່ງເນື້ອຫາໂດຍໃຊ້ ຄຳ ສັ່ງ ‘l’ ແລະຫຼັງຈາກນັ້ນພະຍາຍາມປ່ຽນແປງໄດເລກະທໍລີແລະເບິ່ງຄວາມແຕກຕ່າງຄືດັ່ງລຸ່ມນີ້.

    [[email  ~]$ su - tecmint2
    
    Last login: Thu Apr 17 15:03:31 IST 2014 on pts/5
    [[email  ~]$ cd /tecmint1/
    [[email  tecmint1]$ ls -lR example/
    example/:
    total 0
    [[email  tecmint1]$ cd example/
    
    -bash: cd: example/: Permission denied
    
    [[email  tecmint1]$ getfacl example/
    
    # file: example
    # owner: tecmint1
    # group: tecmint1
    user::rwx
    user:tecmint1:rwx
    user:tecmint2:r--
    group::rwx
    mask::rwx
    other::---

    ຂັ້ນຕອນທີ 7: ດຽວນີ້ໃຫ້ອະນຸຍາດໃຫ້ "tecmint2" ໃສ່ "ຕົວຢ່າງ" ໂຟນເດີແລະຫຼັງຈາກນັ້ນໃຫ້ໃຊ້ ຄຳ ສັ່ງ cd ເພື່ອເບິ່ງຜົນ ດຽວນີ້ 'tecmint2' ມີສິດທີ່ຈະເບິ່ງແລະປ່ຽນແປງໄດເລກະທໍລີ, ແຕ່ບໍ່ມີສິດໃນການຂຽນຫຍັງ.

    [[email  tecmint1]$ setfacl -m u:tecmint2:r-x example/
    [[email  tecmint1]$ getfacl example/
    
    # file: example
    # owner: tecmint1
    # group: tecmint1
    user::rwx
    user:tecmint1:rwx
    user:tecmint2:r-x
    group::rwx
    mask::rwx
    other::---
    [[email  ~]$ su - tecmint2
    
    Last login: Thu Apr 17 15:09:49 IST 2014 on pts/5
    [[email  ~]$ cd /tecmint1/
    [[email  tecmint1]$ cd example/
    [[email  example]$ getfacl .
    [[email  example]$ mkdir test
    
    mkdir: cannot create directory ‘test’: Permission denied
    
    [[email  example]$ touch test
    
    touch: cannot touch ‘test’: Permission denied
    

    ໝາຍ ເຫດ: ຫລັງຈາກຈັດຕັ້ງປະຕິບັດ ACL, ທ່ານຈະເຫັນປ້າຍເພີ່ມເຕີມ "+" ສຳ ລັບຜົນຜະລິດ 'ຂ້າງລຸ່ມ'.

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

    ລິ້ງອ້າງອີງ

    ເອກະສານເອກະສານຂອງ ACL