Linux文件的隐藏属性和特殊权限

1.隐藏属性

1.1 chattr可以设置文件的隐藏属性,用法如下:

[root@Ansible user1]# chattr --help
Usage: chattr [-RVf] [-+=aAcCdDeijsStTu] [-v version] files…
部分选项与参数解释:
-R:递归处理,将指定目录下的所有文件及子目录一并处理。
-V:显示指令执行过程。
-f:禁止显示错误信息。
-v:<版本编号> 设置文件或目录版本。
+:增加文件或目录的属性。
-:删除文件或目录的属性。
=:指定文件或目录的属性。
a:设置此权限时,文件内容只能增加,不能删除或修改,仅root可以设置此权限。
A:设置此权限时,文件的读取时间(mtime)不会被修改。
c:设置此权限时,文件自动压缩,读取时自动解压缩。
s:设置此权限时,文件将完全从磁盘中删除,无法恢复。
S:设置此权限时,文件被修改时后会同步写入磁盘,一般文件是非同步写入磁盘。
u:设置此权限时,文件被删除后可恢复。

但是并不是所有的的文件系统都适用这些属性,根据man page可以知道:

xfs文件系统支持以下属性:

FILE ATTRIBUTES
       The XFS filesystem supports setting the following file attributes on Linux systems using the chattr(1) utility:
       a - append only
       A - no atime updates
       d - no dump
       i - immutable
       S - synchronous updates

ext3,ext4文件系统支持以下属性:

FILE ATTRIBUTES
       The ext2, ext3, and ext4 filesystems support setting the following file attributes on Linux systems using the chattr(1) utility:
       a - append only
       A - no atime updates
       d - no dump
       D - synchronous directory updates
       i - immutable
       S - synchronous updates
       u - undeletable
       In addition, the ext3 and ext4 filesystems support the following flag:
       j - data journaling
       Finally, the ext4 filesystem also supports the following flag:
       e - extents format

1.2 lsattr可以查看文件的隐藏属性

[root@Ansible user1]# lsattr -a 1.txt
---------------- 1.txt
[root@Ansible user1]# chattr +i 1.txt
[root@Ansible user1]# lsattr -a 1.txt
----i----------- 1.txt
[root@Ansible user1]# rm 1.txt
rm: remove regular file ‘1.txt’? y
rm: cannot remove ‘1.txt’: Operation not permitted
[root@Ansible user1]#

2.特殊权限:SUID、SGID、SBIT

先观察一下系统某些文件的特殊权限:

[root@Ansible user1]# ls -ld /tmp/
drwxrwxrwt. 11 root root 4096 Nov 7 15:31 /tmp/
[root@Ansible user1]# ls -ld /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd

可以看到除了rwx权限外,还有st权限。

2.1 Set UID

当s权限在文件拥有者的x权限位置上时,称为Set UID,简称为SUID的特殊权限。当文件拥有SUID权限时,文件拥有以下功能:

  • SUID权限仅对二进制程序有效;
  • 执行程序的用户需要拥有该程序的执行权限;
  • SUID权限仅在执行该程序的过程中有效;
  • 执行程序的用户将暂时获取该程序的owner权限。

举个例子,加深理解:

我们知道系统的账号密码都记录在/etc/shadow文件内,但是这个文件只有root才有权限修改;由于普通用户没有权限写入,原则上普通用户就无法修改密码。但实际上是可以的,这就是SUID发挥的作用。

我们看下passwd程序的权限:

[root@Ansible user1]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd

首先普通用户拥有passwd命令的执行权限,而root是passwd程序的owner。当普通用户执行passwd命令时,普通用户会暂时拥有root的权限,从而完成密码的修改。

2.2 Set SGID

当s权限在文件用户组的x权限位置上时,称为Set SGID。与SUID不同的是,它还可以针对目录来设置权限。对于目录来说,具有以下功能:

  • 用户如果对此目录拥有rx权限时,该用户能够进入此目录;
  • 用户在此目录下的有效用户组将会变成该目录的用户组;
  • 如果用户在此目录下具有w权限,那么用户所新建的文件的用户组和此目录的用户组相同。

2.3 Sticky Bit

SBIT仅对目录有效,作用如下:

  • 当用户拥有目录的wx权限时,即具有写入权限;
  • 当用户在此目录下新建文件或目录时,仅有自己与root可以删除文件。

3.特殊权限设置

SUID、SGID、SBIT权限的数字代表分别为421。

设置权限时原则上应该是四位数字,例如0644,但是我们一般都会直接写后面三位数,第一位数字其实就是特殊权限的位置。比如要设置SUID、SGID权限,运行命令【 chmod 6644 filename 】即可。

特殊情况:当文件的权限为0666时,再增加特殊权限,字母会显示大写:

[root@Ansible user1]# chmod 7666 1.txt
[root@Ansible user1]# ll 1.txt
-rwSrwSrwT. 1 root root 2 Nov 7 14:48 1.txt


「 文章如果对你有帮助,请点个赞哦^^ 」 

2+