文件权限与归属
在Linux系统中一切都是文件,但是每个文件的类型不尽相同,因此Linux系统使用了不同的字符来加以区分,常见的字符如下所示。
-:普通文件。
d:目录文件。
l:链接文件。
b:块设备文件。(键盘等)
c:字符设备文件。
p:管道文件。
|
文件权限:可读(r)、可写(w)、可执行(x),也可以分别用数字4、2、1表示。
SUID
SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。
例如,所有用户都可以执行passwd来修改自己的用户密码,而用户密码保存在/etc/shadow文件中。仔细查看这个文件他的默认权限是000,也就是除了root管理员以外,所有用户都没有查看或编辑该文件的权限
在使用passwd命令是如果加上SUID特殊权限位,就可以让普通用户临时获得所有者的身份,把变更的密码信息写入到shadow文件中
查看passwd命令属性时发现**所有者的权限由rwx变成了rws,其中x改变成s就意味着该文件被赋予了SUID权限。**另外有读者会好奇,那么如果原本的权限是rw-呢?如果原先权限位上没有x执行权限,那么被赋予特殊权限后将变成大写的S。
SGID
让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置);
在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)。例在目录设置SGID,则用户在该目录创建文件,文件的默认的用户组将由用户自己的基本用户组变为目录的所属组,使得同组内的其他用户都能访问该文件。
chmod和chown
**chmod命令是一个非常实用的命令,能够用来设置文件或目录的权限,格式为“chmod [参数] 权限 文件或目录名称”。**如果要把一个文件的权限设置成其所有者可读可写可执行、所属组可读可写、其他人没有任何权限,则相应的字符法表示为rwxrw----,其对应的数字法表示为760。
chown命令可以设置文件或目录的所有者和所属组,其格式为“chown [参数] 所有者:所属组 文件或目录名称”。
**chmod和chown命令是用于修改文件属性和权限的最常用命令,**它们还有一个特别的共性,就是针对目录进行操作时需要加上大写参数-R来表示递归操作,即对目录内所有的文件进行整体操作。
SBIT
确保用户只能删除自己的文件,而不能删除其他用户的文件。如果赋予了SBIT权限,则其他用户中的可执行权限位会从x/-变为t/T。
常用参数:
常用参数:
a:所有人
u:所有者
g:所有组
o:其他用户
r:可读权限
w:可写权限
x:可执行权限
s:suid或sgid权限(一般配合u或g参数使用,如果配合a参数,则代表同时设置suid和sgid)
t:sbit权限(一般配合o参数使用,配合u或g参数使用无任何效果,配合a参数使用效果等同于配合o参数)
+:添加权限
-:移除权限
文件的隐藏属性
Linux系统中的文件除了具备一般权限和特殊权限之外,还有一种隐藏权限,即被隐藏起来的权限,默认情况下不能直接被用户发觉。有用户曾经在生产环境和RHCE考试题目中碰到过明明权限充足但却无法删除某个文件的情况,或者仅能在日志文件中追加内容而不能修改或删除内容,这在一定程度上阻止了黑客篡改系统日志的图谋,因此这种“奇怪”的文件也保障了Linux系统的安全性。
chattr命令
**chattr命令用于设置文件的隐藏权限,格式为“chattr [参数] 文件”。**如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加“+参数”,如果想要把某个隐藏功能移出文件,则需要追加“-参数”。
chattr命令中用于隐藏权限的参数及其作用
**lsattr命令用于显示文件的隐藏权限,格式为“lsattr [参数] 文件”。**在Linux系统中,文件的隐藏权限必须使用lsattr命令来查看,平时使用的ls之类的命令则看不出端倪。
一旦使用lsattr命令后,文件上被赋予的隐藏权限马上就会原形毕露。此时可以按照显示的隐藏权限的类型(字母),使用chattr命令将其去掉。