千家信息网

如何在Linux中使用访问控制列表保护文件或目录

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容主要讲解"如何在Linux中使用访问控制列表保护文件或目录",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"如何在Linux中使用访问控制列表保护文件
千家信息网最后更新 2026年11月01日如何在Linux中使用访问控制列表保护文件或目录

本篇内容主要讲解"如何在Linux中使用访问控制列表保护文件或目录",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"如何在Linux中使用访问控制列表保护文件或目录"吧!

作为系统管理员,我们的首要任务就是切实保护数据的安全,以免被未授权的人访问。我们都很清楚使用一些大有帮助的Linux命令设置的权限,比如chmod、chown和chgrp等命令,可是这些默认的权限集有一定的局限性,有时可能还满足不了我们的要求。比如说,我们就无法针对同一目录或文件为不同用户设置不同的权限集。因而,访问控制列表(ACL)应运而生。

Linux访问控制列表

比如说,你有三个用户,分别是"tecmint1"、"tecmint2"和"tecmint3"。每个用户都有一个共同的用户组,比如说"acl"。用户"tecmint1"希望,只有"tecmint2"用户才能读取和访问归"tecmint1"用户所有的文件,其他人都无权访问该文件。

访问控制列表(ACL)让我们可以做到同样这点。这些ACL让我们可以为某个用户、用户组或不在用户组列表中的任何用户的任何组授予权限。

注意:按照红帽产品说明文档,它为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选项,重新挂载已挂载的分区。但在继续下一步之前,我们还有另一个选项:确保有没有使用acl选项来挂载,因为对较新系统而言,它可能整合了默认的挂载选项。

[root@linux ~]# tune2fs -l /dev/mapper/fedora-root | grep aclDefault 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支持?

ACL有两种类型:

◦访问ACL:访问ACL用于授予针对任何文件或目录的权限。

◦默认ACL:默认ACL用于授予/设置只针对特定目录的访问控制列表。

访问ACL与默认ACL之间的区别如下:

◦默认ACL只能用在目录级别。

◦在该目录里面创建的任何子目录或文件将从父目录那里继承ACL。另一方面,文件继承默认ACL作为其访问ACL。

◦我们使用"–d"来设置默认ACL,默认ACL是可选的。

在设置默认ACL之前

想为特定的文件或目录设置默认ACL,可以使用"getfacl"命令。在下面这个例子中,getfacl用于为文件夹"Music"获得默认ACL。

[root@linux ~]# getfacl Music/# 文件:Music/# 所有者:root# 用户组:rootuser::rwxgroup::r-xother::r-xdefault:user::rwxdefault:group::r-xdefault:other::rw-

设置默认ACL之后

想为特定的文件或目录设置默认ACL,使用"setfacl"命令。在下面这个例子中,setfacl命令将为文件夹"Music"设置新的ACL(读取和执行)。

[root@linux ~]# setfacl -m d:o:rx Music/[root@linux ~]# getfacl Music/# 文件:Music/# 所有者:root# 用户组:rootuser::rwxgroup::r-xother::r-xdefault:user::rwxdefault:group::r-xdefault: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"。我们将创建归"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
# 文件:tecmint1
# 所有者:tecmint1
# 用户组: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/
# 文件:example
# 所有者:tecmint1
# 用户组: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/
# 文件:example
# 所有者:tecmint1
# 用户组: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/
# 文件: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后,你会看到"ls –l"输出有一个额外的"+"符号,如下所示。


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

到此,相信大家对"如何在Linux中使用访问控制列表保护文件或目录"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

文件 用户 目录 命令 权限 系统 用户组 支持 控制 所有者 检查 文件夹 比如说 保护 两个 内容 服务器 服务 内核 再次 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网与科技 互联网科技官网 互联网科技财经 奇酷互联网科技公司 华中科技大学互联网 未来的互联网科技 南京欣网互联网科技 互联网女皇 腾讯科技 狮子座互联网科技培训 互联网金融科技委员会 阿里巴巴算科技企业还是互联网 随着互联网科技发展 岳阳华臻互联网科技有限公司 深圳艾果互联网通讯科技 群盈汇互联网科技有限公司 为客找房互联网科技公司怎么样 滨湖区互联网智能科技产品有哪些 35岁以上互联网科技行业 九思连强互联网电子科技有限公司 云鲸互联网络科技有限公司 互联网络科技有限公司 北京互联网科技公司 佰商互联网科技有限公司 隆华科技工业互联网 互联网校园科技培训 岳阳华臻互联网科技有限公司 链环科技传统企业怎么转型互联网 中国互联网十大科技股排名 互联网科技大赛获奖感言 上海同邻互联网科技有限公司规模
0