Linux之权限
1.1,什么是权限?
权限是用来约束用户能对系统所作的操作。或者说权限是指某个特定的用户具有特定的系统资源的使用权力。
1.2权限的作用
linux
是一个多用户系统,对于每一个用户来说,个人隐私的保护十分重要,所有需要进行权限划分。
- 1,安全性:降低误删除风险,减少人为造成故障以及数据泄露等风险。
- 2,数据隔离:不同的权限能看到,以及操作不同的数据。
- 3,职责明确划分。
1.3 权限与用户的关系
- 在
linux
系统中,权限是用户来定义用户能做什么,不能做什么。
- 1,针对文件定义了三种身份,分别是属主
owner
、属组gruop
、其他他人others
- 2.每种身份又对应三种权限,读
read
、写write
、执行execute
。
- 当一个用户访问文件流程
- 先判断用户是否为文件属主,如果是则按属主权限进行访问。否则判断用户是否为文件属组,如果是则按属组权限进行访问。如果访问者既不是文件属主也不是文件属组,则按其他人权限访问。
1.4 权限中rwx的含义
linux
中权限是由rwxr-xr-x
这9为字符来表示的。主要控制文件的属主User
,属组Group
,其他用户Other
字母 | 含义 | 二进制 | 八进制权限表示法 |
---|---|---|---|
r-- | 读取权限 | 100 | 4 |
-w- | 写入权限 | 010 | 2 |
--x | 执行权限 | 001 | 1 |
--- | 没有权限 | 000 | 0 |
2,修改文件权限
- 命令:chmod(change mode) ps:
root
用户可以修改任何人的文件权限,普通用户只能变更属于自己的文件权限
2.1,UGO方式
- 给文件所有人添加读写执行权限
[root@Linux.net: ~]##chmod a=rwx file
- 取消文件的所有权限
[root@Linux.net: ~]##chmod a=-rwx file
- 属主读写执行,属组读写,其他人无权限
[root@Linux.net: ~]##chmod u=rwx,g=rw,0=- file
- 属主属组读写执行,其他人读权限
[root@Linux.net: ~]##chmod ug=rwx,o=r file
2.2,NUM方式
- 设定文件权限
644
,rw-r--r--
[root@Linux.net: ~]##chmod 644 file
- 设定文件权限
600
,rw-------
[root@Linux.net: ~]##chmod 600 file
- 设定目录权限为755,递归授权
rwxr-xr-x
[root@Linux.net: ~]##chmod -R 755 dir
2.3权限对文件的影响
对linux
中去权限设定读文件和目录的影响是有区别的。
权限 | 对文件的影响 | 对目录的影响 |
---|---|---|
r | 读 | 浏览目录内容 |
w | 写 | 增加,删除,修改 |
x | 执行 | 进入目录 |
3,修改文件所属关系
- 可以使用
chown(change owner)、chagrp(change group)命令实现
chown
可以变更文件的属主和属组chgrp
仅能变更文件的属组
3.1 chown(change owner)
# 1,创建文件和目录
[root@Linux.net: ~]#mkdir /data
#2,修改所属主为`bin`
[root@Linux.net: ~]#mkdir bin /data
[root@Linux.net: ~]#chown -R root.root dir
3.2 chgrp(change group)
# 1,创建文件和目录
[root@Linux.net: ~]#mkdir /data2
#2,修改所属组为`adm`
[root@Linux.net: ~]#mkdir ,adm /data
#3,修改目录所属主为`root`,所属组为`root`,并进行递归授权
- 进程能够以一种什么样的方式去访问一个文件,取决与这个进程所运行的身份对这个文件或者目录有什么样的权限。
4,文件特殊权限
在linux
中,每个普通用户都可以更改自己的密码,这是合理的设置;但是用户的密码信息存储在/etc/shadow
文件中,也就是说,普通用户在更改自己的面膜时会跟新/etc/shadow
文件的内容。
但/etc/shadow
文件是不允许任何人修改的,那为什么普通用户可以修改自己的权限呢?
[root@Linux.net: ~]#ll /etc/shadow
----------. 1 root root 1158 Jul 18 15:01 /etc/shadow
其实,普通用户可以修改自己的密码在于passwd
命令本身,该命令拥有特殊权限SetUID
也就是在属主的权限位的执行权限上是s
。我们可以这样理解特殊权限SetUID
:当一个执行文件设置SetUID
后,用户在执行这个文件时将以文件所有者的身份来执行。
4,1,SUID配置语法
[root@Linux.net: ~]#chmod u+s /usr/bin/cat
[root@Linux.net: ~]#chmod 4755/usr/bin/cat
SUID作用总结
- 1,让普通用户对可执行的二进制文件,临时拥有二级制文件的所属主权限
- 2,如果设置的二进制文件没执行权限,那么SUID的权限就大S
- 3,特殊权限suid仅对二进制可执行程序有效,其他文件或目录无效
- 4,suid 相对危险,不建议对vim和rm进行suid设定操作
4.2特殊权限SGID
SGID
:
- 1,设置二进制可执行文件,命令在执行的过程中,会以命令的属组身份运行命令。
- 2,设置在目录上,这时候在该目录下新建的文件/目录自动继承父目录属组
4.2.1 SGID配置语法
[root@Linux.net: ~]chmod g+s /dir
[root@Linux.net: ~]chmod 2755 /dir
4.2.2SGID场景模拟
- 需求:
系统用户有两个用户,分别位
ex1
,ex2
,这两个用户都拥有example
;
1,这两个用户需要共同拥有/data/code
目录的开发权;
2,互相之间能修改彼此的文件,且该目录不允许其他人进入查阅
[root@Linux.net: ~]#groupadd example
[root@Linux.net: ~]#useradd ex1 -G example
[root@Linux.net: ~]#useradd ex2 -G example
[root@Linux.net: ~]#mkdir /data/code
[root@Linux.net: ~]#chgrp project /data/code/
[root@Linux.net: ~]#chmod 770 /data/code/ #可省略
[root@Linux.net: ~]#chmod 2770 /data/code/
4.3特殊权限SBIT
- 什么是SBIT
一旦目录被赋予了粘滞位
sticky(SI TI KI)
,普通用户对该文件拥有w权限,也只能删除自己创建的文件,不可以删除别人创建的文件。root
可以删除目录中的所有文件
4.3.1SBIT配置示例
- 需求:默认情况下
/mnt
不是粘滞位,如何将此目录设置为粘滞位;
[root@Linux.net: ~]#chmod o+t /mnt
[root@Linux.net: ~]#chmod 1755 /mnt
4.3.1 SBIT作用总结
-
1,让所有普通用户对该目录具有写入权限,并且能实现每个用户只能删自己的我文件
-
2,粘滞位目录表现在
others
的x
位,用t
表示,如果没有执行权限则表示为T
-
3,粘滞位目录的属主以及
root
用户有权限删除目录中的内容,其他用户无权限删除。
5,特殊属性
- 什么是特殊属性:这类文件属性凌驾于
rwx
基础权限之上,是一种高级属性
5.1 特殊属性的作用
- 1,创建一个文件,不允许被修改、移动、删除、包括
root
也不行--->适合/etc/passwd
- 2,创建一个文件,仅允许往文件里追加数据,不允许修改、移动、删除、--->适合
sudo
审计日志。
5.2 特殊属性如何配置
linux
系统通过chattr
来实现特殊属性的配置- 命令格式:
chattr[+-=] [选项] 文件或者目录名
a
:可对文件进行追加内容;i
:锁定文件,不允许其他操作;
#配置`/etc/passwd`文件,不可改,不可追加,不可删除
[root@Linux.net: ~]# chattr +i /etc/passwd
[root@Linux.net: ~]#rm -f /etc/passwd
rm: cannot remove ‘/etc/passwd’: Operation not permitted
#配置`/var/log/secure`文件,只能追加写入日志,不允许手动修改,也不允许删除
[root@Linux.net: ~]#chattr +a /var/log/secure
[root@Linux.net: ~]#lsattr /var/log/secure
-----a---------- /var/log/secure
#追加试试
[root@Linux.net: ~]#echo "test" >> /var/log/secure
[root@Linux.net: ~]#echo "test" >> /var/log/secure
#删除,修改操作都不可以
[root@Linux.net: ~]#rm -f /var/log/secure
rm: cannot remove ‘/var/log/secure’: Operation not permitted
- 5.3取消特殊属性
[root@Linux.net: ~]#chattr -i /etc/passwd
[root@Linux.net: ~]#chattr -a /var/log/secure
6,文件默认权限
- 默认权限: 指用户在创建文件或目录时,默认分配给文件或目录的访问权限;
- 默认权限有什么用
6.1系统默认权限配置文件
- 为什么默认
root
用户的UMASK
为022
呢
1,当用户登录系统时,会加载
/etc/profile
环境变量文件;
2.在该配置文件中有一条UMASK
的判断语句;如果用户UID
小于199
,将UMASK
初始化为022
。
如果用户UID
大于199
并且组名称和用户名称一致,那么就将UMASK
初始化为002
UMASK
判断语句如下:
[root@Linux.net: ~]vim /etc/profile
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
umask 002
else
umask 022
fi
6.2 默认权限的计算公式
#1,假设umask值为:022(所有位为偶数)
#文件的起始权限值
666 - 022 = 644
777 - 022 = 755
#2.假设umask值为:045(其他用户组位为奇数)
#计算出来的权限。由于umask的最后一位数字是5,所以。在其他用户组位再加1.
666 - 045 = 621 + 1 = 622
777 - 045 = 732
#umask所有位全位偶数
#umask 044
#mkdir d044 目录权限为 777 -044 =733
#touch f044 文件权限为 666 - 044 = 622
#umask所有位全位奇数
#umask 023
#mkdir d023 目录权限为 777 -023 =754
#touch f023文件权限为 666 - 023 = 643+001 = 644
#umask部分位全位为偶数时
#umask 032
#mkdir d032 目录权限为 777 -023 =745
#touch f032 文件权限为 666 - 023 = 634+010 = 644
#umask所有位全位为奇数时
#umask 035
#mkdir d035 目录权限为 777 -035 =742
#touch f035 文件权限为 666 - 035 =631 + 011 =642