linux - 文件隐藏属性与文件特殊权限

一般文件的九个权限我这里就不赘述了,一起学习一下文件的隐藏属性吧

这些隐藏的属性确实对于系统有很大的帮助的,尤其是在系统安全(Security) 上面,重要的紧呢!不过要先强调的是,底下的chattr指令只能在Ext2/Ext3/Ext4的Linux 传统文件系统上面完整生效,其他的文件系统可能就无法完整的支持这个指令了,例如xfs 仅支持部份参数而已。底下我们就来谈一谈如何设定与检查这些隐藏的属性吧!

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

 

 

 

 

 这个指令是很重要的,尤其是在系统的数据安全上面!由于这些属性是隐藏的性质,所以需要以lsattr才能看到该属性呦!其中,个人认为最重要的当属+i 与+a 这个属性了。+i 可以让一个文件无法被更动,对于需要强烈的系统安全的人来说,真是相当的重要的!里头还有相当多的属性是需要root 才能设定的呢!此外,如果是log file 这种的登录档,就更需要+a 这个可以增加,但是不能修改旧有的数据与删除的参数了。

lsattr (显示文件隐藏属性)

 

 

 

使用chattr 设定后,可以利用lsattr 来查阅隐藏的属性。不过,这两个指令在使用上必须要特别小心,否则会造成很大的困扰。例如:某天你心情好,突然将/etc/shadow 这个重要的密码记录文件给他设定成为具有i 的属性,那么过了若干天之后,你突然要新增使用者,却一直无法新增!别怀疑,赶快去将i 的属性拿掉吧!

 

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

关于文件的重要权限,那就是rwx 这三个读、写、执行的权限。一般是这三个,但还是有特殊的,比如/tmp 权限,还有,那个/usr/bin/passwd

 

 

 不是应该只有rwx 吗?还有其他的特殊权限( s 跟t )

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可读且仅有root可以强制写入而已。既然这个文件仅有root 可以修改,那么鸟哥的dmtsai 这个一般账号使用者能否自行修改自己的密码呢?你可以使用你自己的账号输入『passwd』这个指令来看看,嘿嘿!一般用户当然可以修改自己的密码了!唔!有没有冲突啊!明明/etc/shadow 就不能让dmtsai 这个一般账户去存取的,为什么dmtsai 还能够修改这个文件内的密码呢?这就是SUID 的功能啦!藉由上述的功能说明,我们可以知道

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

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

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

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

但如果dmtsai 使用cat 去读取/etc/shadow 时,他能够读取吗?因为cat 不具有SUID 的权限,所以dmtsai 执行『cat /etc/shadow』时,是不能读取/etc/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 。举例来说,你可以用底下的指令来观察到具有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 的权限(可以新建文件),则使用者所建立的新文件,该新文件的群组与此目录的群组相同。

StickyBit

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

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

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

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

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

1.以root 登入系统,并且进入/tmp 当中;

2.touch test,并且更改test 权限成为777 ;

3.以一般使用者登入,并进入/tmp;

4.尝试删除test 这个文件!

SUID/SGID/SBIT 权限设定

 

前面介绍过SUID 与SGID 的功能,那么如何配置文件案使成为具有SUID 与SGID 的权限呢?

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

 

 

 

 

 最后一个例子就要特别小心啦!怎么会出现大写的S 与T 呢?不都是小写的吗?因为s 与t 都是取代x 这个权限的,但是你有没有发现阿,我们是下达7666 喔!也就是说,user, group 以及others 都没有x 这个可执行的标志( 因为666 嘛),所以,这个S, T 代表的就是『空的』啦!怎么说?SUID 是表示『该文件在执行的时候,具有文件拥有者的权限』,但是文件拥有者都无法执行了,哪里来的权限给其他人使用?当然就是空的啦!

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

 

 

 

 

 

 

观察文件类型:file

如果你想要知道某个文件的基本数据,例如是属于ASCII 或者是data 文件,或者是binary ,且其中有没有使用到动态函式库(share library) 等等的信息,就可以利用file 这个指令来检阅喔!举例来说:

 

透过这个指令,我们可以简单的先判断这个文件的格式为何喔!包括未来你也可以用来判断使用tar 包裹时,该tarball 文件是使用哪一种压缩功能。。。。

 

posted @ 2022-03-31 17:30  少年Dev  阅读(353)  评论(0编辑  收藏  举报