TranslateProject/published/201410/20140818 How to configure Access Control Lists (ACLs) on Linux.md

121 lines
4.9 KiB
Markdown
Raw Normal View History

配置 Linux 的访问控制列表(ACL)
2014-08-18 16:29:31 +08:00
================================================================================
使用拥有权限控制的Liunx工作是一件轻松的任务。它可以定义任何user,group和other的权限。无论是在桌面电脑或者不会有很多用户的虚拟Linux实例或者当用户不愿意分享他们之间的文件时这样的工作是很棒的。然而如果你是在一个大型组织你运行了NFS或者Samba服务给不同的用户然后你将会需要灵活的挑选并设置很多复杂的配置和权限去满足你的组织不同的需求。
2014-08-18 16:29:31 +08:00
Linux和其他Unix等POSIX兼容的操作系统有一种被称为访问控制列表(ACL)的权限控制方法它是一种权限分配之外的普遍范式。例如默认情况下你需要确认3个权限组owner、group和other。而使用ACL你可以增加权限给其他用户或组别而不单只是简单的"other"或者是拥有者不存在的组别。可以允许指定的用户A、B、C拥有写权限而不再是让他们整个组拥有写权限。
2014-08-18 16:29:31 +08:00
2014-08-28 19:54:30 +08:00
ACL支持多种Linux文件系统包括ext2, ext3, ext4, XFS, Btfrs, 等。如果你不确定你的文件系统是否支持ACL请参考文档。
2014-08-18 16:29:31 +08:00
2014-08-28 19:54:30 +08:00
### 在文件系统使ACL生效 ###
2014-08-18 16:29:31 +08:00
2014-08-28 19:54:30 +08:00
首先我们需要安装工具来管理ACL。
2014-08-18 16:29:31 +08:00
2014-08-28 19:54:30 +08:00
Ubuntu/Debian 中:
2014-08-18 16:29:31 +08:00
$ sudo apt-get install acl
2014-08-28 19:54:30 +08:00
CentOS/Fedora/RHEL 中:
2014-08-18 16:29:31 +08:00
# yum -y install acl
2014-08-28 19:54:30 +08:00
Archlinux 中:
2014-08-18 16:29:31 +08:00
# pacman -S acl
2014-08-28 19:54:30 +08:00
出于演示目的我将使用ubuntu server版本其他版本类似。
2014-08-18 16:29:31 +08:00
2014-08-28 19:54:30 +08:00
安装ACL完成后需要激活我们磁盘分区的ACL功能这样我们才能使用它。
2014-08-18 16:29:31 +08:00
2014-08-28 19:54:30 +08:00
首先我们检查ACL功能是否已经开启。
2014-08-18 16:29:31 +08:00
$ mount
![](https://farm4.staticflickr.com/3859/14768099340_eab7b53e28_z.jpg)
你可以注意到我的root分区中ACL属性已经开启。万一你没有开启你需要编辑/etc/fstab文件在你需要开启ACL的分区的选项前增加acl标记。
2014-08-18 16:29:31 +08:00
![](https://farm6.staticflickr.com/5566/14931771056_b48d5daae2_z.jpg)
现在我们需要重新挂载分区我喜欢完全重启因为我不想丢失数据如果你对其它分区开启ACL你必须也重新挂载它。
2014-08-18 16:29:31 +08:00
$ sudo mount / -o remount
干的不错现在我们已经在我们的系统中开启ACL让我们开始和它一起工作。
2014-08-18 16:29:31 +08:00
2014-08-28 19:54:30 +08:00
### ACL 范例 ###
2014-08-18 16:29:31 +08:00
2014-08-28 19:54:30 +08:00
基础ACL通过两条命令管理**setfacl**用于增加或者修改ACL**getfacl**用于显示分配完的ACL。让我们来做一些测试。
2014-08-18 16:29:31 +08:00
2014-08-28 19:54:30 +08:00
我创建一个目录/shared给一个假设的用户名叫freeuser
2014-08-18 16:29:31 +08:00
$ ls -lh /
![](https://farm4.staticflickr.com/3869/14954774565_49456360be_z.jpg)
2014-08-28 19:54:30 +08:00
我想要分享这个目录给其他两个用户test和test2一个拥有完整权限另一个只有读权限。
2014-08-18 16:29:31 +08:00
2014-08-28 19:54:30 +08:00
首先为用户test设置ACL
2014-08-18 16:29:31 +08:00
$ sudo setfacl -m u:test:rwx /shared
2014-08-28 19:54:30 +08:00
现在用户test可以随意创建文件夹文件和访问在/shared目录下的任何地方。
2014-08-18 16:29:31 +08:00
![](https://farm4.staticflickr.com/3924/14768099439_44780ff03b_z.jpg)
2014-08-28 19:54:30 +08:00
现在我们增加只读权限给用户test2:
2014-08-18 16:29:31 +08:00
$ sudo setfacl -m u:test2:rx /shared
2014-08-28 19:54:30 +08:00
注意test2读取目录需要执行(x)权限
2014-08-18 16:29:31 +08:00
![](https://farm4.staticflickr.com/3918/14768215947_4cd86104d3_z.jpg)
2014-08-28 19:54:30 +08:00
让我来解释下setfacl命令格式
2014-08-18 16:29:31 +08:00
2014-08-28 19:54:30 +08:00
- **-m** 表示修改ACL。你可以增加新的或修改存在的ACL
- **u:** 表示用户。你可以使用 **g** 来设置组权限
- **test** 用户名
- **:rwx** 需要设置的权限。
2014-08-18 16:29:31 +08:00
2014-08-28 19:54:30 +08:00
现在让我向你展示如何读取ACL
2014-08-18 16:29:31 +08:00
$ ls -lh /shared
![](https://farm6.staticflickr.com/5591/14768099389_9a7f3a6bf2_z.jpg)
你可以注意到,正常权限后多一个+标记。这表示ACL已经设置成功。要具体看一下ACL我们需要运行
2014-08-18 16:29:31 +08:00
$ sudo getfacl /shared
![](https://farm4.staticflickr.com/3839/14768099289_81bd9d21a4_z.jpg)
2014-08-28 19:54:30 +08:00
最后如果你需要移除ACL
2014-08-18 16:29:31 +08:00
$ sudo setfacl -x u:test /shared
![](https://farm4.staticflickr.com/3910/14768215837_d5306fe5bf_z.jpg)
2014-08-28 19:54:30 +08:00
如果你想要立即擦除所有ACL条目
2014-08-18 16:29:31 +08:00
$ sudo setfacl -b /shared
![](https://farm4.staticflickr.com/3863/14768099130_a7d175f067_z.jpg)
最后在设置了ACL文件或目录工作时cp和mv命令会改变这些设置。在cp的情况下,需要添加“p”参数来复制ACL设置。如果这不可行它将会展示一个警告。mv默认移动ACL设置如果这也不可行它也会向您展示一个警告。
2014-08-18 16:29:31 +08:00
2014-08-28 19:54:30 +08:00
### 总结 ###
2014-08-18 16:29:31 +08:00
使用ACL让在你想要分享的文件上拥有更多的能力和控制特别是在NFS/Samba服务。此外如果你的主管共享主机这个工具是必备的。
2014-08-18 16:29:31 +08:00
--------------------------------------------------------------------------------
via: http://xmodulo.com/2014/08/configure-access-control-lists-acls-linux.html
作者:[Christopher Valerio][a]
2014-08-28 19:54:30 +08:00
译者:[VicYu](http://www.vicyu.net)
校对:[wxy](https://github.com/wxy)
2014-08-18 16:29:31 +08:00
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创翻译,[Linux中国](http://linux.cn/) 荣誉推出
[a]:http://xmodulo.com/author/valerio