学习笔记13-Linux特殊权限
day13-学习笔记
一、特殊权限概述
-
Linnx除了常见的9位基本权限;linux权限位,还有3个特殊权限,一共是12位权限。
-
除了r(读)、 w(写)、 x(执行)这三种普通权限外,在查询系统文件权限时会发现还有其他的权限字母
# 1.suid ➜ ~ ll /usr/bin/passwd -rwsr-xr-x. 1 root root 28K Jun 10 2014 /usr/bin/passwd # 2.sgid ➜ ~ ll /usr/bin/write -rwxr-sr-x. 1 root tty 20K Apr 11 2018 /usr/bin/write # 3.sticky ➜ ~ ll -d /tmp drwxrwxrwt. 9 root root 152 Mar 17 10:56 /tmp
-
第一个是setuid位(八进制表示为4000)
如果将其应用于可执行文件,会将有效用户ID(effective user ID)从真实用户(实际执行程序的用户)ID更改为程序属主的有效用户ID。大多数情况下,少数超级用户的程序才会做此设置。当普通用户执行setuid root程序时,该程序将以超级用户的权限来执行,可以访问普通用户通常被禁止访问的文件和目录。这显然会带来安全隐患,因此允许设置setuid位的程序数量必须控制在最小范围内
➜ ~ ll /usr/bin/passwd -rwsr-xr-x. 1 root root 28K Jun 10 2014 /usr/bin/passwd
-
第二个是setgid位(八进制表示为2000)
类似于setuid位,它会将有效组ID(effective group ID)从真实用户的真实组ID(real group ID)更改为文件属主的有效组ID。如果对目录设置setgid位,那么在该目录下新创建的文件将由该目录的属组所有,而非文件创建者的属组所有。这在共享目录中非常有用,当一个共同属组的成员需要访问目录中的所有文件时,不用管文件属主的属组是什么
➜ ~ ll -d data drwxr-sr-x 5 root devops 111 Mar 17 13:32 data ➜ ~ ll data total 0 drwxr-sr-x 2 root devops 6 Mar 17 13:32 directory1 -rw-r--r-- 1 root devops 0 Mar 17 13:32 file1.txt
-
第三个是粘滞(sticky)位(八进制表示为1000)
这是来自“远古”UNIX的遗留产物,用于将可执行文件标记为“不可交换”。Linux会忽略文件上设置的粘滞位;如果对目录设置了粘滞位,则能够阻止用户删除或者重命名其中的文件,除非用户是该目录的属主,或者是文件的属主,又或者是超级用户。粘滞位常用来控制对共享目录(如/tmp)的访问
➜ ~ ll -d /tmp drwxrwxrwt. 9 root root 152 Mar 17 10:56 /tmp
-
特殊权限对照表
类别 suid sgid sticky 字符表示 S S T 出现位置 用户权限位x 用户组权限位x 其他用户权限位x 数字表示 4 2 1 八进制表示 4000 2000 1000 生效对象 用户位 用户组 其他用户 具有执行权限x s s t 不具有执行权限x S S T
二、特殊权限suid
-
suid
的作用suid
作用于二进制可执行文件上,用户将继承此文件属主的权限在
Linux
系统中,每个普通用户都可以更改自己的密码,这是合理的设置,问题是,普通用户的信息保存在/etc/passwd
文件中,用户的密码在/etc/shadow
文件中,也就是说,普通用户在更改自己密码时,修改了/etc/shadow
文件中的加密密码,但是文件权限显示,普通用户对这两个文件都没有写权限,确成功更改了密码,这是因为系统赋予了passwd
命令SetUID
权限,执行passwd
命令的用户将继承此文件属主的权限。 -
图解
suid
作用 -
suid
权限设置# 1. 添加suid ➜ ~ chmod u+s /usr/bin/cp ➜ ~ chmod 4755 /usr/bin/cp # 2. 取消sgid ➜ ~ chmod u-s /usr/bin/cp ➜ ~ chmod 755 /usr/bin/cp # 3. 补充说明: # 如果该属主权限位上有执行权限,则:s表示 # 如果该属主权限位上没有执行权限,则:S表示
-
操作演示
(1)查看
passwd
权限位[andy@server ~]$ll /usr/bin/passwd -rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd # passwd默认具有suid,可以修改密码
(2)普通用户修改密码
[andy@server ~]$passwd Changing password for user andy. Changing password for andy. (current) UNIX password: New password: Retype new password: passwd: all authentication tokens updated successfully. # 密码修改成功
(3)取消
passwd
命令suid
权限# 1.未修改前权限 [andy@server ~]$ll /usr/bin/passwd -rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd # 2.使用root修改passwd权限 ➜ ~ chmod u-s /usr/bin/passwd ➜ ~ ll /usr/bin/passwd -rwxr-xr-x. 1 root root 28K Jun 10 2014 /usr/bin/passwd
(4)普通用户再次修改密码测试
[andy@server ~]$passwd Changing password for user andy. Changing password for andy. (current) UNIX password: New password: Retype new password: passwd: Authentication token manipulation error # 取消passwd命令的suid权限,普通用户将无法修改密码;原因为passwd命令没有以root用户身份执行,无法向/etc/passwd和/etc/shadow文件写入信息,所有失败
(5)还原
passwd
命令suid
权限➜ ~ chmod u+s /usr/bin/passwd ➜ ~ ll /usr/bin/passwd -rwsr-xr-x. 1 root root 28K Jun 10 2014 /usr/bin/passwd
-
总结:
1.让普通用户对可执行的二进制文件,临时拥有二进制文件的属主权限
2.如果设置的二进制文件没有执行权限,那么suid
的权限显示就是S
,否则是s
3.特殊权限suid
仅对二进制可执行程序有效,其他文件或目录则无效注意:
suid
极其危险,不信可以尝试对vim
或者rm
命令进行设定suid
三、特殊权限sgid
-
sgid
的作用:作用于目录上,如果在该目录下创建文件,都将与该目录的所属组保持一致
-
sgid
授权方法:# 1. 添加sgid ➜ ~ chmod g+s /test/ ➜ ~ chmod 2755 /test/ # 2. 取消sgid ➜ ~ chmod g-s /test/ ➜ ~ chmod 755 /test/ # 3. 补充说明: # 如果该属组权限位上有执行权限,则:s表示 # 如果该属组权限位上没有执行权限,则:S表示
-
操作示例:
(1)创建一个共享目录/home/admins
➜ ~ mkdir /home/admins ➜ ~ ll -d /home/admins drwxr-xr-x 2 root root 6 Mar 17 15:00 /home/admins
(2)要求该目录属组是
adminuser
,adminuser
# 1. 创建adminusers组 ➜ ~ groupadd adminuser # 2. 修改/home/admins目录属组 ➜ ~ chown .adminuser /home/admins # 3. 检查修改结果 ➜ ~ ll -d /home/admins drwxr-xr-x 2 root adminuser 6 Mar 17 15:00 /home/admins
(3)其他用户均无任何权限;组内成员对该目录的权限是,可读,可写,可执行
# 1. 修改权限 ➜ ~ chmod g=rwx,o= /home/admins # 2. 检查修改结果 ➜ ~ ll -d /home/admins drwxrwx--- 2 root adminuser 6 Mar 17 15:00 /home/admins
(4)配置在
/home/admins
下创建的文件,自动继承adminuser
组的权限# 1. 为/home/admins目录添加sgid权限 ➜ ~ chmod g+s /home/admins # 2. 检查执行结果 ➜ ~ ll -d /home/admins drwxrws--- 2 root adminuser 6 Mar 17 15:00 /home/admins
(5)此时你在这个目录下,创建的文件,自动继承adminuser的权限
# 1. 查看/home/admins目录权限 ➜ admins ll -d /home/admins drwxrws--- 5 root adminuser 99 Mar 17 15:10 /home/admins # 2. 验证/home/admins目录下的目录及文件的属组信息 ➜ admins ll /home/admins total 0 drwxr-sr-x 2 root adminuser 6 Mar 17 15:10 directory1 drwxr-sr-x 2 root adminuser 6 Mar 17 15:10 directory2 drwxr-sr-x 2 root adminuser 6 Mar 17 15:10 directory3 -rw-r--r-- 1 root adminuser 0 Mar 17 15:10 file1 -rw-r--r-- 1 root adminuser 0 Mar 17 15:10 file2 -rw-r--r-- 1 root adminuser 0 Mar 17 15:10 file3
-
sgid
总结:1.针对目录权限位修改,用户在此目录下创建的目录或文件所属组和该目录的所属组一致。
2.当某个目录设置了
sgid
后,在该目录中新建的文件,属组将不再是创建该文件的默认所属组3.使用
sgid
可以使得多个用户之间共享一个目录的所有文件变得简单
四、特殊权限sticky(粘滞位)
-
sticky
的作用:作用于目录上,目录中的内容只能由属主删除,其他人无法删除
补充说明:
普通用户对该目录拥有
w
和x
权限,即普通用户可以在此目录中拥有写入权限,如果没有粘滞位,那么普通用户拥有w
权限,就可以删除此目录下的所有文件,包括其他用户的文件。但是一旦被赋予了粘滞位,除了root
可以删除所有文件,普通用户就算有w
权限也只能删除自己建立的文件,而不能删除其他用户的文件。Linux
系统中存在的/tmp
目录是经典的粘滞位目录,谁都有写权限,因此安全成问题,常常是木马第一手跳板 -
sticky
权限设置# 1. 添加sticky ➜ / chmod o+t /tmp ➜ / chmod 1777 /tmp ➜ / ll -d /tmp drwxrwxrwt. 8 root root 105 Mar 17 15:33 /tmp # 2. 取消sticky ➜ / chmod o-t /tmp ➜ / chmod 777 /tmp ➜ / ll -d /tmp drwxrwxrwx. 8 root root 105 Mar 17 15:33 /tmp # 3. 补充说明: # 如果该其他用户权限位上有执行权限,则:t # 如果该其它用户权限位上没有执行权限,则:T
-
操作演示
(1)取消
tmp
目录sticky
,使andy
用户删除其他用户文件# 1. root用户取消/tmp目录粘滞位权限 ➜ / chmod o-t /tmp ➜ / ll -d /tmp drwxrwxrwx. 8 root root 105 Mar 17 15:33 /tmp # 2. andy用户删除mike用户的文件 [andy@server tmp]$ll -rw-rw-r-- 1 andy andy 0 Mar 17 15:41 andy_file.txt -rw-rw-r-- 1 mike mike 0 Mar 17 15:41 mike_file.txt [andy@server tmp]$rm mike_file.txt # 3. 检查删除结果 [andy@server tmp]$ll # 已删除 -rw-rw-r-- 1 andy andy 0 Mar 17 15:41 andy_file.txt
(2)添加
/tmp
目录sticky
,使andy
用户无法删除其他用户的文件# 1. root用户为/tmp目录添加粘滞位权限 ➜ ~ chmod 1777 /tmp ➜ ~ ll -d /tmp drwxrwxrwt. 7 root root 114 Mar 17 15:42 /tmp # 2. andy用户尝试删除其他用户文件 [andy@server tmp]$ll total 0 -rw-rw-r-- 1 andy andy 0 Mar 17 15:41 andy_file.txt -rw-rw-r-- 1 mike mike 0 Mar 17 15:46 mike_file.txt [andy@server tmp]$rm -rf mike_file.txt rm: cannot remove ‘mike_file.txt’: Operation not permitted # 无法删除其他用户文件,提示不允许操作 # 3. andy用户删除自己的文件 [andy@server tmp]$rm -rf andy_file.txt [andy@server tmp]$ll # andy用户的文件已被删除 -rw-rw-r-- 1 mike mike 0 Mar 17 15:46 mike_file.txt
-
sticky
粘滞位总结- 当多个用户在一个都具有写权限的目录,可以限制每个用户只能删自己的文件
- 特殊权限
sticky
表现在others
的x
位,用小t
表示,如果没有执行权限是T
- 一个目录即使它的权限为
777
如果设置了粘滞位,除了目录的属主和root
用户有权限删除,除此之外其他用户都不允许删除该目录
五、拓展知识
-
显示环境变量
env
作用:查看用户个⼈的环境变量set
作用:查看系统所有环境变量
-
配置
PS1
变量PS1
变量作用:修改命令提示符显示信息格式的变量[\u@\h \W]\]$ # 配置信息说明: \u 显示用户名 \h 显示主机名 \W 显示用户所处目录的最后一级 \w 显示用户所处的绝对路径,省去你敲pwd \t 以24小时制,显示时间 \$ 显示用户的身份提示符,自动识别root还是普通用户
(1)普通用户永久生效
[andy@server ~]$vim ~/.bash_profile PS1='[\u@\h \W]\]$ '
(2)root用户永久生效
[root@server ~]#vim ~/.bash_profile PS1='[\u@\h \W]\]$ '
(3)所有用户生效
[root@server ~]#vim /etc/profile PS1='[\u@\h \W]\]$ '
本文来自博客园,作者:echo勇往直前,转载请注明原文链接:https://www.cnblogs.com/wangrengang/p/16019029.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」