特殊权限

1,特殊权限SUID
2, 特殊权限SGID
3, 特殊权限SBIT
4, 文件的属性( chattr,lsattr)
5, UMASK 默认权限

——————————————————————————
oldxu用户–>执行–>passwd命令时。
1.由于passwd命令拥有suid特殊权限(在命令属主权限位有一个s),
2.那么在整个命令执行的过程中,会以命令的属主身份去运行该命令。 <-- root

oldxu --> passwd  ---> 该命令属主身份root在运行 ---> 依托root身份   --> 变更 /etc/shadow 密码信息

演示:
1.登陆oldxu用户,执行passwd
[oldxu@oldboy ~]$ passwd
Changing password for user oldxu.
Changing password for oldxu.
(current) UNIX password:

2.过滤一下passwd这个命令是由哪个身份运行起来的  (该进程运行的身份是该命令的属主,而不是oldxu用户)
[root@oldboy ~]# ps aux | grep passwd
root     25957  0.0  0.1 170712  1924 pts/1    S+   09:51   0:00 passwd


3.结论:
	/etc/shadow 这个文本本身是谁都无法修改的,但是root除外。
	此时oldxu执行passwd  通过 特殊权限 借助的是root身份运行该命令
	所以最终是由root去更新了/etc/shadow 文件,完成的密码修改。

suid使用:
需求:默认情况下,所有的普通用户,都无法查看/etc/shadow,有没有办法能够让所有的普通用户都能查看/etc/shadow

方式1: chmod 004  /etc/shadow
方式2: 为cat命令赋予一个 suid权限即可


设定suid:u+s  4755  == 4 表示的特殊权限中的suid
[root@oldboy ~]# chmod u+s /usr/bin/cat
[root@oldboy ~]# chmod 4755 /usr/bin/cat


结论:
	当为cat命令赋予了特殊权限后,此时所有的普通用户通过cat去查看文件时,其实都是通过cat的属主身份查看的该文件
		oldxu --> cat  ---> /etc/shadow
			由于cat有suid
			cat的属主又是root
			
			转换的结果
		root --> cat  --->/etc/shadow  -->结果 -->输出到--->oldxu ---> bash窗口了

————————————————————————
特殊权限SGID: 组
表现形式: 在文件的 属组权限上有显示一个s(执行权限) S(没有执行权限)
文件:
oldxu用户–>执行–>passwd命令时。
1.由于passwd命令拥有SGID特殊权限 (在命令属组权限位有一个s),
2.那么在整个命令执行的过程中,会以命令的 “属组” 身份去运行该命令。 <-- root组

oldxu --> passwd  ---> 该命令属组身份 root 在运行 ---> 依托root组 身份  --> 变更 /etc/shadow 密码信息


suid 借助  ” 属主 “  身份运行该命令程序
sgid 借助  “ 属组 ”  身份运行该命令程序

目录:将目录设置为sgid后,如果在该目录下创建文件,都将与该目录的所属组保持一致,演示如下

oldxu-->file         oldxu   oldxu
root -->file_root    root    root

#1.建立测试目录
[root@bgx ~]# cd /tmp/ && mkdir dtest

#2.给测试目录赋予SetGID权限,检查SetGID是否生效
[root@bgx tmp]# chmod g+s dtest/ && ll -d dtest/
drwxr-sr-x 2 root root 6 Apr 13 05:21 dtest/

#3.给测试目录赋予777权限,让普通用户可以写
[root@bgx tmp]# chmod 777 dtest/

#4.切换成普通用户lamp,并进入该目录
[root@bgx tmp]# su - lamp
[lamp@bgx ~]$ cd /tmp/dtest/

#5.普通用户创建测试文件,检查文件的信息
[lamp@bgx dtest]$ touch lamp_test
[lamp@bgx dtest]$ ll
-rw-rw-r-- 1 lamp root 0 Apr 13 05:21 lamp_test

sgid作用
使用sgid可以使得多个用户之间共享一个目录的所有文件变得简单。

————————————————————————
特殊权限SBIT:
针对的是目录:
目录一旦被赋予了粘滞位,除了 root 可以删除所有文件,普通用户对该目录就算拥有 w 权限,也只能删除自己建立的文件,而不能删除其他用户建立的文件。

[root@oldboy dtest]# ll -d /tmp/
drwxrwxrwt. 9 root root 202 3月  17 10:52 /tmp/

后面学习MySQL的时,当我们要初始化MySQL时,他会创建一些临时文件 /tmp目录下,当初始化完毕后,自己会清理掉里面的数据,别人无法清理。(如果这个目录不是粘滞位,那么初始化MySQL就会报错。)

chmod o+t /tmp
chmod 1777 /tmp 

特殊的属性:权限有关
比如说:
1.我希望创建一个文件,不允许被删除。包括root都不行。
2.我希望这个文件只能往里面追加数据。

chatrr 只有 root 用户可以使用,用来修改文件系统的权限属性,建立凌驾于 rwx 基础权限之上的授权。

chattr [±=] [选项] 文件或目录名
#选项:
+ 增加权限
- 减少权限
= 等于某个权限
# a:让文件或目录仅可追加内容
# i:不得任意更动文件或目录
#1.配置一个文件,让其只能追加内容,不允许手动修改,也不允许删除 ( sudo -->日志–>设置为只能追加,不能修改,不能删除 )
[root@oldboy tmp]# touch /mnt/file_a
[root@oldboy tmp]# chattr +a /mnt/file_a
[root@oldboy tmp]# lsattr /mnt/file_a
-----a---------- /mnt/file_a

#2.可以追加内容
[root@oldboy tmp]# echo “aaa” >> /mnt/file_a
[root@oldboy tmp]# echo “aaa” >> /mnt/file_a
[root@oldboy tmp]# echo “aaa” >> /mnt/file_a
[root@oldboy tmp]# cat /mnt/file_a
aaa
aaa
aaa

#3.不能删除
[root@oldboy tmp]# rm -f /mnt/file_a
rm: 无法删除"/mnt/file_a": 不允许的操作

	a属性一般作用于日志类文件,特别是 sudo 记录下来的日志  

#4.如果想删除特殊属性,需要使用root身份,先取消属性,然后删除
[root@oldboy tmp]# chattr -a /mnt/file_a
[root@oldboy tmp]# lsattr /mnt/file_a
---------------- /mnt/file_a
[root@oldboy tmp]# rm -f /mnt/file_a



#1.配置一个文件,不能改,不能追加,不能删除。 ( /etc/passwd 可能不需要删除、更改、追加。 )
[root@oldboy tmp]# touch /mnt/file_i
[root@oldboy tmp]# lsattr /mnt/file_i
---------------- /mnt/file_i

#2.赋予权限
[root@oldboy tmp]# chattr +i /mnt/file_i

#3.验证权限
[root@oldboy tmp]# rm -f /mnt/file_i
rm: 无法删除"/mnt/file_i": 不允许的操作
[root@oldboy tmp]# echo “123” >> /mnt/file_i
-bash: /mnt/file_i: 权限不够

————————————————————————
默认权限UMASK:
1.为什么系统中默认创建的文件权限是 644 目录是 755
2.为什么默认创建一个普通用户,他的家目录权限是 700

原因:
	默认系统规定的权限, 目录 777  文件 666  那么为什么创建出来的文件和目录都不是777 也不是 666呢?
	由于UMASK控制了, 比如UMASK 设置为  0022
	那么最终创建出来的文件和目录分别就是  
		目录: 755
		文件: 644

----------------UMASK表示要减掉的权限-------------------------------
目录: 777 - 022 = 755 最终创建出来的目录权限
文件: 666 - 022 = 644 最终创建出来的文件权限

1.默认创建普通用户家目录的权限,在哪个文件中控制的UMASK:
	1.默认创建的用户家目录为啥是 700,是哪个文件控制的UMASK   
		[root@oldboy tmp]# vim /etc/login.defs
		UMASK           077		#创建用户时,设定的UMASK为077

	2.假设去创建一个用户那么如何计算这个家目录的权限呢?
		777 - 077 = 700
		[root@oldboy tmp]# ll -d /home/oldboy/
		drwx------. 2 oldboy oldboy 62 3月  17 11:33 /home/oldboy/

	3.如果我希望创建出来的目录权限是755,我该怎么做呢?
		777 - 755 = 022  (将/etc/login.defs 中UMASK设置为022,那么我们的目录是不是在创建初就为755了)
		
		
		[root@oldboy tmp]# ll -d /home/olgirl/
		drwxr-xr-x. 2 olgirl olgirl 62 3月  17 11:36 /home/olgirl/


2.默认情况下 root用户创建的文件权限,和普通用户创建的文件权限是不一样的?为什么?
	那么他们的UMASK又是在哪个文件中控制的呢?

	root创建的文件,默认是644
	[root@oldboy tmp]# ll root_file
	-rw-r--r--. 1 root root 0 3月  17 11:39 root_file

	普通用户创建的文件,默认是664
	[oldxu@oldboy tmp]$ ll
	-rw-rw-r--. 1 oldxu oldxu 0 Mar 17 11:39 oldxu_file

	?????

	root执行	666 - 022 = 644
	[root@oldboy tmp]# umask
	0022

	普通用户执行 666 - 002 =664
	[oldxu@oldboy tmp]$ umask
	0002

	
	当一个用户登陆系统时,会去加载一些环境变量,来初始化我们的工作目录。
	 /etc/profile    <--umask就在这里面给控制了????

#通过查看/etc/profile发现了如下公式:
----------------------------------------------------------------------------------------------
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
 	umask 002
else
		umask 022
fi
----------------------------------------------------------------------------------------------
root:   0  	既然你的UID没有大于199,那么就将你的 UMASK 初始化为 022
oldxu:  1000	UID大于199,并且,组名称和用户名称一致,所以条件成立,那么就讲你的UMASK初始化为  002


文件和目录的默认权限都是授UMASK控制,而UMASK是用户在登陆系统时,通过 /etc/profile 中的一个公式来进行的分别设定。

这里的UMASK可以改,但是我们基本不动他。(这是系统默认的机制,了解就可以,不要动!!!!!!!!!!!)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值