通过ls -l查看文件权限信息:-rw-r–r–. 1 root root 1370 Nov 24 17:31 shunxu.txt
之后9个字符,分为3组,每组3个字符,每个字符有固定含义,例如rw-,含义包括
r可读,w可写,x可执行,-不可
默认文件权限为644,即-rw-r–r–,是因为创建文件时,根据掩码umask设置所得
umask默认为0022,其第一位为粘滞位(sticky bit),后三位标示文件或目录对应的umask八进制值
默认权限的基本设置原理简述(八进制模式的安全设置):
默认umask在/etc/profile或/etc/login.defs中定义,通过umask XXX可临时修改
chmod options mode file
有多种方式:
可通过八进制数字直接修改
chmod 777 filename
通过选项及模式修改
选项:u属主,g属组,o其他用户,a上述所有
模式:+增加权限,-移出权限,=设置权限为,包括[[+ - =]rwxXstugo]
rwx:常规读写执行权限
X:仅用于目录或它已有执行权限,赋予执行权限
s:重新设定UID或GID
t:保留文件或目录
u/g/o:将权限设置跟属主/组/其他用户一样
chmod 选项-R将权限递归到文件或子目录
改变所属关系chown,chown options owner[.group] file,可以用登陆名或UID指定属主,也可以只改属组,chown .groupname file
linux为每个文件或目录存储了3个额外信息位,包括:
当一个设置了SUID 位的可执行文件被执行时,该文件将以所有者的身份运行,也就是说无论谁来执行这个文件,他都有文件所有者的特权。
如果所有者是 root 的话,那么执行人就有超级用户的特权了。
理解:
[root@node2 test]# ll /bin/passwd
-rwsr-xr-x. 1 root root 27856 Apr 1 2020 /bin/passwd
[root@node2 test]# ll /etc/shadow
---------- 1 root root 2020 Apr 6 11:51 /etc/shadow
传统权限分析,普通用户是其他用户,修改/etc/shadow权限是—,没有权限修改。但事实上可以修改。
注意:
当一个设置了SGID 位的可执行文件运行时,该文件将具有所属组的特权, 任意存取整个组所能使用的系统资源。
若一个目录设置了SGID,则所有被复制到这个目录下的文件, 其所属的组都会被重设为和这个目录一样,除非在复制文件时加上-p
(preserve,保留文件属性)的参数,才能保留原来所属的群组设置。
注意:
二进制命令或程序,也需要可执行权限x配合
执行命令的任意用户可以获得该命令程序执行期间所属组的身份和权限
理解:
locate命令通过读取/var/lib/mlocate/mlocate.db查询命令二进制文件位置,文件权限对其他用户来说是—按道理来说其他用户无法使用locate命令,事实上可以使用,原因是locate 被设置了sgid
粘滞位,进程结束后文件还驻留在内存中,作用:目录被设置权限粘滞位,即使用户对目录有写权限,也无法删除该目录中其他用户的文件数据,参考/tmp权限,文件的粘滞位没什么用
对一个文件设置了sticky-bit之后,尽管其他用户有写权限, 也必须由属主执行删除、移动等操作。
对一个目录设置了sticky-bit之后,存放在该目录的文件仅准许其属主执行删除、 移动等操作。
[root@node1 ~]# ll /tmp/ -d
drwxrwxrwt. 53 root root 4096 Apr 6 03:47 /tmp/
注意:
粘滞位的功能现在很少用,不过对于像/tmp目录这样的,是整个系统用户临时文件存放地,这个目录开放了所有权限,又设置了粘滞位,那么除了属主和root用户有权限删除它,其它用户不能删除这个目录,粘滞位用途一般是用来共享文件,虽然方便,但是带来一些安全隐患,生产环境禁止设置粘滞位。
SGID对共享文件非常重要,启用后,可以强制在一个共享目录下创建的新文件都属于该目录的属组,这个组也就成为了每个用户的属组,SGID通过chmod设置,它会加到3位八进制权限位之前,组成4位八进制位,或在符号模式下用符号s。
额外权限位(SUID,SGID,sticky bit)对应:
二进制位 | 八进制位 | 描述 |
---|---|---|
000 | 0 | 所有位都清零 |
001 | 1 | 粘滞位置位 |
010 | 2 | SGID位置位 |
011 | 3 | SGID+粘滞位 |
100 | 4 | SUID位置位 |
101 | 5 | SUID+粘滞位 |
110 | 6 | SUID+SGID |
111 | 7 | 所与位都置位 |
示例
chmod u+s temp -- 为temp文件加上setuid标志. (setuid 只对文件有效,U=用户)
chmod g+s tempdir -- 为tempdir目录加上setgid标志 (setgid 只对目录有效,g=组名)
chmod o+t temp -- 为temp文件加上sticky标志 (sticky只对文件有效)