Linux 基础 - 预设权限(umask),隐藏权限(chattr/lsattr)和特殊权限(SUID/SGID/SBIT)

预设权限

umask

umask 表示当前用户建立档案和目录时的预设权限。

1
2
$ umask
0022

umask 针对档案和目录的权限是不同的,对于新的档案,是不包括执行(x)权限的,而目录则包括所有权限,返回的数字是指应该减去的分数,进行反向计算,0022 表示,新的档案的权限为 -rwxr-xr-x。例如:

1
2
3
4
5
6
7
8
9
$ mkdir test
$ cd test
$ umask 0022
$ touch test_file
$ mkdir test_dir
$ ls -Al

drwxr-xr-x 0 Pango Pango 512 May 14 23:23 test_dir
-rw-r--r-- 1 Pango Pango 0 May 14 23:23 test_file

umask -S 加上 -S 参数则显示正向计算的结果

1
2
$ umask -S
u=rwx, g=rx,o=rx

0022 表示,user 拥有全部权限,而 groupothers 则被减去了 write 权限。

1
$ umask 002 # 直接通过后接数字来设置 umask 的值。

在架设 SAMBA ServerFTP Server 时,umask 的值涉及到你的用户能否对新建的档案进行进一步操作的问题。

root 用户的 umask 是 022,一般用户则是 002,这是出于安全的考虑,关于 umask 预设设定可以参考 /etc/bashrc 这个文件,不过不建议修改该档案。

隐藏权限

chattr

修改档案或目录的隐藏属性,change attribute

1
$ chattr [+-=][ASacdistu] 档案或目录名称
  • +: 追加一个特殊参数
  • -: 移除一个特殊参数
  • =: 设置特殊参数
  • A: 当设定了该参数后,当读取此档案或目录时,其 atime 不会被修改
  • S: 一般的档案是异步写入磁盘的,如果设置了 S 参数,则对档案进行的任何修改,都会以同步方式写入磁盘
  • a: 该档案只能新增资料,而不能删除也不能修改资料,只有 root 用户能设定该属性
  • c: 自动压缩档案,读取时自动解压缩,存储时先压缩再存储
  • d: 当 dump 程序执行的时候,被设定为 d 属性的档案不参与备份。
  • i: 使一个档案「无法被删除,修改,改名,设置连接」,只有 root 用户可以设置此属性。
  • s: 硬删除,无法进行磁盘复原
  • u: 与 s 相反,如果该档案被删除,可以使用相关工具复原。

以上属性中最重要的当属 ai 了。+a 常用于对某些非常重要的档案的安全控制,而 +i 则常用于日志档案。

lsattr

显示档案或目录的隐藏属性,list attributes

1
$ lsattr -[adR] 档案或目录
  • -a: 将隐藏档案的属性也显示出来
  • -d: 如果连接的是目录,仅列出目录本身的属性而非目录内的档案
  • -R: 递归显示

特殊权限

SUID

Set UID 的缩写,该权限有以下限制和功能:

  • SUID 仅对二进制程序有效
  • 执行者对于该程序需要有 x 的执行权限
  • SUID 仅在执行该程序的过程中有效
  • 执行者将获得该程序拥有者的权限。

例如,/etc/shadow 档案保存了所有用户的密码,该文档的权限为 --------- l root root,意即该档案仅 root 用户可以强制写入,那么一般用户在执行 passwd 命令时其实是可以修改自己的密码的,这就是 SUID 的功能,即:

  1. 一般用户对 /usr/bin/passwd 程序具有 x 权限
  2. shadow 档案拥有者是 root 用户
  3. 一般用户执行 passwd 的过程中,会「暂时」获得 root 的权限
  4. /etc/shadow 就能被一般用户执行的 passwd 修改。

SUID 对目录是无效的,其以 s 取代「拥有者用户」一栏的 x 权限。

SGID

s 出现在群组权限的执行权限上时,则称为 SGID。SGID 有如下功能:

  • SGID 对二进制程序有用
  • 使用该程序的用户必须对该程序有 x 权限
  • 用户在执行过程中会获得该程序群组的权限

当 SGIP 作用于目录时,将:

  • 用户对此目录具有 rx 的权限,该用户能够进入此目录
  • 用户在此目录下的有效群组将会变成该目录的群组
    若用户在目录下有 w 权限,则用户新建的档案,该档案所属的群组与目录所属的群组相同。

当设置 SGID 后,将以 s 取代在「群组」权限一栏的 x 权限。

Sticky Bit

目前只针对目录有效,其作用是,用户对某个目录具有 wx 权限时,在该目录下创建档案或目录后,仅用户自己与 root 才能删除这些档案或目录。该功能让多个用户在同一目录下管理与自己相关的文件。

对目录设置 SBIT 后,将以 t 取代「其他用户」权限的 x 权限。

设定 SUID/SGID/SBIT

之前的权限设定是只有 3 个数字,加上 SUID/SGID/SBIT 之后变成了 4 个数字,执行 chmod 4755 filename 来为该文件新增特殊权限。4755 的字符串表示为 -rwsr-xr-x

st 都是取代 x 这个权限,但当权限为 7666 时,由于在「用户」,「群组」和「其他用户」三栏都不包含「执行(x)」权限,字符串将以大写 S 和 大写 T 来表示,以示该权限实际上无效。例如:

1
2
$ chmod 7666 test; ls -l test 
-rw S rw S rw T 1 root root 0 Jun 16 02:53 test

除了数字法赋值权限之外,还可以使用 u+s 追加 SUID 权限、g+s 追加 SGID 权限和 o+t 追加 SBIT 权限。

file(观察档案类型)

file 指令用于判断档案的类型,例如:

1
2
$ file ~/.bashrc
/root/.bashrc: ASCII text