linux 系统文件的特殊权限

文件权限与归属
Linux系统中的一切都是文件,但每个文件的类型不尽相同,并且Linux系统会用不同的符号来加以区分,常见的包括有
-:普通文件,d:目录文件,l:链接文件,b:块设备文件,c:字符设备文件,p:管道文件
读(read),写(write),执行(execute)简写即为(r,w,x),亦可用数字(4,2,1)表示。

SUID权限:让执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)
SUID属性一般用在可执行文件上,当用户执行该文件时,会临时拥有该执行文件的所有者权限。使用”ls -l” 或者”ll” 命令浏览文件时,如果可执行文件所有者权限的第三位是一个小写的”s”,就表明该执行文件拥有SUID属性。比如/usr/bin/passwd文件。
[root@rhel7 /]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jan 29 2014 /usr/bin/passwd

SGID功能一让执行者临时拥有属组的权限(对拥有执行权限的二进制程序设置)

这种特殊权限就是参考SUID而设计的,不同点就是让程序的执行者获取的不再是文件所有者的临时权限,而是获取到文件的所有组的权限。举例来说,在早期的Linux系统中/dev/kmem是一个字符设备文件,用于存储内核程序要访问的数据,权限为:

cr--r-----   1 root system 2,  1 Feb 11 2017  kmem
读者们看出问题了吗?除了root超级用户身份或属于system组成员外的所有用户都没有读取该文件的权限,但平时咱们需要查看系统进程状态,为了让用户能够获取到系统状态信息,因此将用于查看系统进程状态的ps命令权限上增加了SGID特殊权限位:

-r-xr-sr-x   1 bin system 59346 Feb 11 2017  ps
这样的话因为ps命令被赋予了SGID特殊权限位,所以当用户执行了该命令,实际上临时获取到了有效用户组system的权限啦,能够顺利的读取设备文件啦~

(如果在浏览文件时,发现拥有组权限的第三位是一个大写的“S”则表明该文件的SGID属性无效,比如将SGID属性给一个没有执行权限的文件。)
SGID功能二在该目录中创建的文件自动继承此目录的用户组(只可以对目录设置)
SGID属性应用在目录上时,该目录中所建立的文件或子目录的拥有组都会是该目录的拥有组。当SGID属性应用在可执行文件上时,其他用户在使用执行文件时就会临时拥有该执行文件的拥有组权限。在使用”ls -l” 或者”ll” 命令浏览目录时,如果拥有组权限的第三位是一个小写的”s”,就表明该执行文件或者目录拥有SGID属性。

[root@localhost ~]# cd /tmp/
[root@localhost tmp]# mkdir lxjtestdir
[root@localhost tmp]# ls -ald lxjtestdir/
drwxr-xr-x. 2 root root 6 Nov 27 15:14 lxjtestdir/
[root@localhost tmp]# chmod -Rf 777 lxjtestdir/
[root@localhost tmp]# chmod g+s lxjtestdir/
[root@localhost tmp]# ls -ald lxjtestdir/
drwxrwsrwx. 2 root root 6 Nov 27 15:14 lxjtestdir/
[root@localhost tmp]# su - rusky
Last login: Mon Nov 27 11:44:57 CST 2017 on pts/1
[rusky@localhost ~]$ cd /tmp/lxjtestdir/
[rusky@localhost lxjtestdir]$ touch abc
[rusky@localhost lxjtestdir]$ ls -al abc
-rw-r--r--. 1 rusky root 0 Nov 27 15:16 abc
[rusky@localhost lxjtestdir]$

Sticky Bit权限:

SBIT(Sticky Bit):只可管理自己的数据而不能删除他人文件(仅对目录有效)
Sticky属性只能应用在目录,当目录拥有Sticky属性,所有在该目录中的文件或子目录无论是什么权限,只有文件或者子目录所有者和root用户能做删除动作。保护用户自己的数据不被其它用户删除。在使用”ls -l”或者”ll”命令浏览目录时,如果其他用户权限的第三位是一个小写的”t”,就表明该执行文件或者目录拥有Sticky属性。
注意:linux系统规定,如果原本该位上有x,则这些属性显示为小写字母(有效),否则显示大写字母(无效)

在RHEL7系统中的/tmp作为一个共享文件的目录默认已经被设置了SBIT特殊权限位,因此这里面的文件其他人是不能乱删除的:
drwxrwxrwt. 25 root root 4096 Jul 20 22:53 tmp

==========================
配置SUID、SGID、Sticky属性

可以使用字符配置(s 表示SUID和SGID,t表示Sticky)
如:

chmod u+s test_file #给文件增加SUID属性
chmod g+s test_dir #给目录增加SGID属性
chmod o+t test_dir #给目录增加Sticky属性
还可以用数字的方式配置(4表示SUID,2表示SGID,1表示Sticky)
如:

chmod 4555 test_file #给文件增加SUID属性
chmod 2555 test_file #给文件增加SGID属性
chmod 1555 test_dir #给目录增加Sticky属性

文件的隐藏属性

即在默认情况下是不能直接被用户发觉的。在真实的工作环境和红帽RHCE考试题目中碰到过明明权限很充足但却不能删除某个文件的情况,或者仅仅能对日志文件进行追加内容而不能删除或减少,一定程度上阻止了黑客篡改系统日志的图谋,因此这种很“奇怪”的文件让Linux系统更加的安全。

chattr命令用于设置文件的隐藏权限,格式为:“chattr [参数] 文件”。

可以使用chattr命令来设置文件的隐藏权限,如果想要把某个隐藏功能添加到文件上面,则使用+参数,如果想要把某个隐藏功能移出文件,则使用-参数。可供咱们选择的隐藏权限功能非常丰富,常见的隐藏权限包括有:

参数 作用
i 将无法对文件进行修改,若对目录设置后则仅能修改子文件而不能新建或删除。
a 仅允许补充(追加)内容.无法覆盖/删除(Append Only)。
S 文件内容变更后立即同步到硬盘(sync)。
s 彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域)。
A 不再修改这个文件的最后访问时间(atime)。
b 不再修改文件或目录的存取时间。
D 检查压缩文件中的错误。
d 当使用dump命令备份时忽略本文件/目录。
c 默认将文件或目录进行压缩。
u 当删除此文件后依然保留其在硬盘中的数据,方便日后恢复。
t 让文件系统支持尾部合并(tail-merging)。
X 可以直接访问压缩文件的内容。

[rusky@localhost ~]$ echo "test" > lxjtest
[rusky@localhost ~]$ chattr +a lxjtest
chattr: Operation not permitted while setting flags on lxjtest
[rusky@localhost ~]$ su -
Password:
Last login: Mon Nov 27 11:46:24 CST 2017 on pts/1
[root@localhost ~]# cd /home/rusky/
[root@localhost rusky]# chattr +a lxjtest
[root@localhost rusky]# su - rusky
Last login: Mon Nov 27 15:16:25 CST 2017 on pts/1
[rusky@localhost ~]$ rm lxjtest
rm: cannot remove ‘lxjtest’: Operation not permitted

原文地址:https://www.cnblogs.com/rusking/p/7216537.html