说到文件和目录权限,你的第一反应可能是“所有者/组/其他”权限。这些权限可以通过chmod和chown等命令进行修改。文件和目录有一个所有者(文件的所有者)、一个组(它们所属的组)和其他构成一个集合的权限。但是,这些权限集都有其局限性,不可能针对不同的用户设置不同的权限。Linux对文件和目录具有以下默认权限。File->644->-rw-r-r-(owner有读写权限,组成员有只读权限,其他只有读权限)directory->755->drwxr-xr-x(owner有读,写和执行权限,组成员有读取和执行权限,其他人也有读取和执行权限)例如:默认情况下,所有者可以访问和编辑自己主目录下的文件,也可以访问相关的同级文件,但他们不能'不要修改那些文件,因为组成员没有写权限,让组成员有写权限是不明智的。出于同样的原因,他/她不能修改其他人的文件。但是,在某些情况下,多个用户想要修改同一个文件,那么怎么办呢?假设有一个用户叫magi,他要修改httpd.conf文件怎么办?这个文件是root用户的,怎么授权呢?为了解决这种情况,访问控制列表(ACL)诞生了。什么是ACL?ACL全称AccessControlList(ACL),它为文件系统提供了一种额外的、更灵活的权限机制。它旨在补充UNIX文件权限机制。ACL允许您授予任何特定用户/组访问特定资源的权限。setfacl和getfacl命令将帮助您轻松管理ACL。什么是setfacl?setfacl用于设置文件和目录的ACL。什么getfacl?getfacl-获取文件的ACL。对于每个文件,getfacl显示文件名、所有者、组和ACL。如果目录有默认的ACL,getfacl也会显示默认的ACL。如何确认ACL是否开启?运行tune2fs命令以检查ACL是否已启用。#tune2fs-l/dev/sdb1|grepoptionsDefaultmountoptions:(none)上面的输出清楚地表明/dev/sdb1分区没有启用ACL。如果结果中没有列出acl,则需要在挂载选项中添加acl。为了使其生效,将/etc/fstab中的/app行修改为如下所示:#more/etc/fstabUUID=f304277d-1063-40a2-b9dc-8bcf30466a03/ext4defaults11/dev/sdb1/appext4defaults,acl11或者,您也可以使用以下命令将其添加到文件系统的超级块:#tune2fs-o+acl/dev/sdb1现在,通过运行以下命令动态修改选项:#mount-oremount,acl/app再次运行tune2fs命令,查看选项中是否有acl:#tune2fs-l/dev/sdb1|grepoptionsDefaultmountoptions:acl那么,现在/dev/sdb1分区中有一个ACL选项。如何查看默认ACL值要查看文件和目录的默认ACL值,可以使用getfacl命令后接文件路径或目录路径。请注意,当您在非ACL文件/目录上运行getfacl时,不会显示额外的用户和掩码参数值。#getfacl/etc/apache2/apache2.conf#file:etc/apache2/apache2.conf#owner:root#group:rootuser::rw-group::r--other::r--下面如何设置ACLforafile以face格式运行setfacl命令,为指定文件设置ACL。在下面的示例中,我们将授予magi用户rwx对/etc/apache2/apache2.conf文件的权限。#setfacl-mu:magi:rwx/etc/apache2/apache2.conf仔细分析:setfacl:命令-m:修改当前文件的ACLu:指定用户magi:用户名rwx:需要设置的权限/etc/apache2/apache2.conf:filename再次检查新的ACL值:#getfacl/etc/apache2/apache2.conf#file:etc/apache2/apache2.conf#owner:root#group:rootuser::rw-user:magi:rwxgroup::r--mask::rwxother::r--注意:如果在文件或目录权限后发现加号(+),则表示设置了ACL。#ls-lh/etc/apache2/apache2.conf-rw-rwxr--+1rootroot7.1KSep1914:58/etc/apache2/apache2.conf如何为目录设置ACL在目录中运行setfacl命令以下格式可以递归设置指定目录的ACL。在下面的示例中,我们将在/etc/apache2/sites-available/目录中授予magi用户rwx权限。#setfacl-Rmu:magi:rwx/etc/apache2/sites-available/其中:-R:递归到子目录以再次检查新的ACL值。#getfacl/etc/apache2/sites-available/#file:etc/apache2/sites-available/#owner:root#group:rootuser::rwxuser:magi:rwxgroup::r-xmask::rwxother::r-xnow/etc/apache2/sites-available/中的文件和目录设置了ACL。#ls-lh/etc/apache2/sites-available/total20K-rw-rwxr--+1rootroot1.4KSep1914:56000-default.conf-rw-rwxr--+1rootroot6.2KSep1914:56default-ssl.conf-rw-rwxr--+1rootroot1.4KDec802:57mywebpage.com.conf-rw-rwxr--+1rootroot1.4KDec719:07测试页。com.conf如何为组设置ACL按照以下格式对指定文件运行setfacl命令。在下面的示例中,我们将/etc/apache2/apache2.conf文件的rwx权限授予appdev组。#setfacl-mg:appdev:rwx/etc/apache2/apache2.conf其中:g:表示一个组授权多个用户和组,只需要用逗号分隔即可,如下图。#setfacl-mu:magi:rwx,g:appdev:rwx/etc/apache2/apache2.conf如何删除ACL按以下格式运行setfacl命令将删除指定用户的文件的ACL。这只会删除用户权限并使掩码保持只读状态。#setfacl-xu:magi/etc/apache2/apache2.conf其中:-x:从文件的ACL中删除再次检查ACL值。在下面的输出中,我们可以看到读取了mask的值。#getfacl/etc/apache2/apache2.conf#文件:etc/apache2/apache2.conf#所有者:root#组:rootuser::rw-group::r--mask::r--other::r--使用-b删除文件中的所有ACL。#setfacl-b/etc/apache2/apache2.conf其中:-b:删除所有ACL项再查看删除的ACL值,会发现什么都没有了,包括掩码值。#getfacl/etc/apache2/apache2.conf#file:etc/apache2/apache2.conf#owner:root#group:rootuser::rw-group::r--other::r--如何备份和恢复ACL下面的命令来备份和恢复ACL的值。要进行备份,需要进入相应的目录并进行备份(假设我们要备份sites-available目录中的ACL值)。#cd/etc/apache2/sites-available/#getfacl-R*>如果acl_backup_for_folder已恢复,请运行以下命令:#setfacl--restore=/etc/apache2/sites-available/acl_backup_for_folder
