文件的特殊权限
有时候在某需求方面上,单纯设置文件的 rwx 权限无法满足我们对安全和灵活性的需求,因此便有了SUID、SGID与SBIT的特殊权限位。这是一种对文件权限进行设置的特殊功能,可以与一般权限同时使用,以弥补一般权限不能实现的功能。比如让普通用户执行一个对该用户没有执行权限的文件等等。
一般这些特殊命令是结合某些修改、查看文件的命令使用的:如ps、passwd等等
SUID
当s这个标志出现在文件所有者的x权限上时,例如文件权限状态“-rwsr-xr-x”,此时就称为 Set UID,简称为SUID的特殊权限。SUID有这样的限制和功能:
- SUID权限仅对二进制程序有效;
- 执行者对于该程序需要具有x的可执行权限;
- 本权限仅在执行该程序的过程中有效;
- 执行者将具有该程序所有者的权限。
举个例子:所有账号的密码记录在/etc/shadow这个文件中,并且只有root可以读和强制写入这个文件。但是,我们却可以看到,一般用户可以修改自己的密码,这是为什么呢?
- etc/shadow是存放用户密码的文件
- /bin/passwd命令修改密码(平时输入的passwd就是执行的这个文件,一切皆文件!敲黑板。)
由上可知:我们查看passwd命令属性时,发现所有者的权限由rwx变成了rws,其中x改变成s就意味着该文件被赋予了SUID权限。那么SUID是什么呢,简单来说就是,让普通用户暂时拥有root用户的权限。
ps:如果原先权限位上没有x执行权限,那么被赋予特殊权限后将变成大写的S。
SGID
当s标志出现在文件所有者的x权限时称为SUID,那么s出现在用户组的x权限时称为SGID。(U表示user,G表示group)。SGID有如下功能:
- SGID对二进制程序有用;
- 程序执行者对该程序需具备x权限;
- 让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置)
- 在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)。 针对规则:文件的属主属组一般会自动归属于执行这个操作的用户。设置了SGID之后,会归属于其扩展属组。
SBIT
SBIT 只针对目录有效,对于文件已经没有效果了。
SBIT对目录的作用是:
- 当用户对此目录具有w和x权限时,亦即具有写入权限时;
- 当用户在该目录下创建新文件或目录时,仅有自己和root才有权力删除。
当目录被设置SBIT特殊权限位后,文件的其他人权限部分的x执行权限就会被替换成t或者T,原本有x执行权限则会写成t,原本没有x执行权限则会被写成T。
想对其他目录来设置SBIT特殊权限位,用chmod命令就可以了。对应的参数o+t代表设置SBIT粘滞位权限
文件的隐藏权限
Linux系统中的文件除了具备一般权限和特殊权限之外,还有一种隐藏权限,即被隐藏起来的权限,默认情况下不能直接被用户发觉。隐藏权限是为了更细分权限方面的东西而存在的。
chattr命令
chattr命令用于设置文件的隐藏权限,格式为“chattr [参数] 文件”。如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加“+参数”,如果想要把某个隐藏功能移出文件,则需要追加“-参数”。
- 比较常见的有a、i参数,加上了a、i 参数后,文件就无法删除(root用户也是无法删除!只能将文件权限改回来)
lsattr命令
lsattr命令用于显示文件的隐藏权限,格式为“lsattr [参数] 文件”。在Linux系统中,文件的隐藏权限必须使用 lsattr 命令来查看,平时使用的ls之类的命令则看不出端倪:
实例: