zoukankan      html  css  js  c++  java
  • 用户和文件权限管理

    目的:(1)有效管理系统中的用户;

             (2)运用文件权限使系统中的多个用户同时使用系统,但互不影响。

    一、用户管理

    • 系统用户文件概述

    (1)系统用户文件:

    用于保存系统用户及用户设置的文件是/etc/passwd.

    [root@localhost test]# cat /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    ...

    可以看出,每一行都使用冒号“:”隔开,隔开的各个字段就是用户的设置。从左向右各个字段含义依次是:

    字段1:用户名。

    字段2:用户的登录密码。这里的x表示密码保存在用户密码文件/etc/shadow中。

    字段3:用户的ID号(即UID)。

    字段4:用户所属组的ID号(即GID)。

    字段5:可选,通常为空。这个字段一般用来保存用户的其他信息(如全名)等。

    字段6:用户的家目录。家目录主要用于存放用户的初始化文件(初始化文件用于初始化用户环境、启用软件个性设置等)、个人文件等。

    字段7:用户使用的shell。

    (2)用户密码文件(影子文件):

    [root@localhost zhu]# cat /etc/shadow
    root:$1$t4$eOBy2Gb9IAyS.1WiFU1bU.:16021:0:99999:7:::
    bin:*:16021:0:99999:7:::
    daemon:*:16021:0:99999:7:::
    adm:*:16021:0:99999:7:::
    ...

    密码文件shadow也是一个格式化文件,同样用冒号分割各个字段。从左向右各个字段含义依次是:

    字段1:用户名。

    字段2:加密后的密文字符串。如果该字段以“$1$”开头,表示采用MD5加密(MD5是一种常见的加密算法,经常用于加密密码等不可逆的字符串)。

    字段3:最后一次密码修改的天数(自1970年1月1日算起)。

    字段4:两次修改密码之间需要间隔的天数,在此期间用户不能修改密码(0表示可以随时修改密码)。

    字段5:密码最长存留的天数(1表示用户不能修改密码)。

    字段6:密码过期之前的警告天数(-1表示没有警告)。

    字段7:密码过期之后禁止用户登录的天数(1表示不会被禁用)。

    字段8:过期后禁用的天数(-1表示不会被禁用)。

    字段9:保留,一般为空。

    系统用户文件和密码文件中保存的用户名及密码等都由系统自动生成,并且其中保存的用户大部分是软件专有用户。软件专有用户是一类比较特殊的用户,这类用户通常是为了保证系统安全运行而存在的,不能直接登录系统。以软件专有用户的身份运行软件,可以大大降低系统被攻击的风险。

    • 添加用户命令useradd(adduser)

    即便是在单用户系统中,有时也需要为安装的软件添加专有用户。例如编译安装的数据库软件MySQL时,需要手动使用命令添加其专有用户mysql。

    [root@localhost zhu]# ls -l /usr/sbin/adduser /usr/sbin/useradd
    lrwxrwxrwx 1 root root     7 Nov 12 23:54 /usr/sbin/adduser -> useradd
    -rwxr-x--- 1 root root 72932 Jan 17  2007 /usr/sbin/useradd

    从上面的命令输出中可以看出,命令adduser实际上是useradd的软连接文件,因此这两个命令的用法相同。

    【命令格式】

    useradd [option] username

    常用选项

    g:指定新用户所属的用户组。

    s:指定新用户使用的shell。

    【用法示例】

    (1)例如要创建一个名为ljx的用户:

    [root@localhost ~]# useradd ljx
    [root@localhost ~]# cat /etc/passwd | grep ljx
    ljx:x:503:503::/home/ljx:/bin/bash
    [root@localhost ~]# cat /etc/shadow | grep ljx
    ljx:!!:16048:0:99999:7:::

    可以看出,在系统用户文件和用户密码文件中,都新增了一条以ljx开头的记录。

    在系统中添加用户注意事项:

    不要使用中文用户名。

    不建议在Linux系统中使用公共帐号。

    如果系统人数较少,可以使用人名拼音缩写;人数多,建议使用人名拼音作为用户名。

    建议不要使用大写字母。

    一般不要使用小写字母以外的特殊字符。

    (2)使用选项s为新建用户指定特殊的shell(可能这个用户更熟悉该shell)。例如新建一个名为wlh的用户,并更改默认shell为ksh:

    [root@localhost ~]# useradd -s /bin/ksh wlh
    [root@localhost ~]# cat /etc/passwd | grep wlh
    wlh:x:504:504::/home/wlh:/bin/ksh

    (3)添加用户时,系统会自动分配新用户的家目录。默认情况下,家目录位于/home目录中,并以用户名作为家目录的名称,查看用户家目录:

    [root@localhost ~]# ls -l /home/
    total 56
    drwx------ 2 li    li     4096 Dec  3 11:28 li
    drwx------ 2 ljx   ljx    4096 Dec  9 11:03 ljx
    drwx------ 2 root  root  16384 Nov 12 23:49 lost+found
    drwx------ 2 user1 user1  4096 Nov 20 20:25 user1
    drwx------ 2 wlh   wlh    4096 Dec  9 11:10 wlh
    drwx------ 7 zhu   zhu    4096 Dec  9 10:53 zhu

    (4)分配用户家目录后,系统还会添加新用户的初始化文件(初始化文件通常用于初始化用户的系统、软件环境)。通常用户的初始化文件被放在家目录中,并以隐藏文件的形式存在。查看用户的初始化文件的命令如下:

    [root@localhost ~]# ls -al /home/ljx/
    total 40
    drwx------ 2 ljx  ljx  4096 Dec  9 11:03 .
    drwxr-xr-x 8 root root 4096 Dec  9 11:10 ..
    -rw-r--r-- 1 ljx  ljx    24 Dec  9 11:03 .bash_logout
    -rw-r--r-- 1 ljx  ljx   176 Dec  9 11:03 .bash_profile
    -rw-r--r-- 1 ljx  ljx   124 Dec  9 11:03 .bashrc

    除了用户家目录中的初始化文件之外,命令还会在系统邮件目录/var/spool/mail中,为用户添加邮件文件,以便于用户接收邮件。

    (5)根据按照软件包的不同,家目录中可能还会存在一些别的初始化文件,例如编辑器vim的初始化文件.viminfo等。这些初始化文件的模板被放在目录/etc/skel中。

    (6)编译安装软件时,有些软件会要求建立软件专有用户。由于软件专有用户不能直接登录系统,因此需要使用选项s修改专有用户的shell。例如使用useradd添加MySQL的专有用户:

    #使用选项s修改用户使用的shell为/sbin/nologin,以阻止其直接登录系统
    [root@localhost ~]# useradd -s /sbin/nologin mysql

    由于软件专有用户不能登录系统,因此通常不需要为其设置密码。

    虽然系统会禁止空密码用户登录,但仍然建议修改软件专有用户的shell,以免存在可能的安全隐患。

    注意:/sbin/nologin是一个特殊的shell,系统会禁止使用此shell的用户登录系统。

    (7)有时可能需要在建立用户时指定用户的用户组,此时可以使用选项g:

    [root@localhost ~]# useradd -g user1 user2

    [root@localhost ~]# cat /etc/passwd | grep user[12]
    user1:x:501:501::/home/user1:/bin/ksh
    user2:x:506:501::/home/user2:/bin/bash

    可以看出user1和user2有相同的组ID(GID)。

    • 设置用户密码命令passwd

    为系统添加用户后,如果不设置密码,大多数发行版都会禁止用户登录系统,因此添加用户后首要任务是为用户设置密码。

    【命令格式】

    passwd [username]

    注意:如果passwd命令没有指明用户,passwd将会修改当前用户的密码。

    • 删除用户命令userdel

    【命令格式】

    userdel [option] username

    【常用选项】

    r:删除用户时,连同用户的家目录和邮件文件一并删除。(不使用此选项时,删除用户后需要手动删除其家目录和邮件文件)

    • 用户管理命令usermod

    用户管理命令的基本内容是禁用、启用用户账号(即锁定、解除锁定),以及修改用户账号的某些属性等。

    【命令格式】

    usermod [option] username

    【常用选项】

    L:锁定用户,即禁止用户登录系统。

    U:解除锁定。

    e:指定用户过期的日期。

    f:指定用户过期之后的缓冲时间,即过期之后还能够登录系统的天数。

    d:为用户指定新的家目录。

    m:为用户指定新的家目录时,移动原来家目录中的所有文件。

    s:修改用户的默认shell。

    二、用户组管理

    Linux系统中的用户组和Windows系统中的用户组类似:管理员可以创建多个用户组,并将多个用户加入一个用户组中,以实现权限的集中管理。与Windows系统不同的是,Linux系统创建用户时,系统会自动创建一个与用户名同名的用户组(与用户一起被创建的同名用户组称为私有组),并将用户加入该组中。而在Windows系统中,系统会将新建的用户加入到一个名为user的组中。

    许多应用系统都使用用户组作为权限实施的对象(例如文件服务器、FTP服务器等)。

    • 用户组文件概述

    (1)系统用户组文件

    Linux系统将用户组的相关设置保存在用户组文件/etc/group中。

    [root@localhost ~]# cat /etc/group
    root:x:0:root
    bin:x:1:root,bin,daemon
    daemon:x:2:root,bin,daemon
    sys:x:3:root,bin,adm
    adm:x:4:root,adm,daemon

    同样,使用冒号分割各个字段,从左到右各个字段含义依次是:

    字段1:用户组名称。

    字段2:组密码。用户组密码为x,表示用户组密码保存在用户组密码文件/etc/gshadow中。

    字段3:GID,用户组ID。

    字段4:用户列表。如果存在多个用户,可以使用逗号分隔。

    (2)用户组密码文件

    用户组密码文件用于保存用户组密码、用户组管理员等设置。

    [root@localhost ~]# cat /etc/gshadow
    root:::root
    bin:::root,bin,daemon
    daemon:::root,bin,daemon
    sys:::root,bin,adm
    adm:::root,adm,daemon
    ...
    zhu:!::
    user1:!::
    li:!::
    ljx:!::
    wlh:!::
    mysql:!::

    冒号分隔字段,从左到右依次为:

    字段1:组名称。

    字段2:组密码。

    字段3:用户组的管理员。如果有多个管理员,则使用逗号分隔。

    字段4:组成员列表。如有多个,逗号分隔。

    • 添加用户组命令groupadd

    命令格式:

    groupadd groupname

    • 删除用户组命令groupdel

    【命令格式】

    groupdel groupname

    • 用户组管理usermod

    提示:通常将系统用户文件中指定的用户组称为用户的私有组,在用户组文件中为用户指定的组称为用户的附加组。当用户创建文件时,系统将用户的私有组作为文件的属组。

    用户组管理常用选项:

    g:将用户的私有组改变为选项指定的组。

    G:为用户添加多个附加组,如有多个,逗号分隔。

    a:将用户以追加的方式添加到一个附加组(已经将用户加入了某个或某几个附加组,想要再加入其他的附加组,并且之前加入的附加组保留,此时需要使用a选项)。

    三、基本权限及管理命令

    • 文件的属主和属组

    当文件被创建时,系统会以创建此文件的用户及用户所在的私有组为此文件添加属主和属组信息,并设置其默认访问权限。属主在Windows系统中通常称为文件所有者。文件属主可以对文件执行一切操作,包括读取、修改和删除等。

    提示:在Linux、Unix系统中,root用户拥有最高权限,因此可以读取、修改和删除系统中的任何文件。

    [root@localhost test]# ls -l a
    -rw-r--r-- 1 root root 0 Dec  9 15:02 a

    可以看出文件a的属主和属组都是root(第1个root是属主,第2个root是属组)。

    默认情况下,系统会分给用户所在的组成员一些权限(以属组权限的方式体现),如果用户是多个组的成员,那么系统会使用用户文件/etc/passwd中保存的组(即私有组)。

    • 修改文件属主和属组的命令chown、chgrp

    当文件被创建时,属主和属组就已经被添加,但有时需要改变文件的属主和属组。一个典型的例子:编译安装MySQL时(通常编译安装都会自定义数据目录),需要手动创建MySQL的数据目录,创建完成后还需要将数据目录的属主和属组修改为mysql,这样数据服务器mysqld运行时才能读取、写入数据。

    (1)chown命令

    chown命令的作用是更改文件的属主,也可以用于修改文件属组。

    【命令格式】

    chown [option] user:group file

    具体形式:

    chown [option] user file                       只更改属主

    chown [option] :group file                   只更改属组

    chown [option] user:group file            同时更改属主和属组

    【常用选项】

    R:递归地修改目录及目录中的所有文件的属主和属组。

    注意:只有文件的属主或root用户可以使用chown命令,非root用户的属主只能更改文件的属组为该用户所在的另一个用户组。即属主只能修改文件的属组,并且修改后的属组必须是属主所在的用户组(私有组、附加组均可)。普通用户无法修改文件的属主。

    (2)chgrp命令

    chgrp命令用于修改文件的属组。与chown命令一样,这个命令也只能由文件属主和root用户使用。并且非root用户的属主只能将文件的属组修改为用户自身所在的其他用户组。

    【命令格式】

    chgrp [option] group filename

    【常用选项】

    R:递归地修改目录及目录中所有文件的属组。

    提示:虽然Linux系统为修改属主和属组提供了两个不同的命令,但由于使用chown也可以修改属组,因此更多时候都使用chown命令。

    • 文件权限及表示方法

    (1)传统文件权限

    Linux系统中的传统文件权限虽然只有读、写和执行3类,但这3类权限对于文件和目录而言意义却不同:

    对于文件而言:

    读:允许读取文件内容。查看、复制等。

    写:允许写入内容。编辑、追加、删除文件等。

    执行:如果该文件是可执行脚本、二进制代码文件或程序,此权限用于控制用户能否执行该文件。

    对目录而言:

    读:允许用户查看目录中的文件列表。如ls等。

    写:允许用户在目录中创建和删除文件。删除目录中文件时,还应该具备相应的文件写权限。

    执行:允许用户使用cd命令进入目录。

    虽然用户可能无法进入目录或查看目录中的文件列表,但如果目录中的文件权限允许,用户仍然可以使用输入全路径的方法操作文件。

    (2)权限表示方法:符号模式

    读:r         写:w          执行:x

    (3)权限表示方法:绝对模式

    读:4         写:2          执行:1

    • 文件权限管理命令chmod

    文件权限管理由文件的属主和root用户执行。

    【命令格式】

    chmod [option] [mode] file

    【常用选项】

    R:递归地修改目录及目录中所有的文件的权限。

    【参数说明】

    mode参数是权限表达式,权限表达式可以使用符号模式和绝对模式。

    使用符号模式时,权限表达式可以拆分为操作对象、操作符和权限列表3部分。

          操作对象:u(文件属主user)、g(文件的属组group)、o(其他用户other)和a(all,包括u、g、o)。

          操作符:+(添加)、-(删除)和=(赋予)。

          权限列表:r(读)、w(写)和x(执行)或它们的组合。

    • suid、sgid和sticky权限概述

    在Linux系统中还存在一个特殊的set权限,set权限可以分为:suid、sgid和sticky权限3种。虽然这3中权限很少使用,但一些特殊时候使用这3种权限却很方便(例如要普通用户帮root用户执行一项任务时)。

    注意:由于set权限很容易引发安全问题(一旦出现,往往是致命的安全问题),某些系统可能会出于安全方面的考虑,修改或禁止使用这些权限。

    1、suid、sgid权限及其使用方法:

    有时候希望以某个用户的身份执行一个脚步或命令,例如root用户编写了一个用于备份的脚本,并且希望普通用户能执行这个备份脚本。但问题是,普通用户可能没有权限读取这些需要备份的文件(与Windows系统不同,程序和脚本访问文件时的权限,与执行该程序和脚本的用户访问权限相同),如果因此修改需要备份的文件的访问权限是不明智的。

    像上面这种情形,就可以使用set权限(由于这三个权限名称都以s开头,许多时候也称为s权限)。包含s权限的程序或脚本运行时,其访问文件的权限与程序、脚本的属主或属组的访问权限相同。

    【set权限举例】

    一个典型的例子是普通用户修改密码或默认shell等设置时,需要修改系统用户文件/etc/passwd和影子文件/etc/shadow。

    [root@localhost test]# ls -l /etc/passwd;ls -l /etc/shadow
    -rw-r--r-- 1 root root 1683 Dec  9 11:29 /etc/passwd
    -r-------- 1 root root 1144 Dec  9 11:29 /etc/shadow

    从上面的命令输出可以看出,普通用户均不能修改这两个文件的内容,此时对相关命令使用s权限,命令执行时就可以使用root用户的身份修改这两个文件了。

    -rwsr-xr-x 1 root root 19876 Jul 17  2006 /usr/bin/passwd
    [root@localhost test]# ls -l /usr/bin/chsh
    -rws--x--x 1 root root 13368 Jun 25  2007 /usr/bin/chsh

    上面的命令输出中,属主权限中的s即表示s权限。

    当用户使用passwd和chsh命令时,s权限将允许命令修改系统用户文件/etc/passwd和用户密码文件/etc/shadow中的相关设置。

    s权限处于属主权限位时称为suid,处于属组权限位时称为sgid。

    【设置s权限】

    s权限可以设置为以属主的身份运行(suid)程序或脚本,也可以设置为以属组的身份运行(sgid)程序或脚本。

    (1)以符号模式设置属主的s权限(suid):

    [root@localhost test]# chmod u+s test.sh
    [root@localhost test]# ls -ls test.sh
    8 -rwsr-xr-x 1 root root 25 Dec 10 14:33 test.sh

    (2)以符号模式设置属组的s权限(sgid):

    [root@localhost test]# chmod g+s test.sh
    [root@localhost test]# ls -l test.sh
    -rwsr-sr-x 1 root root 25 Dec 10 14:33 test.sh

    (3)在绝对模式中使用第4位(从右算起)表示s权限,并用数字4表示suid,数字2表示sgid。

    #将第4个权限位设置为6,表示同时为文件 添加suid和sgid权限
    [root@localhost test]# chmod 6755 test.sh
    [root@localhost test]# ls -l test.sh
    -rwsr-sr-x 1 root root 25 Dec 10 14:33 test.sh

    注:使用字母s占用属主和属组的执行权限位的方法,表示文件拥有s权限:如果原文件具有可执行权限,就使用小写字母s表示s权限和执行权限;如果原文件没有可执行权限,则用大写字母S表示具有s权限并且没有执行权限。

    2、sticky权限及其使用方法

    我们知道,目录的写权限,指的是用户可以在目录中创建或删除文件。然而一些特殊情况下,可能希望某个目录中的文件,其他用户能够写入,但不能删除。这时可以给相应的目录添加sticky权限,这样其他用户就能够使用该目录中的具有写入权限的文件,但不能删除这些文件。由于sticky权限阻止用户删除文件,所有经常被称为防删权限为。

    【sticky权限应用举例】

    在系统临时目录/tmp中有许多文件,这些文件都是用户及其应用程序使用的临时文件。任何人都能够编辑这个目录中具有写权限的文件,但只有属主才能删除这些文件。这时因为/tmp目录具有sticky权限。

    [root@localhost test]# ls -ld /tmp
    drwxrwxrwt 12 root root 4096 Dec  9 10:53 /tmp

    【设置sticky权限】

    (1)符号模式使用字母t表示防删除位。例如为目录file添加防删除位:

    [root@localhost test]# chmod o+t file
    [root@localhost test]# ls -ld file
    drwxr-xr-t 2 root root 4096 Dec 10 14:53 file

    (2)在绝对模式中,在第4个权限位(从右算起)使用数字1表示防删除位。例如:

    [root@localhost test]# chmod 1777 file
    [root@localhost test]# ls -ld file
    drwxrwxrwt 2 root root 4096 Dec 10 14:53 file

    同样,小写字母t表示原目录有可执行权限和sticky权限,大写字母T表示目录没有可执行权限但具有sticky权限。

    注意:虽然防删除位可以防止用户删除文件,但通常不能阻止root和属主删除文件,因为这两类用户具备管理权限。

    • 权限掩码命令umask

    权限掩码(umask值)在用户登录系统时就已经被初始化。umask值使用3位8进制数表示。对于文件而言,每一位的最高值为6(默认情况下,系统不允许赋予文件可执行权限,以避免一些可能的安全隐患),新建文件的默认权限是从666中去除被权限掩码屏蔽掉的权限所得出的权限。对于目录而言,每一位最高值为7,新建目录的默认权限是从777去除被权限掩码屏蔽掉的权限所得出的权限。

    (1)查看umask值

    [root@localhost zhu]# umask
    0022

    (2)修改权限掩码

    [root@localhost zhu]# umask 002
    [root@localhost zhu]# umask
    0002

    (3)保存修改后的umask值

    使用umask命令设置的权限掩码将会在系统重启后丢失,如果希望保存umask值,通常将其写入用户初始化文件~/.bash_profile中。

    [root@localhost zhu]# echo "umask 022">>~/.bash_profile

    四、POSIX ACL权限系统及其管理命令

    • POSIX ACL权限系统概述

    POSIX(Portable Operating System Interface)可移植操作系统接口,ACL(Access Control List)访问控制列表。

    POSIX ACL在Linux内核的2.6版上被正式支持,一些常见的文件系统如ext2、ext3和JFS等都支持POSIX ACL。由于POSIX ACL不仅 需要内核和文件系统的支持,还需要应用程序的支持,因此一些旧版的系统或软件可能不支持ACL。在实际应用时,应该选用版本较新的发行版或软件。

    • ACL权限管理和查看命令setfacl、getfacl

    POSIX ACL仍然使用传统权限中的读、写和执行作为 管理的核心,不同的是可以问文件添加多个用户或用户组的权限细则。为文件添加ACL权限可以使用setfacl命令。

    (1)ACL权限管理命令setfacl

    setfacl命令主要用于添加、删除ACL权限。只有root用户和文件属主才能使用setfacl命令。

    【命令格式】

    setfacl [选项] 权限表达式 文件名

    【常用选项】

    b:删除所有扩展ACL权限。

    k:删除默认的ACL权限。

    d:设置默认的ACL权限。

    R:递归地设置目录及目录中的所有文件。

    m:修改、添加已有的ACL权限。

    【参数说明】

    设置ACL权限时,还需要使用权限表达式。与chmod命令的权限表达式不同,setfacl命令的权限表达式需要明确地指出用户和组的权限。

    ACL表达式的基本格式如下:

    [对象类型]:[对象]:权限列表

    表达式以冒号:作为分隔符,将对象类型、对象和权限分为3个字段。这3个字段的含义及选项如下:

    对象类型:表示要操作的对象类型。可以使用的对象类型有4种:u、g、m和o,分别代表用户、组、mask和其他用户。mask表示ACL权限的安全值。

    对象:应用权限的对象,用户或组的名称。

    权限:3中基本权限(r、w、x)的组合。

    如果一条命令中要使用多个权限表达式,可以使用逗号“,”将这些权限表达式分隔开。

    (2)查看ACL权限命令getfacl

    设置了ACL权限的文件,不能使用ls命令查看其附带的ACL权限。要查看ACL权限,通常使用getfacl命令。

    【命令格式】

    getfacl [option] filename

    通常不需要任何选项。

    注意:文件系统可能默认不支持ACL,可以通过重新挂载的方式,让这些文件系统支持ACL,命令为mount –o remount,acl /dev/sda3

    • ACL权限管理

    (1)添加ACL权限

    以root用户新建一个文件a,查看其权限:

    [root@localhost ~]# ls -l a
    -rw-r--r-- 1 root root 0 Dec 10 16:10 a

    要给文件添加ACL权限,可以配合使用选项m。例如要给用户zhu添加一个可读写的权限:

    [root@localhost ~]# setfacl -m u:zhu:rw a
    [root@localhost ~]# ls -l a
    -rw-rw-r--+ 1 root root 0 Dec 10 16:10 a

    可以看到文件a的权限后面多了一个加号“+”,ls命令使用这种方式表示这个文件有ACL权限。

    (2)查看ACL权限

    [root@localhost ~]# getfacl a
    # file: a
    # owner: root
    # group: root
    user::rw-
    user:zhu:rw-
    group::r--
    mask::rw-
    other::r--

    前三行是注释,紧随其后的是ACL权限列表,ACL权限列表中的条目与ACL表达式的格式相同,其中对象为空的字段表示属主、属组和其他用户。

    除此之外,ACL权限列表中还有一个特殊的条目,其对象类型为mask,其主要作用是限制ACL条目的最大权限。

    (3)ACL权限上线mask

    为了安全的使用ACL权限,系统为文件添加了一个默认的权限上限,这个权限上限被保存在mask条目中。当设置的ACL权限超过权限上限时,超过的权限将会被系统屏蔽。

    [root@localhost ~]# set -m m::r,u:zhu:rwx a
    [root@localhost ~]# su zhu
    [zhu@localhost root]$ echo "hello">>a
    bash: a: Permission denied

    (4)删除ACL权限

    要删除文件的ACL权限可以使用setfacl的选项b。例如删除文件a的所有ACL权限:

    [root@localhost ~]# setfacl -b a
    [root@localhost ~]# getfacl a
    # file: a
    # owner: root
    # group: root
    user::rw-
    group::r--
    other::r--

    删除之后查看文件的ACL,可以发现命令getfacl只输出了文件的传统权限列表。

    (5)递归地添加ACL权限

    有时需要对一个目录及目录中所有的文件设置ACL权限,这时可以使用选项R递归地为目录中的所有文件添加ACL权限。

    [root@localhost ~]# setfacl -Rm u:zhu:rw,g:admin:rw test

    (6)预设ACL权限

    许多时候可能希望为某个目录中新建的文件添加默认的ACL权限,即每添加一个文件,系统会自动为文件添加ACL权限,这时可以使用选项b预设ACL权限。

    例如要为目录test设置预设ACL:

    [root@localhost ~]# setfacl -dm u:zhu:rw test
    [root@localhost ~]# cd test
    [root@localhost test]# touch c
    [root@localhost test]# getfacl c
    # file: c
    # owner: root
    # group: root
    user::rw-
    user:zhu:rw-
    group::r-x                      #effective:r--
    mask::rw-
    other::r--

    在目录test中新建文件将会自动继承预设的ACL权限。

    (7)删除预设的ACL权限

    [root@localhost ~]# setfacl -k test
    [root@localhost ~]# cd test
    [root@localhost test]# touch d
    [root@localhost test]# getfacl d
    # file: d
    # owner: root
    # group: root
    user::rw-
    group::r--
    other::r--
  • 相关阅读:
    Poj 2406--Power Strings(KMP)
    杭电2682--Tree(Prim)
    杭电1827--Summer Holiday(SCC + 缩点)
    杭电2181--哈密顿绕行世界问题(Dfs)
    杭电1269--迷宫城堡(强连通分量)
    南阳21--三个水杯(Bfs)
    杭电1203--I NEED A OFFER!(01背包)
    e.send和next(e)的区别
    python中yield与return的用法与区别
    迭代器
  • 原文地址:https://www.cnblogs.com/nufangrensheng/p/3467787.html
Copyright © 2011-2022 走看看