作为系统管理员,我们的首要任务是保护数据的安全,避免被未经授权的人访问。我们都知道使用一些有用的东西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
# 用户组: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(读取和执行)。
[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”。我们将创造归“tecmint1”所有用户的目录都是用户“tecmint2”提供读取和执行目录的权限。
第一步:创建两个用户,清除两个用户的密码。
[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
第二步:为辅助组创建用户组和用户。
[root@linux ~]# groupadd acl[root@linux ~]# usermod -G acl tecmint1
[root@linux ~]# usermod -G acl tecmint2
第三步:创建目录/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
第五步:现在用“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::---
第六步:现在用另一个用户(即“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::---
第七步:现在为“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
参考链接:
ACL说明文档:
https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/ch-acls.html
原文地址:http://www.tecmint.com/secure-files-using-acls-in-linux/