配置 Linux 的访问控制列表(ACL)
使用拥有权限控制的Liunx，工作是一件轻松的任务。它可以定义任何user,group和other的权限。无论是在桌面电脑或者不会有很多用户的虚拟Linux实例，或者当用户不愿意分享他们之间的文件时，这样的工作是很棒的。然而，如果你是在一个大型组织，你运行了NFS或者Samba服务给不同的用户，然后你将会需要灵活的挑选并设置很多复杂的配置和权限去满足你的组织不同的需求。  Linux（和其他Unix等POSIX兼容的操作系统）有一种被称为访问控制列表(ACL)的权限控制方法，它是一种权限分配之外的普遍范式。例如，默认情况下你需要确认3个权限组：owner
ACL 权限 文件系统
171.221.169.130
不错！
微博评论
2014-10-07T21:03:01.000
171.221.169.130
Repost
微博评论
2014-10-07T21:03:01.000
171.221.169.130
liunx？我书读的少，不要骗我[思考]
微博评论
2014-10-07T21:03:01.000
117.41.160.26
@有道云笔记收藏
微博评论
2014-10-07T21:33:00.000
66.249.79.118
m
微博评论
2014-10-08T08:03:00.000
123.126.22.250
不错
soli
2014-10-08T10:39:48.000
180.168.101.226
666
来自上海的 Chrome 58.0|Windows 10 用户
2017-06-20T11:09:55.000
使用拥有权限控制的Liunx，工作是一件轻松的任务。它可以定义任何user,group和other的权限。无论是在桌面电脑或者不会有很多用户的虚拟Linux实例，或者当用户不愿意分享他们之间的文件时，这样的工作是很棒的。然而，如果你是在一个大型组织，你运行了NFS或者Samba服务给不同的用户，然后你将会需要灵活的挑选并设置很多复杂的配置和权限去满足你的组织不同的需求。  Linux（和其他Unix等POSIX兼容的操作系统）有一种被称为访问控制列表(ACL)的权限控制方法，它是一种权限分配之外的普遍范式。例如，默认情况下你需要确认3个权限组：owner
使用拥有权限控制的Liunx，工作是一件轻松的任务。它可以定义任何user,group和other的权限。无论是在桌面电脑或者不会有很多用户的虚拟Linux实例，或者当用户不愿意分享他们之间的文件时，这样的工作是很棒的。然而，如果你是在一个大型组织，你运行了NFS或者Samba服务给不同的用户，然后你将会需要灵活的挑选并设置很多复杂的配置和权限去满足你的组织不同的需求。


![](/data/attachment/album/201410/07/204750yyt9oin8pqpinsge.jpg)


Linux（和其他Unix等POSIX兼容的操作系统）有一种被称为访问控制列表(ACL)的权限控制方法，它是一种权限分配之外的普遍范式。例如，默认情况下你需要确认3个权限组：owner、group和other。而使用ACL，你可以增加权限给其他用户或组别，而不单只是简单的"other"或者是拥有者不存在的组别。可以允许指定的用户A、B、C拥有写权限而不再是让他们整个组拥有写权限。


ACL支持多种Linux文件系统，包括ext2, ext3, ext4, XFS, Btfrs, 等。如果你不确定你的文件系统是否支持ACL，请参考文档。


### 在文件系统使ACL生效


首先，我们需要安装工具来管理ACL。


Ubuntu/Debian 中:



```
$ sudo apt-get install acl

```

CentOS/Fedora/RHEL 中:



```
# yum -y install acl

```

Archlinux 中:



```
# pacman -S acl

```

出于演示目的，我将使用ubuntu server版本，其他版本类似。


安装ACL完成后，需要激活我们磁盘分区的ACL功能，这样我们才能使用它。


首先，我们检查ACL功能是否已经开启。



```
$ mount

```

![](/data/attachment/album/201410/07/204753evycy9cfry8z8cyr.jpg)


你可以注意到，我的root分区中ACL属性已经开启。万一你没有开启，你需要编辑/etc/fstab文件，在你需要开启ACL的分区的选项前增加acl标记。


![](/data/attachment/album/201410/07/204404oa8gsl6d6dgsjpl6.jpg)


现在我们需要重新挂载分区（我喜欢完全重启，因为我不想丢失数据），如果你对其它分区开启ACL，你必须也重新挂载它。



```
$ sudo mount / -o remount

```

干的不错！现在我们已经在我们的系统中开启ACL，让我们开始和它一起工作。


### ACL 范例


基础ACL通过两条命令管理：**setfacl**用于增加或者修改ACL，**getfacl**用于显示分配完的ACL。让我们来做一些测试。


我创建一个目录/shared给一个假设的用户，名叫freeuser



```
$ ls -lh /

```

![](/data/attachment/album/201410/07/204756oxx3y1jh5z6z5j88.jpg)


我想要分享这个目录给其他两个用户test和test2，一个拥有完整权限，另一个只有读权限。


首先，为用户test设置ACL：



```
$ sudo setfacl -m u:test:rwx /shared

```

现在用户test可以随意创建文件夹，文件和访问在/shared目录下的任何地方。


![](/data/attachment/album/201410/07/204758kgdg88i7ugy6eudy.jpg)


现在我们增加只读权限给用户test2:



```
$ sudo setfacl -m u:test2:rx /shared

```

注意test2读取目录需要执行(x)权限


![](/data/attachment/album/201410/07/204759rdxji39gq5p3cdni.jpg)


让我来解释下setfacl命令格式：


* **-m** 表示修改ACL。你可以增加新的，或修改存在的ACL
* **u:** 表示用户。你可以使用 **g** 来设置组权限
* **test** 用户名
* **:rwx** 需要设置的权限。


现在让我向你展示如何读取ACL：



```
$ ls -lh /shared

```

![](/data/attachment/album/201410/07/204445murozr1rhnllt96e.jpg)


你可以注意到，正常权限后多一个+标记。这表示ACL已经设置成功。要具体看一下ACL，我们需要运行：



```
$ sudo getfacl /shared

```

![](/data/attachment/album/201410/07/204801gthgg8yqq8tq9ttc.jpg)


最后，如果你需要移除ACL：



```
$ sudo setfacl -x u:test /shared

```

![](/data/attachment/album/201410/07/204803kdqdq99t4gpqkq94.jpg)


如果你想要立即擦除所有ACL条目：



```
$ sudo setfacl -b /shared

```

![](/data/attachment/album/201410/07/204805n2s88w4418t64zrg.jpg)


最后，在设置了ACL文件或目录工作时，cp和mv命令会改变这些设置。在cp的情况下,需要添加“p”参数来复制ACL设置。如果这不可行，它将会展示一个警告。mv默认移动ACL设置，如果这也不可行，它也会向您展示一个警告。


### 总结


使用ACL让在你想要分享的文件上拥有更多的能力和控制，特别是在NFS/Samba服务。此外，如果你的主管共享主机，这个工具是必备的。




---


via: <http://xmodulo.com/2014/08/configure-access-control-lists-acls-linux.html>


作者：[Christopher Valerio](http://xmodulo.com/author/valerio) 译者：[VicYu](http://www.vicyu.net) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译，[Linux中国](http://linux.cn/) 荣誉推出

