type
status
date
slug
summary
tags
category
icon
password
 

文件默认权限:umask

umask 就是指定 “目前使用者在创建文件或目录时候的权限默认值”

查看和设置umask

查阅
  • 直接输入 umask ,就可以看到数字体态的权限设置分数
  • 输入 umask加入 -S(Symbolic) 这个选项,就会以符号类型的方式来显示出权限了!
    • notion image
奇怪的是,怎么 umask 会有四组数字啊?不是只有三组吗?是没错啦。 第一组是特殊权限用的,我们先不要理他,所以先看后面三组即可。
在默认权限的属性上,目录与文件是不一样的。默认情况如下:
  • 若使用者创建为“文件”则默认“没有可执行( x )权限”,亦即只有 rw 这两个项目,也就是最大为 666 分,默认权限如下:
    • rw-rw-rw-
  • 若使用者创建为“目录”,则由于 x 与是否可以进入此目录有关,因此默认为所有权限均开放,亦即为 777 分,默认权限如下:
    • drwxrwxrwx
umask 的分数指的是“该默认值需要减掉的权限!
为 r、w、x 分别是 4、2、1 分
root 的 umask 默认是 022 , 这是基于安全的考虑啦~至于一般身份使用者,通常他们的 umask 为 002 ,亦即保留同群组的写入权力

举例说明

rootd的umask 默认为 022 ,所以 user(owner) 并没有被拿掉任何权限,不过 group 与others 的权限被拿掉了 2 (也就是 w 这个权限),那么当使用者:
  • 创建文件时:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r--
  • 创建目录时:(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x

umask的利用与重要性:团队合作

root默认umask为022,当我们需要新建文件给同群组的使用者共同编辑时,那么 umask 的群组就不能拿掉 2 这个 w 的权限! 所以啰, umask 就得要是 002 之类的才可以!这样新建的文件才能够是 -rw-rw-r-- 的权限模样喔!
那么如何设置 umask 呢?直接在 umask 后面输入 002 就好了!
例题:假设你的 umask 为 003 ,请问该 umask 情况下,创建的文件与目录权限为?
答:umask 为 003,所以拿掉的权限为 --------wx,因此:
文件: (-rw-rw-rw-) - (--------wx) = -rw-rw-r--
目录: (drwxrwxrwx) - (d-------wx) = drwxrwxr--
结论:关于 umask 与权限的计算方式中,教科书喜欢使用二进制的方式来进行 AND 与 NOT 的计算, 不过,鸟哥还是比较喜欢使用符号方式来计算~联想上面比较容易一点~但是,有的书籍或者是 BBS 上面的朋友,喜欢使用文件默认属性 666 与目录默认属性 777 来与 umask进行相减的计算~这是不好的喔!以上面例题来看, 如果使用默认属性相加减,则文件变成:666-003=663,亦即是 -rw-rw--wx ,这可是完全不对的喔!

文件隐藏属性

change attribute
隐藏的属性尤其是在系统安全(Security) 上面重要的紧呢!不过要先强调的是,下面的chattr指令只能在Ext2/Ext3/Ext4的 Linux传统文件系统上面完整生效, 其他的文件系统可能就无法完整的支持这个指令了,例如 xfs 仅支持部份参数而已

chattr 设置文件隐藏属性

change attribute的缩写
usge:
chattr +-= 文件或目录名称
选项与参数:
  • + :增加某一个特殊参数,其他原本存在参数则不动。
  • :移除某一个特殊参数,其他原本存在参数则不动。
  • = :设置一定,且仅有后面接的参数
  • A :当设置了 A 这个属性时,若你有存取此文件(或目录)时,他的存取时间 atime 将不会被修改,可避免 I/O 较慢的机器过度的存取磁盘。(目前建议使用文件系统挂载参数处理这个项目)
  • S :一般文件是非同步写入磁盘的(原理请参考前一章sync的说明),如果加上 S 这个属性时,当你进行任何文件的修改,该更动会“同步”写入磁盘中。
  • a :当设置 a 之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root 才能设置这属性
  • c :这个属性设置之后,将会自动的将此文件“压缩”,在读取的时候将会自动解压缩,但是在储存的时候,将会先进行压缩后再储存(看来对于大文件似乎蛮有用的!)
  • d :当 dump 程序被执行的时候,设置 d 属性将可使该文件(或目录)不会被 dump 备份
  • i :这个 i 可就很厉害了!他可以让一个文件“不能被删除、改名、设置链接也无法写入或新增数据!”对于系统安全性有相当大的助益!只有 root 能设置此属性s :当文件设置了 s 属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘空间,所以如果误删了,完全无法救回来了喔!u :与 s 相反的,当使用 u 来设置文件时,如果该文件被删除了,则数据内容其实还存在磁盘中,可以使用来救援该文件喔!
注意1:属性设置常见的是 a 与 i 的设置值,而且很多设置值必须要身为 root 才能设置
注意2:xfs 文件系统仅支持 AadiS 而已
这个指令是很重要的,尤其是在系统的数据安全上面!由于这些属性是隐藏的性质,所以需要以 lsattr 才能看到该属性呦!其中,个人(鸟哥)认为最重要的当属 +i 与 +a 这个属性了。+i 可以让一个文件无法被更动,对于需要强烈的系统安全的人来说, 真是相当的重要的!里头还有相当多的属性是需要 root 才能设置的呢!

lsattr 显示文件隐藏属性

list attribute的缩写
usage: lsattr [-adR] 文件或目录
选项与参数:
  • a :将隐藏文件的属性也秀出来;
  • d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名;
  • R :连同子目录的数据也一并列出来

6.4.3文件特殊权限:SUID,SGID,SBIT

Set UID

当 s 这个标志出现在文件拥有者的 x 权限上时,例如刚刚提到的 /usr/bin/passwd 这个文件的权限状态:“-rwsr-xr-x”,此时就被称为 Set UID,简称为 SUID 的特殊权限。 那么SUID的权限对于一个文件的特殊功能是什么呢?基本上SUID有这样的限制与功能:
  • SUID 权限仅对二进制程序(binary program)有效;
  • 执行者对于该程序需要具有 x 的可执行权限;
  • 本权限仅在执行该程序的过程中有效 (run-time);
  • 执行者将具有该程序拥有者 (owner) 的权限。
举例说明
在Linux系统中,所有账号密码都记录在/etc/shadow这个文件里面,这个文件的权限为:---------- 1 root root 。因此该文件只有root可读,可写,从而而改变该文件内容。然而一般用户却可以使用passwd命令修改密码,同时也意味着改变了/etc/shadow的内容,可是一般用户对于shadow文件来说没有一点儿权限啊。为什么呢?
notion image
passwd指令属性图
答:结合上述SUID的四个限制与功能分析。
  1. 一般用户对于 /usr/bin/passwd 这个程序来说是具有 x 权限的,表示 dmtsai 能执行passwd。所以一般用户执行passwd的时候,就获得SUID的特殊权限----执行者将具有该程序拥有者 (owner) 的权限
  1. passwd 的拥有者是 root 这个帐号,所以一般用户执行 passwd 的过程中,会“暂时”获得 root 的权限,这样一般用户就有权修改/etc/shadow中的数据
passwd修改密码,这个指令与shadow之间有什么关系呢?passwd怎么使shadow的数据改变的呢?不知道
注意
  • SUID 仅可用在binary program 上, 不能够用在 shell script 上面!这是因为 shell script 只是将很多的 binary 可执行文件叫进来执行而已!所以 SUID 的权限部分,还是得要看 shell script 调用进来的程序的设置, 而不是 shell script 本身。
  • SUID 对于目录也是无效的~这点要特别留意。

Set GID

当 s 标志在文件拥有者的 x 项目为 SUID,那 s 在群组的 x 时则称为 Set GID, SGID 啰
如/usr/bin/locate这个程序就有SGID:
notion image
对文件,SGID有如下功能
与 SUID 不同的是,SGID 可以针对文件或目录来设置!
  • SGID 对二进制程序有用
  • 程序执行者对于该程序来说,需具备 x 的权限
  • 执行者在执行的过程中将会获得该程序群组的支持!
举例说明
上面的 /usr/bin/locate 这个程序可以去搜寻 /var/lib/mlocate/mlocate.db 这个文件的内容(详细说明会在下节讲述), mlocate.db 的权限如下:
notion image
所以当一般用户执行locate时将会获得slocate群组的支持,因此一般用户就能够读取mlocate了。
对目录,SGID有如下功能
  • 使用者若对于此目录具有 r 与 x 的权限时,该使用者能够进入此目录;
  • 使用者在此目录下的有效群组(effective group)将会变成该目录的群组;
  • 用途:若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同。
SGID 对于专案开发来说是非常重要的!因为这涉及群组权限的问题
对目录的SGID这块不太懂,看完下面鸟哥给的情景题,自己模拟一遍就懂了,这道题是模拟专案开发的

例题:模拟组员间专案开发,更好理解SGID

假设系统中有两个帐号,分别是 alex 与 arod ,这两个人除了自己群组之外还共同支持一个名为 project 的群组。假设这两个用户需要共同拥有 /srv/ahome/ 目录的开发权,且该目录不许其他人进入查阅。 请问该目录的权限设置应为何?请先以传统权限说明,再以 SGID 的功能解析。
目标:了解到为何专案开发时,目录最好需要设置 SGID 的权限!
前提:多个帐号支持同一群组,且共同拥有目录的使用权!
需求:需要使用 root 的身份来进行 chmod, chgrp 等帮用户设置好他们的开发环境才行! 这也是管理员的重要任务之一!
解析:
notion image
创建好了用户alex,arod。他们除了有自己的群组之外还共同支持project群组。两人的专案开发目录文件夹ahome也创建好了,权限为770。
现在用户alex在ahome使用touch test.txt创建一个文件,属性如下:
notion image
由于是alex创建的,所以默认owner 和group都是alex。显然,此时arod对于此文件来说是others,故arod无法修改此文件,他们无法共同开发该文件。需要root系统管理员将该文件的群组改为alex和arod共有的project群组才能达到专案开发。如果他们要共同开发更多的文件呢?两个人中的一个创建的文件另一方都无法编辑,都需要root修改文件群组为project。相当麻烦。
现在我们使用SGID权限,解决此麻烦。为alex和arod共同的目录ahome设置SGID:
notion image
有了SGID,此时有何改变呢?
对目录,SGID有如下功能
  • 使用者若对于此目录具有 r 与 x 的权限时,该使用者能够进入此目录;
  • 使用者在此目录下的有效群组(effective group)将会变成该目录的群组;
  • 用途:若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同。
着重看后两条在此情景的意义:
使用者在此目录下的有效群组将会变成该目录的群组
如国arod和alex在ahome目录下,他们的有效群组都变成project(ahome目录的群组),有效群组不再是他们本身的群组,如alex自身群组alex。
结合SGID的第三条功能,若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同。那么说明此时alex和arod创建的新文件都是群组为project。下面创建新文件,验证该功能。
notion image
可见现在alex创建的新文件群组编程project了~arod创建的文件群组也会是project。这样一来他们就可以专案开发了!
理解图示:
notion image

Sticky Bit

这个 Sticky Bit, SBIT 目前只针对目录有效,对于文件已经没有效果了。SBIT 对于目录的作用是
  • 当使用者对于此目录具有 w, x 权限,亦即具有写入的权限时;
  • 当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件
  • 理解图示:
notion image
举例来说,我们的 /tmp 本身的权限是“drwxrwxrwt”, 在这样的权限内容下,任何人都可以在 /tmp内新增、修改文件,但仅有该文件/目录创建者与 root 能够删除自己的目录或文件。

SUID/SGID/SBIT权限设置

  • 4 为 SUID
  • 2 为 SGID
  • 1 为 SBIT
chmod数字设置法
使用chmod 4/2/1xyz filename
例如:设置test文件权限为-rwsr-xr-x
chmod字符设置法
SUID 为 u+s ,而 SGID 为 g+s ,SBIT 则是o+t

6.4.4 观察文件类型:file

如果你想要知道某个文件的基本数据,例如是属于 ASCII 或者是 data 文件,或者是 binary , 且其中有没有使用到动态函数库 (share library) 等等的信息,就可以利用 file 这个指令来检阅喔
notion image
通过这个指令,我们可以简单的先判断这个文件的格式为何喔
Gus7i
Gus7i
Just for fun
公告
type
status
date
slug
summary
tags
category
icon
password
keep thinkinnnnnng
notion image