之前对文件权限及属性还存在着一些混淆与模糊,故为了加深印象特写此博文,如有错误或者不严谨到地方,请各位读者一定要积极指出,欢迎大家提问,谢谢!


   文件的权限

顾名思义,文件到权限就是为了保障文件的安全,从而对文件的使用者进行了一些操作限制的一种安全概念。

r:表示拥有该权限的用户可以在文件目录下面查看文件,例如ls

w:表示拥有该权限的用户可以在目录下面新建,修改,移动,删除等操作

x:表示拥有该权限到用户可以cd进入目录,一般对目录都是r和x同时赋予,否则不能进入目录


chmod命令





chmod

      u
+(加入某种属性)

-(去掉某种属性)

=(设置成某种属性)
      r




 文件或者目录的文字

      g
      w
      o

     

       x

       a
                   r
                   w
                    x
                  4
                    2
                    1


chattr:设置文件隐藏属性

-R:递归处理。
-:删除某个隐藏属性,其他原本存在的属性不改变。
+:添加某个隐藏属性,其他原本存在的属性不改变。
=:将隐藏属性设置为指定的参数,其他原本存在的属性会被改掉。
A(atime):如果设置了A属性,则这个文件的最后访问时间atime不能被修改。
a(append only):如果设置了a属性,则这个文件只能增加数据,不允许任何进程覆盖或截断这个文件。如果某个目录具有这个属性,那么只能在这个目录下建立和修改文件,而不能删除任何文件。
i(immutable):如果设置了i属性,则不能对这个文件做任何修该。如果某个目录具有这个属性,那么只能修改该目录下的文件,而不能建立和删除文件。
s(secure deletion):如果设置了s属性,则这个文件将从硬盘空间中完全删除。
u(undeletable):与s完全相反。如果设置了u属性,则这个文件虽然被删除了,但是还在硬盘空间中存在,还可以用来还原恢复。

wKioL1NRDe7w5ullAAD2EfpGvRM262.jpg


wKioL1NRD17iKHWHAADR8ggZC1U087.jpg

3. Linux文件特殊权限
Linux文件特殊权限主要体现在set UID、set GID、Sticky Bit这三个上面。
要理解这三个特殊权限,就要先理解账号的ID(UID和GID)以及进程等概念。
SUID

SUID就是Set UID。

1.拥有Suid权限到前提就是文件必须是二进制可执行文件

2.执行者对于这个二进制文件具有x的可执行权

3.执行者将具有该文件所有者的权限,说明白点就是执行者具有了root权限

比如:在Linux系统中普通用户也可以使用passwd命令来修改自己的密码。但是密码文件shadow只有root用户有读权限,其他用户没有任何权限,那么普通用户是怎样通过passwd命令来修改自己的密码呢?我们看下/usr/bin/passwd程序的属性就知道了。

[root@localhost test]# ll /usr/bin/passwd                            
-rw
sr-xr-x. 1 root root 30768 2月  17 2012 /usr/bin/passwd

我们发现passwd程序user的x权限位变成了s。那么在这里就是这个s使普通用户有权限来执行这个程序。它让普通用户在执行passwd这个程序时暂时拥有了root的权限。

因此,当某程序user的x权限位变成s时,就是进行了Set UID设置,简称SUID。
SUID仅可用于二进制文件,对于其他普通文件,目录文件和脚本之类的文件是无效的。


SGID

SGID就是Set GID

1.拥有SGID权限的前提就是文件必须是二进制可执行文件

2执行者对于该文件具有可执行权限

3.执行者在执行该文件时会获得该文件组的用户组的支持

SGID设置在目录上的作用是:

1.用户若是对此目录具有r和x的权限时,该用户能够进入此目录

2.用户在此目录的有效组将会变成此目录的用户组

3.若用户在此目录下拥有W权限(可以新建文件),则用户创建的用户组与此目录的用户组相同


SBIT

SBIT就是Sticky Bit。如果在设置了SBit属性的目录中,用户在该目录下拥有w和x权限,那么当用户在该目录下新建文件时,只有文件拥有者和root才有权利删除。
如果某个目录设置了SBit属性,那么该目录other的x属性位将会变成t。如【drwxrwxrwt】。
SBIT仅可用于目录文件对于普通文件是不生效的。
如果某个文件的user或者group或者other没有设置x属性,但是设置了SUID或者SGID或者GBIT,那么,这些特殊属性将会以大写的S和T表现出来。


④ 设置SUID/SGID/SBIT

我们用数字形式来表示这三个特殊属性,他们和r/w/x的数字表现形式类似。
SUID:4
SGID:2
SBIT:1
比如我要设置cat命令的SUID属性,那就可以用chmod 4755来实现。
比如我要设置test目录的SBIT属性,那就可以用chmod 1777来实现。

注意,在设置目录或者二进制文件的特殊属性时,一定要给予这些目录或者文件可执行权限。如果未给予可执行权限,即使设置了特殊属性,也将会是空的,会用大写的S和T表示。