学习笔记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

  1. suid的作用

    suid作用于二进制可执行文件上,用户将继承此文件属主的权限

    Linux系统中,每个普通用户都可以更改自己的密码,这是合理的设置,问题是,普通用户的信息保存在 /etc/passwd文件中,用户的密码在 /etc/shadow 文件中,也就是说,普通用户在更改自己密码时,修改了 /etc/shadow 文件中的加密密码,但是文件权限显示,普通用户对这两个文件都没有写权限,确成功更改了密码,这是因为系统赋予了passwd命令SetUID权限,执行passwd命令的用户将继承此文件属主的权限。

  2. 图解suid作用

    image-20220317204735007

  3. 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表示
    
  4. 操作演示

    (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
    
  5. 总结:

    1.让普通用户对可执行的二进制文件,临时拥有二进制文件的属主权限
    2.如果设置的二进制文件没有执行权限,那么suid的权限显示就是S,否则是s
    3.特殊权限suid仅对二进制可执行程序有效,其他文件或目录则无效

    注意:suid极其危险,不信可以尝试对vim或者rm命令进行设定suid


三、特殊权限sgid

  1. sgid的作用:

    作用于目录上,如果在该目录下创建文件,都将与该目录的所属组保持一致

  2. sgid授权方法:

    # 1. 添加sgid
    ➜  ~ chmod g+s /test/
    ➜  ~ chmod 2755 /test/
    
    # 2. 取消sgid
    ➜  ~ chmod g-s /test/
    ➜  ~ chmod 755 /test/
    
    # 3. 补充说明:
    # 如果该属组权限位上有执行权限,则:s表示
    # 如果该属组权限位上没有执行权限,则:S表示
    
  3. 操作示例:

    (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
    
  4. sgid总结:

    1.针对目录权限位修改,用户在此目录下创建的目录或文件所属组和该目录的所属组一致。

    2.当某个目录设置了sgid后,在该目录中新建的文件,属组将不再是创建该文件的默认所属组

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


四、特殊权限sticky(粘滞位)

  1. sticky的作用:

    作用于目录上,目录中的内容只能由属主删除,其他人无法删除

    补充说明:

    普通用户对该目录拥有wx权限,即普通用户可以在此目录中拥有写入权限,如果没有粘滞位,那么普通用户拥有w权限,就可以删除此目录下的所有文件,包括其他用户的文件。但是一旦被赋予了粘滞位,除了root可以删除所有文件,普通用户就算有w权限也只能删除自己建立的文件,而不能删除其他用户的文件。

    Linux系统中存在的/tmp目录是经典的粘滞位目录,谁都有写权限,因此安全成问题,常常是木马第一手跳板

  2. 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
    
  3. 操作演示

    (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
    
  4. sticky粘滞位总结

    • 当多个用户在一个都具有写权限的目录,可以限制每个用户只能删自己的文件
    • 特殊权限sticky表现在othersx位,用小t表示,如果没有执行权限是T
    • 一个目录即使它的权限为777如果设置了粘滞位,除了目录的属主和root用户有权限删除,除此之外其他用户都不允许删除该目录

五、拓展知识

  1. 显示环境变量

    • env作用:查看用户个⼈的环境变量
    • set作用:查看系统所有环境变量
  2. 配置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]\]$ '
    

posted @   echo勇往直前  阅读(69)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示