溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在Linux中使用訪問控制列表保護文件或目錄

發(fā)布時間:2021-07-27 22:29:11 來源:億速云 閱讀:286 作者:chen 欄目:數據安全

本篇內容主要講解“如何在Linux中使用訪問控制列表保護文件或目錄”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何在Linux中使用訪問控制列表保護文件或目錄”吧!

作為系統(tǒng)管理員,我們的首要任務就是切實保護數據的安全,以免被未授權的人訪問。我們都很清楚使用一些大有幫助的Linux命令設置的權限,比如chmod、chown和chgrp等命令,可是這些默認的權限集有一定的局限性,有時可能還滿足不了我們的要求。比如說,我們就無法針對同一目錄或文件為不同用戶設置不同的權限集。因而,訪問控制列表(ACL)應運而生。

Linux訪問控制列表

比如說,你有三個用戶,分別是“tecmint1”、“tecmint2”和“tecmint3”。每個用戶都有一個共同的用戶組,比如說“acl”。用戶“tecmint1”希望,只有“tecmint2”用戶才能讀取和訪問歸“tecmint1”用戶所有的文件,其他人都無權訪問該文件。

訪問控制列表(ACL)讓我們可以做到同樣這點。這些ACL讓我們可以為某個用戶、用戶組或不在用戶組列表中的任何用戶的任何組授予權限。

注意:按照紅帽產品說明文檔,它為ext3文件系統(tǒng)和NFS導出文件系統(tǒng)提供了ACL支持。

如何檢查Linux系統(tǒng)中的ACL支持?

在繼續(xù)下一步之前,你應確保ACL在現有的內核和已掛載的文件系統(tǒng)上得到支持。

1. 檢查內核是否支持ACL。

運行下面這個命令,檢查是否為文件系統(tǒng)提供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. 檢查已掛載的文件系統(tǒng)是否支持ACL。

現在,檢查已掛載的文件系統(tǒng)是否使用ACL選項掛載的。我們可以使用“mount”命令來進行同樣的檢查,如下所示。

[root@linux ~]# mount  | grep -i root
/dev/mapper/fedora-root on / type ext4 (rw,relatime,data=ordered)

但在本例中,它在默認情況下沒有顯示acl。所以,接下來我們可以再次使用acl選項,重新掛載已掛載的分區(qū)。但在繼續(xù)下一步之前,我們還有另一個選項:確保有沒有使用acl選項來掛載,因為對較新系統(tǒng)而言,它可能整合了默認的掛載選項。

[root@linux ~]# tune2fs -l /dev/mapper/fedora-root | grep acl
Default mount options:    user_xattr acl

在上面的輸出結果中,你能看到默認的掛載選項已經支持acl。另一個選項是,重新掛載分區(qū),如下所示。

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

下一步,將下面這一項條目添加到/etc/fstab文件,讓其具有***性。

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

再次重新掛載分區(qū)。

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

4. 針對NFS服務器。

在NFS服務器上,如果NFS服務器導出的文件系統(tǒng)支持ACL,ACL又可以被NFS客戶機讀取,那么客戶機系統(tǒng)就能使用ACL。

想禁用NFS共享區(qū)上的ACL,你就得在NFS服務器的“/etc/exportfs”文件中添加選項“no_acl”。想在NSF客戶端禁用它,那么在掛載期間再次使用“no_acl“選項。

如何在Linux系統(tǒng)中實現ACL支持?

ACL有兩種類型:

?訪問ACL:訪問ACL用于授予針對任何文件或目錄的權限。

?默認ACL:默認ACL用于授予/設置只針對特定目錄的訪問控制列表。

訪問ACL與默認ACL之間的區(qū)別如下:

?默認ACL只能用在目錄級別。

?在該目錄里面創(chuàng)建的任何子目錄或文件將從父目錄那里繼承ACL。另一方面,文件繼承默認ACL作為其訪問ACL。

?我們使用“–d”來設置默認ACL,默認ACL是可選的。

在設置默認ACL之前

想為特定的文件或目錄設置默認ACL,可以使用“getfacl”命令。在下面這個例子中,getfacl用于為文件夾“Music”獲得默認ACL。

[root@linux ~]# getfacl Music/
# 文件:Music/
# 所有者:root
# 用戶組:root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:other::rw-

設置默認ACL之后

想為特定的文件或目錄設置默認ACL,使用“setfacl”命令。在下面這個例子中,setfacl命令將為文件夾“Music”設置新的ACL(讀取和執(zhí)行)。

[root@linux ~]# setfacl -m d:o:rx Music/
[root@linux ~]# getfacl Music/
# 文件:Music/
# 所有者:root
# 用戶組: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。比如說,想查看“/tecmint1/example”上的ACL,使用下面這個命令。

# getfacl /tecmint1/example

# 文件:tecmint1/example/
# 所有者:tecmint1
# 用戶組:tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::rwx
mask::rwx
other::---

如何刪除ACL

想刪除任何文件/目錄的ACL,我們可以使用x和b這兩個選項,如下所示。

# setfacl -x ACL file/directory # 只刪除文件/目錄的指定ACL
# setfacl -b file/directory # 刪除文件/目錄的所有ACL

不妨將ACL實現到下列場景。

兩個用戶(tecmint1和tecmint2)都有共同的輔助組,名為“acl”。我們將創(chuàng)建歸“tecmint1”用戶所有的一個目錄,并為用戶“tecmint2”提供針對該目錄的讀取和執(zhí)行權限。

第1步:創(chuàng)建兩個用戶,并清除兩個用戶的密碼。

[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步:為輔助組創(chuàng)建用戶組和用戶。

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

第3步:創(chuàng)建目錄/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
# 文件:tecmint1
# 所有者:tecmint1
# 用戶組:root
user::rwx
group::r-x
other::r-x

第4步:以tecmint1身份登錄,在/tecmint文件夾下創(chuàng)建一個目錄。

[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(讀取、寫入和執(zhí)行)權限,“tecmint2”用戶只有“example”文件夾上的讀取權限,其他用戶沒有任何權限。

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

# 文件:example
# 所有者:tecmint1
# 用戶組:tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::r-x
mask::rwx
other::---

第6步:現在以另一用戶(即“tecmint2”)的身份在另一個終端上登錄,將目錄改為“/tecmint1”?,F在試著使用“l(fā)s”命令,查看內容,然后試著更改目錄,看看有什么區(qū)別,如下所示。

[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/
# 文件:example
# 所有者:tecmint1
# 用戶組:tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::rwx
mask::rwx
other::---

第7步:現在為“tecmint2”用戶授予針對“example”文件夾的“執(zhí)行”權限,然后使用“cd”命令看看有什么效果?,F在,“tecmint2”用戶擁有查看和更改目錄的權限,但沒有寫入任何內容的權限。

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

# 文件:example
# 所有者:tecmint1
# 用戶組: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后,你會看到“l(fā)s –l”輸出有一個額外的“+”符號,如下所示。

[root@linux tecmint1]# ll

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

到此,相信大家對“如何在Linux中使用訪問控制列表保護文件或目錄”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI