Linux系统上的特殊权限

特殊权限:SUID, SGID, STICKY

安全上下文:

  1. 1、进程以某用户的身份运行; 进程是发起此进程用户的代理,因此以此用户的身份和权限完成所有操作;<br /> 2、权限匹配模型:<br /> (1) 判断进程的属主,是否为被访问的文件属主;如果是,则应用属主的权限;否则进入第2步;<br /> (2) 判断进程的属主,是否属于被访问的文件属组;如果是,则应用属组的权限;否则进入第3步;<br /> (3) 应用other的权限;

SUID:

  1. 默认情况下:用户发起的进程,进程的属主是其发起者;因此,其以发起者的身份在运行; <br /> SUID的功用:用户运行某程序时,如果此程序拥有SUID权限,那么程序运行为进程时,进程的属主不是发起者,而程序文件自己的属主;<br /> <br /> 管理文件的SUID权限:<br /> chmod u+|-s FILE...<br /> <br /> 展示位置:属主的执行权限位<br /> 如果属主原本有执行权限,显示为小写s; <br /> 否则,显示为大写S;<br />

SGID:

  1. 功用:当目录属组有写权限,且有SGID权限时,那么所有属于此目录的属组,且以属组身份在此目录中新建文件或目录时,新文件的属组不是用户的基本组,而是此目录的属组;<br /> <br /> 管理文件的SGID权限:<br /> chmod g+|-s FILE...<br /> <br /> 展示位置:属组的执行权限位<br /> 如果属组原本有执行权限,显示为小写s; <br /> 否则,显示为大写S;<br /> <br />

Sticky:

  1. 功用:对于属组或全局可写的目录,组内的所有用户或系统上的所有用户对在此目录中都能创建新文件或删除所有的已有文件;如果为此类目录设置Sticky权限,则每个用户能创建新文件,且只能删除自己的文件;<br /> <br /> 管理文件的Sticky权限:<br /> chmod o+|-t FILE...<br /> <br /> 展示位置:其它用户的执行权限位<br /> 如果其它用户原本有执行权限,显示为小写t; <br /> 否则,显示为大写T;<br /> <br /> 系统上的/tmp和/var/tmp目录默认均有sticky权限;<br /> <br />管理特殊权限的另一方式:<br /> suid sgid sticy 八进制权限<br /> 0 0 0 0<br /> 0 0 1 1<br /> 0 1 0 2<br /> 0 1 1 3<br /> 1 0 0 4<br /> 1 0 1 5<br /> 1 1 0 6<br /> 1 1 1 7<br /> <br />基于八进制方式赋权时,可于默认的三位八进制数字左侧再加一位八进制数字; <br /> 例如:chmod 1777

facl:file access control lists

  1. 文件的额外赋权机制:<br /> 在原来的u,g,o之外,另一层让普通用户能控制赋权给另外的用户或组的赋权机制;<br /> <br /> getfacl命令:<br /> getfacl FILE...<br /> user:USERNAME:MODE<br /> group:GROUPNAME:MODE<br /> <br /> setfacl命令:<br /> 赋权给用户:<br /> setfacl -m u:USERNAME:MODE FILE...<br /> 赋权级组:<br /> setfacl -m g:GROUPNAME:MODE FILE...<br /> <br /> 撤销赋权:<br /> setfacl -x u:USERNAME FILE...<br /> setfacl -x g:GROUPNAME FILE...<br /> 当用户启动发起访问某个文件的时候,首先会检查这个用户进程的属主是否与被访问的文件属主相同 ,<br /> 如果相同则应用属主的权限,否则就检查该文件的访问控制列表,是否有该用户的权限,<br /> 如果有则应用此用户在访问控制列表中设定的权限,否则,检查此进程的属主是否属于文件的属主,<br /> 如果是则应用属主权限,否则就检查该文件的访问控制列表,是否有该用户属主的权限,有则应用<br /> 无则使用其他权限

attr

Attribute lsattrflag chattr option Semantics and rationale
No
atimeupdates
A +A to set

-A to clear
When a file with the A attribute set is accessed. its atime record is not modified.
This avoids a certain amount of disk I/O for laptop systems.
Append only a +a to set
-a to clear
A file with the a attribute set can only be open in append mode for writing.
Compressed c +c to set
-c to clear
A file with the c attribute set is automatically compressed on the disk by the kernel.
A read from this file returns uncompressed data.
A write to this file compresses data before storing them on the disk.
Synchronous
directory updates
D +D to set
-D to clear
When a directory with the D attribute set is modified, the changes are written synchronously on the disk
This is equivalent to the dirsync mount option, applied to a subset of the files.
No dump d +d to set
-d to clear
A file with the d attribute set is not candidate for backup when the dump program is run.
Compression
error
E (unavailable) The E attribute is used by the experimental compression patches to indicate that a compressed file
has a compression error.
Extent format e (unavailable) The e attribute indicates that the file is using extents for mapping the blocks on disk.
Huge file h (unavailable) The attribute indicates the file is storing its blocks in units of the filesystem blocksize instead of in units of sectors.
It means that the file is, or at one time was, larger than 2TB.
Indexed
directory
I (unavailable) The I attribute is used by the htree program code to indicate that a directory is being indexed using hashed trees.
Immutable i +i to set
-i to clear
A file with the i attribute cannot be modified.
It cannot be deleted or renamed, no link can be created to this file and no data can be written to the file.
When set, prevents, even the superuser, from erasing or changing the contents of the file.
Data
journaling
j +j to set
-j to clear
A file with the j attribute has all of its data written to the ext3 journal before being written to the file itself, if the filesystem is mounted with the “data=ordered” or “data=writeback” options.
When the filesystem is mounted with the “data=journal” option all file data is already journaled, so this attribute has no effect.
Secure
deletion
s +s to set
-s to clear
When a file with the s attribute set is deleted, its blocks are zeroed and written back to the disk.
Synchronous
updates
S +S to set
-S to clear
When a file with the s attribute set is modified, the changes are written synchronously on the disk;
this is equivalent to the ‘sync’ mount option applied to a subset of the files.
This is equivalent to the symc mount option, applied to a subset of the files.
Top of
directory hierarchy
T +T to set A directory with the T attribute will be deemed to be the top of directory hierarchies for the purposes of the Orlov block allocator.
This is a hint to the block allocator used by ext3 and ext4 that the subdirectories under this directory are not related, and thus should be spread apart for allocation purposes.
For example: it is a very good idea to set the T attribute on the /homedirectory, so that/home/johnand /home/mary are placed into separate block groups.
For directories where this attribute is not set, the Orlov block allocator will try to group subdirectories closer together where possible.
-T to clear
No tail-
merging
t +t to set For those filesystems which support tail-merging. a file with the t attribute will not have a partial block fragment at the end of the file merged with other files.
This is necessary for applications such as LILO which read the filesystem directly, and which don’t understand tail-merged files.
-t to clear
Undeletable u +u to set When a file with the u attribute set is deleted, its contents are saved.
This allows the user to ask for its undeletion.
-u to clear
Compression
raw access
x (unavailable) The x attribute is used by the experimental compression patches to indicate that a raw contents of a compressed file can be accessed directly.
Compressed
dirty file
Z (unavailable) The z attribute is used by the experimental compression patches to indicate a compressed file is “dirty”.
Version /
generation number
-v version File’s version/generation number.

lsattr

lsattr 命令的输出结果包含两部分,第一部分是文件的基本属性,第二部分是文件的扩展属性。

基本属性包括:

  • -: 没有任何属性设置;
  • a: 表示文件或目录的访问时间不会被修改;
  • c: 表示文件或目录的修改时间不会被修改;
  • d: 表示文件或目录被当作目录使用;
  • i: 表示文件或目录不可修改;
  • s: 表示文件或目录删除时,其数据块会被清零;
  • t: 表示文件或目录不可修改、删除、重命名;

扩展属性包括:

  • a: 表示文件或目录有 atime 更新约定;
  • A: 表示文件或目录的 atime 更新约定被取消;
  • c: 表示文件或目录有 ctime 更新约定;
  • C: 表示文件或目录有同步写入约定;
  • e: 表示文件或目录不可执行;
  • i: 表示文件或目录不可修改、删除、重命名;
  • j: 表示文件或目录有数据日志更新约定;
  • S: 表示文件或目录有同步写入约定;
  • u: 表示文件或目录在删除时会保留其数据块,以便恢复。

其中,扩展属性需要在支持扩展属性的文件系统上才能使用,例如 ext2、ext3、ext4 文件系统。如果文件系统不支持扩展属性,则 lsattr 命令只会显示基本属性。

chattr

chattr 命令是 Linux 系统中用于更改文件或目录的属性的命令,可以用于设置或取消设置文件或目录的扩展属性,包括不可修改、不可删除、同步写入等属性。

下面是 chattr 命令的语法:

chattr [OPTION]... [+|-|=] [aAcCdDeijPsStTu] FILE...
其中,OPTION 是可选参数,FILE 是要更改属性的文件或目录名。+ 表示添加属性,- 表示取消属性,= 表示设置属性。

aAcCdDeijPsStTu 是属性选项,每个选项对应一种属性,具体如下所示:

  • a:当文件被打开进行写入时,数据会追加到文件末尾(类似于 >> 操作符)。
  • A:当文件被打开进行写入时,数据会追加到文件末尾,但是会保留文件上次的访问时间。
  • c:当文件被打开进行写入时,不更新文件的修改时间(ctime)。
  • C:当文件被打开进行写入时,将数据写入文件后立即将数据同步到磁盘中。
  • d:当文件被删除时,将文件内容清零,但是文件的目录项和文件名仍然存在。
  • D:当文件被删除时,会释放文件的磁盘空间并清除文件的内容。
  • e:当文件被执行时,将文件的拓展属性设置为不可修改。
  • i:将文件设置为不可写入、不可删除、不可修改、不可链接。
  • j:让文件数据写入一个日志文件,以保证文件系统的完整性。
  • n:将文件设置为不可备份。
  • P:当文件被打开进行写入时,将数据写入文件前先将数据同步到磁盘中。
  • s:当文件被删除时,将文件块清零。
  • S:当文件被修改时,将数据同步到磁盘中。
  • t:当文件被执行时,将文件的拓展属性设置为不可修改、不可删除。
  • u:当文件被删除时,保留文件的内容以及文件的目录项和文件名,但是将文件标记为已删除状态。
  • U:当文件被删除时,会释放文件的磁盘空间,但是文件内容不会被清除,并且文件的目录项和文件名仍然存在。

下面是一些 chattr 命令的示例:

将文件 file.txt 的拓展属性设置为不可修改:
sudo chattr +i file.txt
取消文件 file.txt 的不可修改属性:
sudo chattr -i file.txt
将文件 file.txt 的拓展属性设置为不可删除:
sudo chattr +u file.txt
将文件 file.txt 的拓展属性设置为不可写入、不可删除、不可修改、不可链接:
sudo chattr +iudS file.txt
将目录 dir 和目录下的所有文件的拓展属性设置为不可删除:
sudo chattr -R +u dir
需要注意的是,只有文件或目录的拥有者或超级用户才能更改文件或目录的属性。同时,某些属性只能应用于特定的文件系统,不同的文件系统支持的属性也有所不同。在使用 chattr 命令更改文件或目录的属性时,应该谨慎操作,避免误操作导致数据丢失或系统出现异常。