作為一名系統管理員,我們的首要任務將是保護和確保數據不受未經授權的訪問。我們都知道使用一些有用的Linux命令來設置權限,比如chmod,chown,chgrp等。然而,這些默認權限設置有一些限制,有時可能無法滿足我們的需求。例如,我們無法在同一目錄或文件上為不同用戶設置不同的權限設置。因此,實施了存取控制列表(ACLs)。

假設你有三個用戶,’tecmint1’,’tecmint2’和’tecmint3’。每個用戶都有一個共同的組,比如’acl’。用戶’tecmint1’希望只有用戶’tecmint2’可以讀取並存取由’tecmint1’所有的文件,其他人都不能有任何訪問權限。
ACL(存取控制列表)允許我們執行相同的設置。這些ACL允許我們為用戶、組和不在用戶群組列表中的任何用戶組設置權限。
注意:根據Redhat產品文檔,它為ext3文件系統和NFS導出的文件系統提供ACL支持。
如何檢查Linux系統中的ACL支持
在繼續之前,您應該確認當前內核和安裝的文件系統支持ACL。
1. 檢查內核是否支持ACL。
運行以下命令以檢查文件系統的ACL支持和POSIX_ACL=Y選項(如果有N而不是Y,則表示內核不支持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選項,因為對於最近的系統,它可能已與默認掛載選項集成。
[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伺服器上,如果由NFS伺服器導出的文件系統支持ACL並且ACL可以被NFS客戶端讀取,則客戶端系統將使用ACL。
要禁用NFS共享上的ACL,您必须在NFS服务器的“/etc/exportfs”文件中添加选项“no_acl”。要在NSF客户端端再次禁用它,请在挂载时使用“no_acl”选项。
如何在Linux系统中实现ACL支持
有两种ACLs:
- 访问ACLs:访问ACLs用于授予任何文件或目录的权限。
- 默认ACLs:默认ACLs用于仅在特定目录上授予/设置访问控制列表。
访问ACL和默认ACL之间的区别:
- 默认ACL只能用于目录级别。
- 在该目录中创建的任何子目录或文件将继承其父目录的ACLs。另一方面,文件将继承默认ACLs作为其访问ACLs。
- 我们使用“-d”来设置默认ACLs,而默认ACLs是可选的。
设置默认ACLs之前
要确定特定文件或目录的默认ACLs,请使用“getfacl”命令。在下面的示例中,“getfacl”用于获取文件夹“Music”的默认ACLs。
[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-
设置默认ACLs后
要为特定文件或目录设置默认ACLs,请使用“setfacl”命令。在下面的示例中,“setfacl”命令将在文件夹“Music”上设置新的ACLs(读取和执行)。
[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
如何設定新的 ACLs
使用“setfacl”命令對任何文件或目錄進行設置或修改。例如,給用戶“tecmint1”設置讀取和寫入權限。
# setfacl -m u:tecmint1:rw /tecmint1/example
如何查看 ACLs
使用“getfacl”命令查看任何文件或目錄上的 ACL。例如,查看“/tecmint1/example”的 ACL,請使用以下命令。
# getfacl /tecmint1/example # file: tecmint1/example/ # owner: tecmint1 # group: tecmint1 user::rwx user:tecmint1:rwx user:tecmint2:r-- group::rwx mask::rwx other::---
如何刪除 ACLs
要從任何文件/目錄中刪除 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:現在使用『setfacl』設置ACL,以便『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:現在給予『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
參考鏈接
Source:
https://www.tecmint.com/secure-files-using-acls-in-linux/