1. 文件权限
通过ls -l查看文件权限信息:-rw-r–r–. 1 root root 1370 Nov 24 17:31 shunxu.txt
- 第一个字段:-rw-rw-rw-,一般情况下共10个字符,第一个字符代表文件类型,包括
-文件,d目录,l链接,c字符设备,b块设备,n网络设备
之后9个字符,分为3组,每组3个字符,每个字符有固定含义,例如rw-,含义包括
r可读,w可写,x可执行,-不可
- 第一组3个字符表示对象的属主权限
- 第二组3个字符表示对象的属组权限
- 第三组3个字符表示对象的其他用户权限
默认文件权限为644,即-rw-r–r–,是因为创建文件时,根据掩码umask设置所得
umask默认为0022,其第一位为粘滞位(sticky bit),后三位标示文件或目录对应的umask八进制值
默认权限的基本设置原理简述(八进制模式的安全设置):
- 1.八进制模式会把rwx三个字符转换为二进制值,用一个八进制值表示,例如rw-为二进制110,八进制6
- 2.默认的umask为0022,默认的文件全权限为666,目录全权限为777
- 3.创建文件或目录的时候,由全权限减去umask得到默认权限,即文件644,目录755
默认umask在/etc/profile或/etc/login.defs中定义,通过umask XXX可临时修改
2. 改变权限
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
3. 共享文件
linux为每个文件或目录存储了3个额外信息位,包括:
3.1 SUID
当一个设置了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权限是—,没有权限修改。但事实上可以修改。
- suid的特殊作用:可以绕过基础权限体系,可以修改没有权限的文件。基于二进制命令
- 给一个命令设置suid以后,所有使用这个命令的用户都拥有这个命令对应用户的权限
- 普通用户按基础权限来说是无法修改密码的,但是这个命令设置了suid,普通用户就拥有了这个命令对应用户的权限也就是root用户的权限,修改过程中是以root权限操作
注意:
- suid功能是针对二进制命令或者程序,不能用在shell等类似脚本文件上
- 用户或属主对应的前三位权限的x位上,如果有s(S)就表示具有suid权限
- suid的作用就是让普通用户可以在执行某个设置suid位的命令或程序时,拥有和命令对应属主(一般为root管理员)一样的身份和权限(默认)
- 二进制命令程序需要可执行权限x配合才行不然提示Permission denied
- suid对应的身份和权限仅在程序执行过程中有效
- suid是一个比较危险的功能,对系统安全有一定的威胁,企业用户授权可以使用sudo代替suid,不用把危险命令设置suid,比如rm命令
3.2 SGID
当一个设置了SGID 位的可执行文件运行时,该文件将具有所属组的特权, 任意存取整个组所能使用的系统资源。
若一个目录设置了SGID,则所有被复制到这个目录下的文件, 其所属的组都会被重设为和这个目录一样,除非在复制文件时加上-p
(preserve,保留文件属性)的参数,才能保留原来所属的群组设置。
注意:
- 对于二进制命令或者程序来说,sgid的功能和suid基本相同,唯一区别是suid获得命令所属用户的身份和权限,而sgid是获得命令所属用户组的身份和权限
- 与suid不同的是,sgid既可以针对文件,也可以针对目录设置
- sgid的权限是针对用户组权限位的
- 对于文件来说,sgid功能如下
二进制命令或程序,也需要可执行权限x配合
执行命令的任意用户可以获得该命令程序执行期间所属组的身份和权限
理解:
locate命令通过读取/var/lib/mlocate/mlocate.db查询命令二进制文件位置,文件权限对其他用户来说是—按道理来说其他用户无法使用locate命令,事实上可以使用,原因是locate 被设置了sgid
3.3 sticky-bit
粘滞位,进程结束后文件还驻留在内存中,作用:目录被设置权限粘滞位,即使用户对目录有写权限,也无法删除该目录中其他用户的文件数据,参考/tmp权限,文件的粘滞位没什么用
对一个文件设置了sticky-bit之后,尽管其他用户有写权限, 也必须由属主执行删除、移动等操作。
对一个目录设置了sticky-bit之后,存放在该目录的文件仅准许其属主执行删除、 移动等操作。
[root@node1 ~]# ll /tmp/ -d
drwxrwxrwt. 53 root root 4096 Apr 6 03:47 /tmp/
注意:
粘滞位的功能现在很少用,不过对于像/tmp目录这样的,是整个系统用户临时文件存放地,这个目录开放了所有权限,又设置了粘滞位,那么除了属主和root用户有权限删除它,其它用户不能删除这个目录,粘滞位用途一般是用来共享文件,虽然方便,但是带来一些安全隐患,生产环境禁止设置粘滞位。
3.4 额外权限位
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只对文件有效)