系统管理指南:安全性服务

使用 ACL 保护文件(任务列表)

以下任务列表说明列出文件的 ACL、更改 ACL,以及将 ACL 复制到另一个文件的过程。

任务 

参考 

确定文件是否具有 ACL 

如何检查文件是否具有 ACL

将 ACL 添加到文件 

如何将 ACL 项添加到文件

复制 ACL 

如何复制 ACL

修改 ACL 

如何更改文件的 ACL 项

删除文件的 ACL 

如何删除文件的 ACL 项

显示文件的 ACL 

如何显示文件的 ACL 项

Procedure如何检查文件是否具有 ACL

    检查文件是否具有 ACL。


    % ls -l filename
    

    其中,filename 指定文件或目录。

    在输出中,模式字段右侧的加号 (+) 表示该文件具有 ACL。


    注 –

    除非已添加了用于扩展 UNIX 文件权限的 ACL 项,否则会将文件视为具有“琐碎” ACL,并且不会显示加号 (+)。



示例 6–6 检查文件是否具有 ACL

在以下示例中,ch1.sgm 文件具有 ACL。ACL 由模式字段右侧的加号 (+) 表示。


% ls -l ch1.sgm

-rwxr-----+  1 stacey   techpubs      167 Nov 11 11:13 ch1.sgm

Procedure如何将 ACL 项添加到文件

  1. 使用 setfacl 命令设置文件的 ACL。


    % setfacl -s user::perms,group::perms,other:perms,mask:perms,acl-entry-list filename ...
    
    -s

    设置文件的 ACL。如果文件已具有 ACL,则会替换该 ACL。此选项要求至少有 user::group::other:: 项。

    user::perms

    指定文件属主权限。

    group::perms

    指定组属主权限。

    other:perms

    为文件属主或组成员之外的用户指定权限。

    mask:perms

    指定 ACL 掩码的权限。掩码表示允许用户(属主除外)和组拥有的最大权限。

    acl-entry-list

    指定文件或目录中要为特定用户和组设置的一个或多个 ACL 项的列表。也可以设置目录的缺省 ACL 项。表 6–7表 6–8 显示了有效的 ACL 项。

    filename ...

    指定要对其设置 ACL 的一个或多个文件或目录。多个 filename 由空格分隔。


    注意 – 注意 –

    如果该文件已存在 ACL,则 -s 选项将使用新的 ACL 替换整个 ACL。


    有关更多信息,请参见 setfacl(1) 手册页。

  2. 检验是否已对文件设置了 ACL 项。


    % getfacl filename
    

    有关更多信息,请参见如何检查文件是否具有 ACL


示例 6–7 设置文件的 ACL

在以下示例中,会在 ch1.sgm 文件中将文件属主权限设置为读写、将文件组权限设置为只读,并将其他用户权限设置为无。此外,还在文件中为用户 anusha 指定读写权限。将 ACL 掩码权限设置为读写,这意味着任何用户或组都没有执行权限。


% setfacl -s user::rw-,group::r--,other:---,mask:rw-,user:anusha:rw- ch1.sgm

% ls -l

total 124

-rw-r-----+  1 stacey  techpubs   34816 Nov 11 14:16 ch1.sgm

-rw-r--r--   1 stacey  techpubs   20167 Nov 11 14:16 ch2.sgm

-rw-r--r--   1 stacey  techpubs    8192 Nov 11 14:16 notes

% getfacl ch1.sgm

# file: ch1.sgm

# owner: stacey

# group: techpubs

user::rw-

user:anusha:rw-    #effective:rw-

group::r--         #effective:r--

mask:rw-

other:---

在以下示例中,会将文件属主权限设置为读写和执行,将文件组权限设置为只读,并将其他用户权限设置为无。此外,还会在 ch2.sgm 文件中将 ACL 掩码权限设置为读。最后,将为用户 anusha 指定读写权限。但是,由于 ACL 掩码的原因,anusha 的权限为只读。


% setfacl -s u::7,g::4,o:0,m:4,u:anusha:7 ch2.sgm

% getfacl ch2.sgm

# file: ch2.sgm

# owner: stacey

# group: techpubs

user::rwx

user:anusha:rwx         #effective:r--

group::r--              #effective:r--

mask:r--

other:---

Procedure如何复制 ACL

    通过重定向 getfacl 输出,将文件的 ACL 复制到另一个文件。


    % getfacl filename1 | setfacl -f - filename2 
    
    filename1

    指定将从其中复制 ACL 的文件。

    filename2

    指定要对其设置所复制的 ACL 的文件。


示例 6–8 复制 ACL

在以下示例中,会将 ch2.sgm 中的 ACL 复制到 ch3.sgm


% getfacl ch2.sgm | setfacl -f - ch3.sgm

Procedure如何更改文件的 ACL 项

  1. 使用 setfacl 命令修改文件的 ACL 项。


    % setfacl -m acl-entry-list filename ... 
    
    -m

    修改现有的 ACL 项。

    acl-entry-list

    指定文件或目录中要修改的一个或多个 ACL 项的列表。也可以修改目录的缺省 ACL 项。表 6–7表 6–8 显示了有效的 ACL 项。

    filename ...

    指定一个或多个文件或目录,由空格分隔。

  2. 检验是否已修改文件的 ACL 项。


    % getfacl filename
    

示例 6–9 修改文件的 ACL 项

在以下示例中,将用户 anusha 的权限修改为读写。


% setfacl -m user:anusha:6 ch3.sgm

% getfacl ch3.sgm

# file: ch3.sgm

# owner: stacey

# group: techpubs

user::rw-				

user::anusha:rw-        #effective:r--

group::r-               #effective:r--

mask:r--

other:r-

在以下示例中,将组 staff 的缺省权限修改为对 book 目录的读取权限。此外,还将缺省 ACL 掩码权限修改为读写。


% setfacl -m default:group:staff:4,default:mask:6 book

Procedure如何删除文件的 ACL 项

  1. 删除文件的 ACL 项。


    % setfacl -d acl-entry-list  filename ... 
    
    -d

    删除指定的 ACL 项。

    acl-entry-list

    指定文件或目录中要删除的 ACL 项(未指定权限)的列表。只能删除特定用户和组的 ACL 项和缺省 ACL 项。表 6–7表 6–8 显示了有效的 ACL 项。

    filename ...

    指定一个或多个文件或目录,由空格分隔。

    或者,可以使用 setfacl -s 命令删除文件的所有 ACL 项,并使用所指定的新 ACL 项替换它们。

  2. 检验是否已删除文件的 ACL 项。


    % getfacl filename
    

示例 6–10 删除文件的 ACL 项

在以下示例中,将从 ch4.sgm 文件中删除用户 anusha


% setfacl -d user:anusha ch4.sgm

Procedure如何显示文件的 ACL 项

    使用 getfacl 命令显示文件的 ACL 项。


    % getfacl [-a | -d] filename ...
    
    -a

    显示指定文件或目录的文件名、文件属主、文件组和 ACL 项。

    -d

    显示指定目录的文件名、文件属主、文件组和缺省 ACL 项(如果存在)。

    filename ...

    指定一个或多个文件或目录,由空格分隔。

    如果在命令行中指定多个文件名,则会在每两个 ACL 项之间显示一个空白行。


示例 6–11 显示文件的 ACL 项

在以下示例中,将显示文件 ch1.sgm 的所有 ACL 项。用户和组项旁边的 #effective: 注释表示由 ACL 掩码修改后的权限。


% getfacl ch1.sgm



# file: ch1.sgm

# owner: stacey

# group: techpubs

user::rw-

user:anusha:r-        #effective:r--

group::rw-            #effective:rw-

mask:rw-

other:---

在以下示例中,将显示目录 book 的缺省 ACL 项。


% getfacl -d book



# file: book

# owner: stacey

# group: techpubs

user::rwx

user:anusha:r-x       #effective:r-x

group::rwx            #effective:rwx

mask:rwx

other:---

default:user::rw-

default:user:anusha:r--

default:group::rw-

default:mask:rw-

default:other:---