在Linux中使用ACL(访问控制列表)保护文件/目录

作为一个系统管理 ,我们的首要任务将是保护和未经授权的访问安全的数据。 我们都知道我们设置使用一些像CHMOD,CHOWN,chgrp命令 ......等有用的Linux命令然而,这些缺省权限设置有一些限制,有时可能不按我们的需要的工作权限。 例如,我们无法为同一目录或文件上的不同用户设置不同的权限集。 因此, 访问控制列表 (ACL)进行了实施。

Linux访问控制列表

比方说,你有三个用户,“youcl1','youcl2''youcl3”。 每一个有共同组说' 的ACL'。 用户youcl1'想,只有“youcl2”用户可以读取'youcl1'并没有其他人拥有的访问文件应该对任何访问。

ACL S( 访问控制列表 )允许我们做同样的伎俩。 这些ACL允许我们授予权限的用户和不属于在用户的组列表中的任何用户的任一组。

:根据红帽产品文档,它提供ACL支持ext3文件系统和NFS导出的文件系统。

如何检查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之前,请确保已安装所需的软件包。 下面是需要使用yumapt-get的安装所需的软件包。

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

3.检查安装的文件系统的ACL支持

现在,检查已装入的文件系统是否已使用ACL选项装入。 我们可以用'坐骑 '命令,如下图所示检查一样。

[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。

有关NFS共享禁用的ACL,你必须在NFS服务器上“ 的/ etc / exportfs'文件中添加选项”no_acl“。 要禁用它NSF客户端再次使用时安装时间“no_acl”选项。

如何在Linux系统中实现ACL支持

有两种类型的ACL:

  1. 访问的ACL:访问的ACL用于授予的任何文件或目录的权限。
  2. 默认ACL:默认的ACL用于授予/只特定目录设置访问控制列表。

访问ACL和默认ACL之间的区别:

  1. 默认ACL仅可在目录级别使用。
  2. 在该目录中创建的任何子目录或文件将从其父目录继承ACL。 另一方面,文件继承默认ACL作为其访问ACL。
  3. 我们利用“-d”的设置默认的ACL和默认ACL是选配。
设置默认ACL之前

要确定一个特定的文件或目录的默认ACL,使用'getfacl的说明书 “命令。 在下面的例子中, 显示getfacl用于获取一个文件夹“ 音乐 ”的默认ACL。

[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上的文件夹“ 音乐”( 读取执行 )。

[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的'命令。 例如,给读取写入权限用户youcl1“。

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

如何查看ACL

对任何文件或目录的访问控制列表查看使用“getfacl的说明书 ”命令。 例如,要查看下面的命令“/ youcl1 /例如 ”使用访问控制列表。

# getfacl /youcl1/example
# file: youcl1/example/
# owner: youcl1
# group: youcl1
user::rwx
user:youcl1:rwx
user:youcl2:r--
group::rwx
mask::rwx
other::---

如何删除ACL

对于从任意文件/目录去除ACL时,我们用xb的选择,如下所示。

# setfacl -x ACL file/directory  	# remove only specified ACL from file/directory.
# setfacl -b  file/directory   		#removing all ACL from file/direcoty

让我们在下面的场景中实现ACL。

两个用户(youcl1youcl2),名为“ACL”双方有共同的辅助组。 我们将创建由“youcl1”拥有一个目录,并提供读取 ,并在该目录执行权限给用户youcl2“。

第1步:创建两个用户,并从两个删除密码

[root@linux ~]# for user in youcl1 youcl2
> do
> useradd $user
> passwd -d $user
> done
Removing password for user youcl1.
passwd: Success
Removing password for user youcl2.
passwd: Success

第2步:创建一个组和用户的二级集团。

[root@linux ~]# groupadd acl
[root@linux ~]# usermod -G acl youcl1
[root@linux ~]# usermod -G acl youcl2

第3步:创建目录/ youcl并更改所有权youcl1。

[root@linux ~]# mkdir /youcl1
[root@linux ~]# chown youcl1 /youcl1/
[root@linux ~]# ls -ld /youcl1/
drwxr-xr-x 2 youcl1 root 4096 Apr 17 14:46 /youcl1/
[root@linux ~]# getfacl /youcl1
getfacl: Removing leading '/' from absolute path names
# file: youcl1
# owner: youcl1
# group: root
user::rwx
group::r-x
other::r-x

第4步:登录并youcl1并创建/ youcl文件夹的目录。

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

第5步:使用“setfacl的 ',让'youcl1”将所有的rwx权限,“youcl2'只会对” 示例 “文件夹读取权限,其他就没有权限现在设置访问控制列表。

$ setfacl -m u:youcl1:rwx example/
$ setfacl -m u:youcl2:r-- example/
$ setfacl -m  other:--- example/
$ getfacl example/
# file: example
# owner: youcl1
# group: youcl1
user::rwx
user:youcl1:rwx
user:youcl2:r--
group::r-x
mask::rwx
other::---

第6步:现在与其他用户即“youcl2'上的另一端和目录更改为'/ youcl1”登录。 现在尝试查看使用'ls'的命令的内容,然后尝试改变目录,看看下面的区别。

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

第7步:现在给“ 执行 ”权限在“ 示例 ”文件夹“youcl2”,然后用“CD”命令来查看效果。 现在,“youcl2'有权限查看和更改目录,但不具备写任何东西的权限。

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

:实施ACL之后,您将看到“ls -l命令”下面输出额外的“+”号。

[root@linux youcl1]# ll
total 4
drwxrwx---+ 2 youcl1 youcl1 4096 Apr 17 17:01 example

参考链接

ACL的文档

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏