学习Linux运维的个人笔记:特殊权限(十四)

一、特殊权限SUID

  • 前面我们已经学习过 r(读)、w(写)、 x(执行)这三种普通权限,但是我们在査询系统文件权限时会发现出现了一些其他权限字母,比如:
ll /usr/bin/passwd
	-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd
	   ▲
#普通用户-->执行-->passwd命令时。
	#1.由于passwd命令拥有suid特殊权限(在命令属主权限位有一个s),
	#2.那么在整个命令执行的过程中,会以命令的属主身份去运行该命令。  <-- root	
  • 普通用户 --> passwd —> 该命令属主身份root在运行 —> 依托root身份 --> 变更 /etc/shadow 密码信息
  • 例:
    默认情况下,所有普通用户,都无法查看/etc/shadow,有没有办法能够让所有的普通用户都能查看/etc/shadow。
su - xu 													#切换到普通用户
Last login: Sat Mar 14 00:54:53 CST 2020 on pts/0
$ cat /etc/shadow											#普通用户cat不了这个文件
cat: /etc/shadow: Permission denied
ll /usr/bin/cat												#查看cat命令权限
-rwxr-xr-x. 1 root root 54160 Oct 31  2018 /usr/bin/cat
chmod 4755 /usr/bin/cat										#赋予特殊权限SUID给cat命令
#或者chmod u+s /usr/bin/cat
ll /usr/bin/cat												#查看cat命令权限
-rwsr-xr-x. 1 root root 54160 Oct 31  2018 /usr/bin/cat
   ▲
$ cat /etc/shadow											#再次用普通用户cat这个文件
root:$6$z/ZkRi2of/59HbsT$pfSdItKyuq5/R6u0t4CzhapdU32fGc9d7Vxy6AKfJnU758IuBc/q4sIgY6w2aQHj6cE60GQbHLjx7.JiRl2/x0::0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::

二、特殊权限SGID

  • 表现形式: 在文件的 属组权限上有显示一个s(执行权限) S(没有执行权限)

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

  • 文件:普通用户 --> passwd —> 该命令属组身份 root 在运行 —> 依托root组 身份 --> 变更 /etc/shadow 密码信息
    目录:将目录设置为sgid后,如果在该目录下创建文件,都将与该目录的所属组保持一致

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

  • 应用为:

ll /usr/bin/cat
-rwxr-xr-x. 1 root root 54160 Oct 31  2018 /usr/bin/cat
chmod 2755 /usr/bin/cat
#或者chmod u+s /usr/bin/cat
ll /usr/bin/cat
-rwxr-sr-x. 1 root root 54160 Oct 31  2018 /usr/bin/cat
      ▲
  • sgid作用:
    使用sgid可以使得多个用户之间共享一个目录的所有文件变得简单。

三、特殊权限SBIT

  • 针对的是目录:
    目录一旦被赋予了粘滞位,除了 root 可以删除所有文件,普通用户对该目录就算拥有 w 权限,也只能删除自己建立的文件,而不能删除其他用户建立的文件。
chmod 1755 /usr/bin/cat
#或者chmod o+t /usr/bin/cat
ll /usr/bin/cat
-rwxr-xr-t. 1 root root 54160 Oct 31  2018 /usr/bin/cat
		 ▲

四、特殊属性

  • 权限有关
    比如说:
    1. 我希望创建一个文件,不允许被删除。包括root都不行。
    2. 我希望这个文件只能往里面追加数据。
    chattr 命令就能解决,它只有 root 用户可以使用,用来修改文件系统的权限属性,建立凌驾于 rwx 基础权限之上的授权。
  • chatrr+[+ - =]选项+文件或目录名
    选项:+ :增加权限
    -:减少权限
    = :等于某个权限
    a :让文件或者目录仅可追加内容
    i :不得任意更动文件或者目录
  • 例:配置一个文件,不能改,只能追加,不能删除
touch file					#创建文件
lsattr file					#查询文件系统属性
	---------------- file
chattr +a file				#给文件赋予特殊属性
lsattr file					#查询文件系统属性
	-----a---------- file
vim file					#手动编辑(失败)
echo '123' >>file			#追加文本(成功)
cat file
	123
rm -f file					#删除文件(失败)
	rm: cannot remove ‘file’: Operation not permitted、
#如果要删除文件,需要使用root身份,先取消属性,然后删除

五、默认权限UMASK

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

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

  • 默认创建普通用户家目录的权限。

vim /etc/login.defs
	UMASK           077		#创建用户时,设定的UMASK为077
#777-077=700	
ll -d /home/u1
drwx------. 3 u1 grp1 78 Mar 13 01:30 /home/u1
#如果我希望创建出来的目录权限是755,将/etc/login.defs 中UMASK设置为022
  • 默认情况下 root用户创建的文件权限,和普通用户创建的文件权限是不一样的:
  1. root创建的文件,默认是644
  2. 普通用户创建的文件,默认是664

当一个用户登陆系统时,会去加载一些环境变量,来初始化我们的工作目录。(/etc/profile)

vim /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
#普通用户:  1000	UID大于199,并且,组名称和用户名称一致,所以条件成立,那么UMASK初始化为  002
#文件和目录的默认权限都是授UMASK控制,而UMASK是用户在登陆系统时,通过 /etc/profile 中的一个公式来进行的分别设定。
UMASK扩展
  • 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 - 032 = 745
    touch f032 文件权限为666 - 032 = 634 + 010 = 644

  • umask值的所有位为奇数时
    umask 035
    mkdir d035 目录权限为777 - 035 = 742
    touch f035 文件权限为666 - 035 = 631 + 011 = 642

发布了34 篇原创文章 · 获赞 10 · 访问量 2329

猜你喜欢

转载自blog.csdn.net/weixin_44903608/article/details/104923746