Zach的博客

Linux文件与目录的默认、隐藏和特殊权限

默认权限

在Linux下创建一个文件或者目录的默认权限和umask相关,umask指定“当前用户在创建文件或者目录时的权限默认值”。用umask来查看文件或目录的默认权限值:

1
➜  ~ umask
002

需要注意的是umask指定文件或目录的默认值应该减去的数值。而对于一个文件,默认值是“-rw-rw-rw”,对一个目录,默认值是“drwxrwxrwx”,举例来说,如果当前用户创建了一个文件,那么文件的权限默认值就是

1
(-rw-rw-rw-) - (--------w-) => -rw-rw-r--

隐藏属性

可以利用chattrlsattr来修改和查看文件或目录的隐藏属性。需要注意的是这两个命令只在Ext2/Ext3文件系统上有效。

命令使用方法:

1
chattr [+-=] [ASacdistu] files...

这里只说明两个参数,其余可以参见manual

  • i: 让一个文件不能被删除、改名、设置连接、写入或添加数据。只有root才能设置该属性。
  • a: 设置a之后,这个文件只能添加数据,而不能删除也不能修改数据,只有root才能设置该属性。

lsattr查看隐藏属性,用法简单,可以直接查看manual

文件特殊权限

Linux有三个特殊权限:

  • SUID
  • SGID
  • SBIT

SUID

当s标志出现在文件所有者的x权限上时,此时就被成为SET UID,即SUID的特殊权限。

SUID有这样的功能和限制:

  1. 仅仅对二进制程序有效
  2. 执行者对该程序具有科执行的权限
  3. 本权限仅仅在执行过程中有效
  4. 执行者将拥有该程序所有者的权限(仅在执行过程中)

举例来说:

1
➜  ~ ls -l /usr/bin/passwd 
-rwsr-xr-x 1 root root 54256 3月  29 17:25 /usr/bin/passwd

passwd是一个二进制程序,它的所有者是root,但是当我们用用户身份登入时一样可以执行该程序并修改自己的密码(这回修改/etc/shadow文件)。这是因为passwd拥有SUID权限。

SGID

当s标志在用户组的x时,成为SET GID,即SGID。SGID可以作用于一个文件,也可以作用于一个目录。

当作用于一个文件时:

  1. SGID对二进制程序有效
  2. 程序执行者对该程序有执行的权限
  3. 执行者在执行的过程中可以得到程序所在用户组的权限。

当作用于一个目录时:

  1. 用户若对此目录有r和x的权限,该用户能够进入此目录(前提)
  2. 用户在目录下的有效用户组将会变成该目录的用户组
  3. 若用户在此目录下具有w的权限,则用户所创建的文件将与此目录的用户组相同。

SBIT

SBIT(Sticky Bit)只对目录有效。它对目录的作用是:

  1. 当用户对此目录有w和x的权限,即具有写入权限时(前提)
  2. 当用户在该目录下创建文件或目录时,仅自己与root才有权限删除该文件。

如果一个目录D有SBIT权限,当用户A在D下只能对自己创建的文件或目录进程删除、重命名、移动等操作,而无法删除他人的文件。