文件与目录的默认权限与隐藏权限

(整理自《鸟哥的linux私房菜》书籍)

 

1.文件默认权限:umask

你知道当你建立一个新的文件或目录时,他的默认权限会是什么吗?那就与 umask 有关了。基本上, umask 就是指定 『目前用户在建立文件或目录时候的权限默认值』, 那么如何得知或设定 umask 呢?他的指定条件以底下的方式来指定:

 查阅的方式有两种,一种可以直接输入 umask ,就可以看到数字型态的权限设定分数, 一种则是加入 -S (Symbolic) 这个选项,就会以符号类型的方式来显示出权限了。第一组是特殊权限用的,我们先不要理他,先看后面三组即可。

在默认权限的属性上,目录与文件是不一样的。一般文件的建立则不应该有执行的权限,因为一般文件通常是用在于数据的记录,当然不需要执行的权限了。 因此,预设的情况如下:

•        若使用者建立为『文件』则预设『没有可执行( x )权限』,也就是最大为 666 ,预设权限如下:

-rw-rw-rw-

•        若用户建立为『目录』,则由于 x 与是否可以进入此目录有关,因此默认为所有权限均开放,亦即为 777 ,预设权限如下: drwxrwxrwx

要注意的是,umask 的分数指的是『该默认值需要减掉的权限』!因为 r、w、x 分别是 4、2、1 分,也就是说,当要拿掉能写的权限,就是输入 2 分,而如果要拿掉能读的权限,也就是 4 分,那么要拿掉读与写的权限,也就是 6 分,而要拿掉执行与写入的权限,也就是 3 分。

 

因为 umask 为 022 ,所以 user 并没有被拿掉任何权限,不过 group 与 others 的权限被拿掉了 2 (也就是 w 这个权限),那么当使用者:

•        建立文件时:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--

•        建立目录时:(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x

 

2.文件隐藏属性:chattr与lsattr

要先强调的是,底下的 chattr 指令只能在Ext2/Ext3/Ext4 的 Linux 传统文件系统上面完整生效。

§  chattr (配置文件案隐藏属性)

 

这个指令是很重要的,尤其是在系统的数据安全上面!由于这些属性是隐藏的性质,所以需要以 lsattr 才能看到该属性。其中,个人认为最重要的当属 +i 与 +a 这两个属性。

§  lsattr (显示文件隐藏属性)

 

使用 chattr 设定后,可以利用 lsattr 来查阅隐藏的属性。

 

3.文件特殊权限: SUID, SGID, SBIT

首先看看:

 

 不是应该只有 rwx 吗?还有其他的特殊权限( s 跟 t )啊?这与SUID、SGID、SBIT有关。

§  Set UIDSUID

当 s 这个标志出现在文件拥有者的 x 权限上时,例如刚刚提到的 /usr/bin/passwd 这个文件的权限状态:『-rwsr-xr-x』,此时就被称为 Set UID,简称为 SUID 的特殊权限。

SUID 有这样的限制与功能:

•        SUID 权限仅对二进制程序(binary program)有效;

•        执行者对于该程序需要具有 x 的可执行权限;

•        本权限仅在执行该程序的过程中有效 (run-time);

•        执行者将具有该程序拥有者 (owner) 的权限。

我们举个例子来说明:所有账号的密码都记录在 /etc/shadow 这个文件里面,这个文件的权限为:『---------- 1 root root』,意思是这个文件仅有 root 可读且仅有 root 可以强制写入而已。 既然这个文件仅有 root 可以修改,那么一般账号使用者dmtsai能否自行修改自己的密码呢? 使用这个一般账号输入『passwd』这个指令来看看,一般用户可以修改自己的密码。藉由上述的功能说明,我们可以知道:

1.     dmtsai 对于 /usr/bin/passwd 这个程序来说是具有 x 权限的,表示 dmtsai 能执行 passwd;

2.     passwd 的拥有者是 root 这个账号;

3.     dmtsai 执行 passwd 的过程中,会『暂时』获得 root 的权限;

4.     /etc/shadow 就可以被 dmtsai 所执行的 passwd 所修改。

用一张图说明:

 

 另外,SUID 仅可用在 binary program 上, 不能够用在 shell script 上面!这是因为 shell script 只是将很多的 binary 执行档叫进来执行而已!所以 SUID 的权限部分,还是得要看 shell script 呼叫进来的程序的设定, 而不是 shell script 本身。而且,SUID 对于目录也是无效的。

§  Set GIDSGID

当 s 标志在文件拥有者的 x 项目为 SUID,那 s 在群组的 x 时则称为 Set GID, SGID。举例来说,你可以用底下的指令来观察到具有 SGID 权限的文件:

 

 与 SUID 不同的是,SGID 可以针对文件或目录来设定!如果是对文件来说, SGID 有如下的功能:

•        SGID 对二进制程序有用;

•        程序执行者对于该程序来说,需具备 x 的权限;

•        执行者在执行的过程中将会获得该程序群组的支持!

举例来说,上面的 /usr/bin/locate 这个程序可以去搜寻 /var/lib/mlocate/mlocate.db 这个文件的内容, mlocate.db 的权限如下:

 

 与 SUID 非常的类似,若我使用 dmtsai 这个账号去执行 locate 时,那 dmtsai 将会取得 slocate 群组的支持, 因此就能够去读取 mlocate.db。

除了 binary program 之外,事实上 SGID 也能够用在目录上,这也是非常常见的一种用途! 当一个目录设定了 SGID 的权限后,他将具有如下的功能:

•        用户若对于此目录具有 r 与 x 的权限时,该用户能够进入此目录;

•        用户在此目录下的有效群组(effective group)将会变成该目录的群组;

•        用途:若用户在此目录下具有 w 的权限(可以新建文件),则使用者所建立的新文件,该新文件的群组与此目录的群组相同。

§  Sticky Bit(SBIT)

这个 Sticky Bit, SBIT 目前只针对目录有效,对于文件已经没有效果了。SBIT 对于目录的作用是:

•        当用户对于此目录具有 w, x 权限,亦即具有写入的权限时;

•        当用户在该目录下建立文件或目录时,仅有自己与 root 才有权力删除该文件

换句话说:当甲这个用户于 A 目录是具有群组或其他人的身份,并且拥有该目录 w 的权限, 这表示甲用户对该目录内任何人建立的目录或文件均可进行 "删除/更名/搬移" 等动作。 不过,如果将 A 目录加上了 SBIT 的权限项目时, 则甲只能够针对自己建立的文件或目录进行删除/更名/移动等动作,而无法删除他人的文件。

举例来说,我们的 /tmp 本身的权限是『drwxrwxrwt』, 在这样的权限内容下,任何人都可以在 /tmp 内新增、修改文件,但仅有该文件/目录建立者与 root 能够删除自己的目录或文件。这个特性也是挺重要的!

§  SUID/SGID/SBIT 权限设定

•        4 为 SUID

•        2 为 SGID

•        1 为 SBIT

假设要将一个文件权限改为『-rwsr-xr-x』时,由于 s 在用户权力中,所以是 SUID ,因此, 在原先的 755 之前还要加上 4 ,也就是:『 chmod 4755 filename 』来设定!此外,还有大 S 与大 T 的产生。

 

除了数字法之外,你也可以透过符号法来处理,其中 SUID 为 u+s ,而 SGID 为 g+s ,SBIT 则是 o+t 。来看看如下的范例:

 

猜你喜欢

转载自www.cnblogs.com/ericz2j/p/12044542.html