13

1 Linux 权限介绍

上一篇介绍了 Linux 用户管理,接下来介绍一下 Linux 的权限管理。Linux 是多用户的操作系统,允许多个用户同时登录和工作,Linux 权限是操作系统用来限制不同用户对资源的访问机制。这里暂且将 Linux 中的权限分为三类:

  • 基本权限:给文件和目录的所属者(u)所属组(g)其他用户(o) 分配的 读(r)写(w)执行(x) 权限
  • ACL权限ACL 权限可以针对单一用户或用户组设定权限,是基本权限之外更细化的权限设定,弥补了基本权限设定不能满足的一些场景
  • 特殊权限:除了读写执行权限(rwx) 的另一种 特殊权限(s/t, SUID/SGID/SBIT)

2 基本权限

2.1 权限位介绍

使用 ls 命令时,长格式显示的第一列就是文件的权限,例如:

[root@localhost ~]# ls -l install.log
-rw-r--r--. 1 root root 28425 11月 30 18:50 install.log

第一列的权限位 -rw-r--r--.,则共11位,这11位权限位的含义如下图所示:
image.png

  • 第1位:代表文件类型。Linux不像Windows使用扩展名表示文件类型,而是使用权限位的第一位表示文件类型。虽然Linux文件的种类不像Windows中那么多,但是分类也不少,详细情况可以使用“info ls” 命令查看。这里列出一些常见的文件类型:

    • -: 普通文件
    • d: 目录文件。Linux中一切皆文件,所以目录也是文件的一种
    • l: 软链接文件
    • b: 块设备文件。这是一种特殊设备文件,存储设备都是这种文件,如分区文件/dev/sda1就是这种文件
    • c: 字符设备文件。这也是特殊设备文件,输入设备一般都是这种文件,如鼠标、键盘等
    • p: 管道符文件。这是一种非常少见的特殊设备文件。
    • s: 套接字文件。这也是一种特殊设备文件,一些服务支持socket访问就会产生这样的文件
  • 第2~4位:代表文件所属者的权限

    • r: 代表read,是读取权限
    • w: 代表write,是写权限
    • x: 代表execute,是执行权限
  • 第5~7位:代表文件所属组的权限,同样拥有 "rwx" 权限
  • 第8~10位:代表文件其他人的权限,同样拥有 "rwx" 权限
  • 第11位

    • .:如果是个点代表受 SELinux 安全上下文保护,这里忽略暂不做详细介绍
    • +:如果是个加号表示设置了ACL权限,下文再做详细介绍

2.2 权限含义解释

读、写、执行权限对文件和目录的含义是不同的

  • 权限对文件的作用

    • 读(r):对文件有读权限,代表可以读取文件中的数据。如果把权限对应到命令上,那么一旦对文件有读权限,就可以对文件执行 catmorelessheadtail 等文件查看命令
    • 写(w):对文件有写权限,代表可以修改文件中的数据。如果把权限对应到命令上,那么一旦对文件有写权限,就可以对文件执行 vimecho 等修改文件数据的命令。注意:对文件有写权限,是不能删除文件本身的,只能修改文件中的数据,如果想要删除文件,则需要对文件的上级目录拥有写权限
    • 执行(x):对文件有执行权限,代表文件可以运行。在Linux中,只要文件有执行权限,这个文件就是执行文件了,只是这个文件到底能不能正确执行,不仅需要看执行权限,还要看文件的代码是不是正确的语言代码
  • 权限对目录的作用

    • 读(r):对目录有读权限,代表可以查看目录下的内容,也就是可以查看目录下有哪些文件和子目录。如果包权限对应到命令上,那么一旦对目录拥有了读权限,就可以在目录下执行 ls 命令查看目录下的内容了
    • 写(w):对目录有写权限,代表可以修改目录下的数据,也就是可以在目录中新建、删除、复制、剪贴子文件或子目录。如果把权限对应到命令上,那么一旦对目录拥有了写权限,就可以在目录下执行 touchrmcpmv 等命令
    • 执行(x):目录是不能运行的,那么对目录拥有执行权限,代表可以进入目录。如果把权限对应到命令上,那么一旦对目录拥有了执行权限,就可以对目录执行 cd 命令进入目录

2.3 权限设定

2.3.1 chmod 命令

chmod 命令用来修改文件或目录的权限。

命令格式:chmod [选项] 权限模式 文件或目录

  • 选项:

    • -R:递归设置权限,也就是给予目录中的所有文件和子目录设定权限
    • --reference=参考文件或目录:使用参考文件或参考目录的权限来设置目标文件或目录的权限
  • 权限模式:权限模式分为符号组合八进制数组合
  • 符号组合的格式是[ugoa][[+-=][permission]],也就是[用户身份][[赋予方式][权限]]的格式。

    • 用户身份

      • u:代表所有者(user)
      • g:代表所属组(group)
      • o:代表其他人(other)
      • a:代表全部身份(all)
    • 赋予方式

      • +:加入权限
      • -:减去权限
      • =:设置权限
    • 权限

      • r: 读取权限(read)
      • w: 写权限(write)
      • x: 执行权限(execute)
  • 八进制数组合的格式是 [0-7][0-7][0-7] 三位数字组成(每一位数字都是权限之和),第一位是所属者权限之和,第二位是所属组权限之和,第三位其他人权限之和

    • r 读取权限对应的数字是 4
    • w 写权限对应的数字是 2
    • x 执行权限对应的数字是 1
    • 例如读写权限 rw 八进制数表示 6

示例:

# 1. 添加组用户的写权限。
chmod g+w test.log 
# 2. 删除其他用户的所有权限。权限为空,即权限设置为'---'
chmod o= test.log
# 使所有用户都没有写权限 
chmod a-w test.log 
# 3. 当前用户具有所有权限,组用户有读写权限,其他用户只有读权限  
chmod u=rwx, g=rw, o=r test.log 
等价于 
chmod 754 test.log 
# 4. 将目录以及目录下的文件都设置为所有用户都拥有读写权限
chmod -R a=rw testdir/ 
# 5. 根据参考文件 a.log 的权限来 设置文件 test.log 的权限
chmod --reference=a.log ./test.log

2.3.2 chown 命令

chown 命令用来修改文件和目录的所有者和所属组。

命令格式:chown [选项] 所有者[:所属组] 文件或目录

  • 选项:

    • -R:递归修改目录下所有的文件及子目录的所属者和所属组
    • --reference=参考文件或目录:使用参考文件或参考目录的所属者和所属组来设置目标文件或目录的所属者和所属组
  • 所有者[:所属组]:当省略 ":所属组",仅改变文件所属者
注意:普通用户不能修改文件的所属者和所属组,哪怕自己是这个文件的所属者也不行。普通用户可以修改所属者是自己的文件权限

示例:

# 修改文件的所属者为 user1,所属组为 group1
chown user1:group1 test.log 

2.3.3 chgrp 命令

chown 命令只能用来修改文件和目录的所属组,其实完全可以由 chown 命令来替代。

命令格式:chgrp 用户组 文件或目录

  • 选项:

    • -R:递归修改目录下所有的文件及子目录的所属组
    • --reference=参考文件或目录:使用参考文件或参考目录的所属组来设置目标文件或目录的所属组

2.4 默认权限与 umask

2.4.1 权限掩码:umask

当创建一个新的文件和目录是都默认会有一些权限,新建的文件权限一般是 "-rw-r--r--",新建的目录权限一般是 "drwxr-xr-x"。这些新建文件或目录的默认权限是由权限掩码 umask来决定的。在讲解 umask 之前,需要先了解一下文件和目录的默认最大权限

  • 文件默认最大权限:对于文件来讲,新建文件的默认最大权限是 666 (即 -rw-rw-rw-),没有执行权限,只是因为执行权限对文件来讲比较危险,不能再新建文件的时候默认赋予,而必须通过用户手工赋予
  • 目录默认最大权限:对于目录来讲,新建目录的默认最大权限是777 (即 drwxrwxrwx),这是因为对目录而言,执行权限仅仅代表进入目录,所以即使新建目录时直接默认赋予也没有什么危险

查看权限掩码值 和 新文件新目录的预设权限,如下

[root@localhost ~]# umask
0022
[root@localhost ~]# umask -S
u=rwx,g=rx,o=rx
[root@localhost ~]# touch testfile
[root@localhost ~]# mkdir testdir 
[root@localhost ~]# ls -ld testfile testdir/
drwxr-xr-x. 2 root root 4096 4月  22 14:48 testdir/
-rw-r--r--. 1 root root    0 4月  22 14:47 testfile
[root@localhost ~]#

权限掩码值所表示的权限就是新建文件和新建目录要从默认最大权限里要排除的权限。查询掩码值由两种方式,直接执行 "umask" 以数字方式展示,可以看到有四位 '0022',其中第一位是特殊权限用的,这里暂时先不管,主要看后三位 "022",即"----w--w-";执行 "umask -S" 以符号方式展示,其中缺少的权限对应的权限值就是掩码值,这里用户组和其他用户都缺少 w,所以掩码值是 022

2.4.2 默认权限计算方式

按照官方的标准算法,umask 默认权限需要使用二进制进行逻辑与和逻辑非联合运算才可以得到正确的新建文件和目录的默认权限,这种方法既不好计算也不好理解,不推荐。我们这里按照权限字母相减的方式来说明默认权限的计算方式,以权限掩码值等于 "022" 为例:

  • 新建文件:文件的默认最大权限是 -rw-rw-rw- ,通过计算 (-rw-rw-rw-) - (-----w--w-) = (-rw-r--r--),则新建文件默认权限是 -rw-r--r--,即 644
  • 新建目录:目录的默认最大权限是 drwxrwxrwx ,通过计算 (drwxrwxrwx) - (d----w--w-) = (drwxr-xr-x),则新建目录默认权限是 drwxr-xr-x,即 655
注意
计算新建文件的默认权限时,网上有些教程直接使用使用权限数字相减得到默认权限,这样其实是不对的。例如 umask 值为 003(即 --------wx),权限数字相减 666 - 003 = 663,得到的默认权限是 663(即-rw-rw--wx), 显然不对,因为通过权限掩码可以看出默认权限里 other 是不应该包含wx权限的。正确的计算结果是 (-rw-rw-rw-) - (--------wx) = (-rw-rw-r--),即 664。造成这个错误的根本原因是文件的默认最大权限是 666,所有二进制位并没有满 1,而目录的默认最大权限是 777,所有二进制位都满 1了,所以新建目录的默认权限计算是可以使用权限数字相减的,而新建文件的默认权限计算不能使用权限数字相减的

2.4.3 修改权限掩码:umask 命令

umask 命令是用来显示或设置创建文件或目录的权限掩码的。

命令格式:umask [选项] [权限模式]

  • 选项:

    • -S:以符号组合的方式输出权限掩码,不使用该选项时以八进制数的形式输出
  • 权限模式:与上面 chmod 命令的权限模式相同
使用 umask 命令设置的权限掩码只是临时有效,如果需要永久有效,需要修改 /etc/bashrc 文件里的内容,但是不建议修改

示例:

# 修改权限掩码为 033。等价于 "umask u=rwx,g=r,o=r"
[root@localhost testdir]# umask 033
[root@localhost testdir]# umask
0033
[root@localhost testdir]# umask -S
u=rwx,g=r,o=r
[root@localhost testdir]# touch testfile2
[root@localhost testdir]# mkdir testdir2
[root@localhost testdir]# ls -ld testfile2 testdir2/
drwxr--r--. 2 root root 4096 4月  22 16:36 testdir2/
-rw-r--r--. 1 root root    0 4月  22 16:36 testfile2
[root@localhost testdir]# 

3 ACL 权限

3.1 ACL 权限介绍

假如有这样一种场景,有一个这样一个文件,权限是 "rwx-r----",所属者是 user1,所属组组 gruop1。现在需要对另一个用户 user2 单独设置该文件的写(w) 权限,能够想到的方法是 把其他用户(other) 的权限赋予写权限,但是这样除了 user2 之外的其他用户都能对该文件进行写操作了,显然不合适;如果把 user2 加入到用户组 group1,并设置 group1 对该文件有写权限,同样也不合适,因为这样 group1 内的用户对该文件都有了写权限;如果把所有者改为 user2 显然更不合适,这样该文件原有的所属者 user1 就对该文件没有了操作权限。

上面那种场景,只通过 所属者(u)、所属组(g)、其他用户(o) 配合 读(r)、写(w)、执行(x)权限 是无法满足的。这时就需要设定 ACL 权限来实现。ACL 是 Access Control List 的缩写,主要的目的是在提供传统的 owner、group、othersread、write、execute 权限之外的细部权限设定,ACL 可以针对单一使用者,单一文件或目录来进行 r、w、x 的权限规范。

ACL 主要是针对三个方面来控制权限的:

  • 用户(user):针对用户为对象来设定权限。用户不一定是所属者,可以是任意用户
  • 用户组(group):针对用户组为对象来设定权限。用户组不一定是所属组,可以是任意用户组
  • 有效权限(mask):针对目录下新建文件或子目录时,规范新数据的有效权限

3.2 ACL 权限设定

3.2.1 检查 ACL 是否开启

事实上,原本 ACL 是 unix-like 操作系统的额外支持项目,但因为近年以来 Linux 系统对权限细部设定的热切需求,因此目前 ACL 几乎已经预设加入在所有常见的 Linux 文件系统(ext2/ext3/ext4/xfs 等)的挂载参数中!所以你无须进行任何动作,ACL 就可以被使用了!不过,如果你不放心文件系统是否真的支持 ACL 的话,那么就检查一下磁盘分区信息,以确保开启了 ACL。

1. 查看磁盘分区是否开启 ACL

# 1. 查看当前系统有哪些分区。其中"/dev/mapper/VolGroup-lv_root"是逻辑卷分区,"/dev/sda1"是传统分区
[root@localhost ~]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                       18G  3.7G   13G  23% /
tmpfs                 490M     0  490M   0% /dev/shm
/dev/sda1             477M   35M  417M   8% /boot
# 2. 查看指定分区文件信息。如果输出包含"acl"字眼则代表该分区已经开启了 ACL
[root@localhost ~]# dumpe2fs -h /dev/mapper/VolGroup-lv_root | grep -i acl
dumpe2fs 1.41.12 (17-May-2010)
Default mount options:    user_xattr acl
[root@localhost ~]# dumpe2fs -h /dev/sda1 | grep -i acl
dumpe2fs 1.41.12 (17-May-2010)
Default mount options:    user_xattr acl
[root@localhost ~]# 

2. 开启 ACL
如果上面的查看信息中分区没有开启 ACL的话,你也可以通过下面两种方式来开启 ACL

  • 执行命令重新挂载并加入ACL权限,如 "mount -o remount,acl /"。这种方式只能临时生效,系统重启又会恢复
  • 修改配置文件 "vim /etc/fstab",找到对应分区那一行,在 "defaults" 后面追加 "acl",如下图。然后重启系统或者重新挂载 "mount -o remount /" 使修改生效

image.png

3.2.2 命令:setfacl、getfacl

setfacl 命令用来设定 acl 权限,命令格式:setfacl 选项 文件或目录

  • 选项

    • -m [u|g|m]:[用户名|组名]:权限:设定 acl 权限。也可以设置 acl 的有效权限(不用指定用户或用户组)
    • -x [u|g]:[用户名|组名] :删除指定的 acl 权限。与 -m 选项是相对的
    • -b:删除全部 acl 权限
    • -R:递归设定 acl 权限,指目录下现有的所有文件和子目录也设定相同的 acl 权限
    • -d:设定默认 acl 权限,指目录下后续新建的文件和子目录拥有的默认 acl 权限
    • -k:删除默认 acl 权限

getfacl 用来查看 acl 权限,命令格式:getfacl 文件或目录

3.2.2 针对用户设定 ACL 权限

image.png

  • 如果文件或者目录设置了 acl 权限,使用 ll 命令查看,第一列权限位的最后一个字符显示 "+"。注意,此时看到的权限(664)和实际的权限(644)是有所差别的,此时实际权限就需要通过 getfacl 命令查看了
  • 通过 getfacl 命令查询 acl 权限输出结果中,"user:user1:rw-" 表示用户 user1 对该文件拥有读写权限,如果省略中间的用户名,即"user::rw-"代表文件所属者拥有的权限,用户组表示规则也一样
  • "mask::rw-" 为 acl 的默认最大有效权限,即给用户或者用户组设置的 acl 权限不能超出该范围

3.2.3 针对用户组设定 ACL 权限

与针对用户设定 acl 权限相似,如下:
image.png

3.2.3 设定 ACL 最大有效权限

使用 getfacl 命令查询输出的结果中, mask 代表针对用户和用户组能够设定的最大有效权限,即设定的 acl 权限不能超出 mask 的范围。如果超出了,超出的部分权限是不生效的。
image.png

3.2.4 给目录递归设定 ACL 权限

可以通过 "-R" 选项给目录设定 acl 权限的同时,也给该目录下面的所有文件和子目录设定相同的 acl 权限。如下:
image.png

3.2.5 给目录未来文件设定默认 ACL 权限

相对有 "-R" 选项给目录先现有的文件和子目录设定 acl 权限,而 "-d" 选项是给目录下将来要新建的文件和子目录设定默认 acl 权限,即该目录下文件一旦成功创建成功就拥有的 acl 权限。如下:

image.png

其中 "setfacl -d -m u:user2:rwx /tmp/acl_test_dir/" 等同于 "setfacl -m d:u:user2:rwx /tmp/acl_test_dir/"

3.2.6 删除 ACL 权限

  • 删除指定的 acl 权限,如:setfacl -x u:user1 /tmp/acl_test_file
  • 删除目录默认 acl 权限,如:setfacl -k /tmp/acl_test_dir/
  • 删除全部 acl 权限,包括目录设定的默认权限,如:setfacl -b /tmp/acl_test_dir/

4 特殊权限:SUID、SGID、SBIT

Liunx 中处理常见的 "读写执行(rwx)" 权限外还有一些特殊权限 st,如下:
image.png
这些特殊权限是什么意思呢?我们先从 SUID 开始说起

4.1 SetUID

s 权限标志出现在文件所属者的 x 权限位时,如 "/usr/bin/passwd" 的权限状态 "-rwsr-xr-x",则代表该文件被设置了 SetUID 权限,简称 SUID。如果文件被设置了 SUID 所起到的作用是任何用户去执行该文件时,用户的身份会被切换为该文件所属者的身份去执行而不是以该用户自己的身份去执行

以还是 "/usr/bin/passwd" 命令为例,使用 passwd 命令修改密码时,实际上修改的是 "/etc/shadow" 文件,而该文件的权限是 "----------",所属者和所属组都是 root,也就是说只有 root 用户才可以强制修改 "/etc/shadow" 文件。但是实际使用中普通用户也是可以修改自己的密码的,即也能修改 "/etc/shadow" 文件,这是因为 "/usr/bin/passwd" 被设置了 SUID,普通用户执行 passwd 命令的过程中实际上是以 root 身份去执行的。

SUID 的限制与功能

  • 只有可执行的二进制程序文件才能设置 SUID 权限
  • 命令执行者包括所属者要对该二进制程序拥有执行(x)权限
  • 命令执行者在执行二进制程序时获得该程序文件的所属者身份
  • SUID 权限只在二进制程序执行过程中有效,即身份的改变只发生在程序的执行过程中

设置 SUID 权限

  • 命令格式:chmod u+s 可执行二进制程序文件chmod 4(0-7)(0-7)(0-7) 可执行二进制程序文件
  • 设置的 SUID 权限即 s 权限标志占用所属者原本的 x 权限位。如果显示的是大 S,说明是在所属者没有执行权限的情况下设置的 SUID,这时设置的 SUID 权限是无效的,需要把所属者的执行权限加上才能有效,即变为小 s
  • 权限标志 s 对应的数值是 4
一般不要轻易设置 SUID 权限,因为该动作很危险,试想一下,如果给 "/usr/bin/vim" 设置 SUID 权限,那么任何用户都能使用 "vim" 命令修改任何文件了

4.2 SetGID

s 权限标志出现在文件所属组的 x 权限位时,如 "/usr/bin/locate" 的权限状态 "-rwx--s--x",则代表该文件被设置了 SetGID 权限,简称 SGID。与 SUID 相比,SGID既可以针对文件来设定,又可以针对目录来设定,功能分别如下:

针对文件 SGID 的限制与功能

  • 只有可执行的二进制程序文件才能设置 SGID 权限
  • 命令执行者包括所属组要对该二进制程序拥有执行(x)权限
  • 命令执行者在执行二进制程序时,所属组身份升级为该二进制程序文件的所属组
  • SGID 权限只在二进制程序执行过程中有效,即用户组身份的改变只发生在程序的执行过程中

例如,任何用户都能使用 locate 命令来查询数据库文件 "mlocate.db"。因为使用 locate 命令时,所属组都会被切换为 "slocate"
image.png

针对目录 SGID 的限制与功能:

  • 普通用户必须对此目录拥有 rx 权限
  • 普通用户在此目录中的有效组会变为此目录的所属组
  • 若普通用户对此目录拥有 w 权限时,新建文件的所属组是此目录的所属组

设置 SGID 权限

  • 命令格式:chmod g+s 目录或文件chmod 2(0-7)(0-7)(0-7) 目录或文件
  • 设置的 SGID 权限即 s 权限标志占用所属组原本的 x 权限位。如果显示的是大 S,说明是在所属组没有执行权限的情况下设置的 SGID,这时设置的 SGID 权限是无效的,需要把所属组的执行权限加上才能有效,即变为小 s
  • 权限标志 s 对应的数值是 2

4.3 Sticky Bit

t 权限标志出现在文件其他用户(other)的 x 权限位时,如 "/tmp/" 的权限状态 "drwxrwxrwt",则代表该文件被设置了 Sticky Bit 权限,简称 SBITSBIT 权限只能针对目录生效。

SBIT 的限制与功能

  • 只有目录才可以设置 SBIT 权限
  • 普通用户对此目录拥有 wx 权限
  • 普通用户在此目录下新建文件或子目录时,只有自己和 root 才能删除

例如,目录 "/tmp/" 被设置了 SBIT 权限,普通用户是不能删除该目录下所属者非自己的文件的,即便所有用户对 "/tmp/" 目录都有写权限
image.png

设置 SBIT 权限

  • 命令格式:chmod o+t 目录chmod 1(0-7)(0-7)(0-7) 目录
  • 设置的 SBIT 权限即 s 权限标志占用其他用户原本的 x 权限位。如果显示的是大 T,说明是在其他用户(other)没有执行权限的情况下设置的 SBIT,这时设置的 SBIT 权限是无效的,需要把其他用户(other)的执行权限加上才能有效,即变为小 t
  • 权限标志 t 对应的数值是 1

5 文件隐藏属性

除了上面所说的几种权限外,还可以给文件或目录设置隐藏属性起到权限限制的作用。关于隐藏属性的设置和查看涉及到两个命令 chattrlsattr

5.1 设置隐藏属性:chattr

命令格式:chattr [+-=][属性] 文件或目录

  • +-=+ 增加属性;-:移除属性;=:设定属性,覆盖原有值
  • A:当设定了 A 这个属性时,存取此文件(或目录)时,访问时间 atime 将不会被修改。可避免 I/O 较慢的机器过度的存取磁盘
  • S:一般文件是异步写入磁盘的,如果加上 S 这个属性时,当你进行文件的修改时,会立即同步写入磁盘中
  • a:文件将只能增加数据,而不能删除也不能修改数据
  • c:会自动的将此文件压缩,在读取的时候将会自动解压缩。对于大文件挺有用的
  • d:使文件(或目录)不会被 dump 备份
  • i:让一个文件(或目录)不能被删除、改名、设定连结也无法写入或新增数据
  • s:文件被删除时,将会被完全的移除出这个硬盘空间,所以如果误删了,完全无法救回来了
  • u:与 s 相反的,该文件被删除了,则数据内容其实还存在磁盘中,可以恢复该文件

示例:

# 1. 创建一个文件
[root@localhost ~]# touch testfile
# 2. 给 testfile 文件设置 "i" 属性
[root@localhost ~]# chattr +i testfile 
# 3. 试图删除 testfile 文件失败,即使是 root 用户
[root@localhost ~]# rm -rf testfile 
rm: 无法删除"testfile": 不允许的操作
# 4. 移除 "i" 属性
[root@localhost ~]# chattr -i testfile 
# 5. 再次删除成功
[root@localhost ~]# rm -rf testfile 
[root@localhost ~]# 
chattr 命令只有在 ext2/ext3/ext4 文件系统下才生效

5.1 查询隐藏属性:lsattr

命令格式:lsattr 选项 文件或目录

  • 选项

    • -a:将目录下隐藏文件的属性也展示出来
    • -d:如果查询的是目录,仅列出目录本身的属性而非目录内的文件
    • -R:连同子目录的数据也一并列出来

示例:

[root@localhost ~]# touch testfile
[root@localhost ~]# lsattr testfile 
-------------e- testfile
[root@localhost ~]# chattr +aiS testfile 
[root@localhost ~]# lsattr testfile 
--S-ia-------e- testfile
[root@localhost ~]# 

小飞侠
388 声望80 粉丝

一切都在进行着,唯一可能停止的只有自己!!!