在讲解《权限位》一节时提到过,其实除了 rwx 权限,还会用到 s 权限,例如:

[root@localhost ~]# ls -l /usr/bin/passwd

-rwsr-xr-x. 1 root root 22984 Jan  7  2007 /usr/bin/passwd

可以看到,原本表示文件所有者权限中的 x 权限位,却出现了 s 权限,此种权限通常称为SetUID,简称SUID 特殊权限。

SUID 特殊权限仅适用于可执行文件,所具有的功能是,只要用户对设有 SUID 的文件有执行权限,那么当用户执行此文件时,会以文件所有者的身份去执行此文件,一旦文件执行结束,身份的切换也随之消失。

举一个例子,我们都知道,Linux 系统中所有用户的密码数据都记录在 /etc/shadow 这个文件中,通过 ll /etc/shadow 命令可以看到,此文件的权限是 0(———),也就是说,普通用户对此文件没有任何操作权限。

这就会产生一个问题,为什么普通用户可以使用 passwd 命令修改自己的密码呢?

本节开头已经显示了 passwd 命令的权限配置,可以看到,此命令拥有 SUID 特殊权限,而且其他人对此文件也有执行权限,这就意味着,任何一个用户都可以用文件所有者,也就是 root 的身份去执行 passwd 命令。

Linux 系统中,绝对多数命令的文件所有者默认都是 root。

换句话说,当普通用户使用 passwd 命令尝试更改自己的密码时,实际上是在以 root 的身份执行passwd命令,正因为 root 可以将密码写入 /etc/shadow 文件,所以普通用户也能做到。只不过,一旦命令执行完成,普通用户所具有的 root身份也随之消失。

如果我们手动将 /usr/bin/passwd 文件的 SUID 权限取消,会发生什么呢?观察如下命令的执行过程:

[root@localhost ~]# chmod u-s /usr/bin/passwd

#属主取消SetUID权限

[root@localhost ~]# ll /usr/bin/passwd

-rwxr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd

[root@localhost ~]# su – lamp

[lamp@localhost ~]$ passwd

Changing password for user lamp.

Changing password for user.

(current) UNIX password:

#看起来没有什么问题

New passwor:

Retype new password:

password:Authentication token manipulation error

#最后密码没有生效

显然,虽然用户有执行 passwd 命令的权限,但无修改 /etc/shadow 文件的权限,因此最终密码修改失败。

注意,实验完成后,一定要再把 /usr/bin/passwd 文件的 SetUID 权限加上。

那么,普通用户可以使用 cat 命令查看 /etc/shadow 文件吗?答案的否定的,因为 cat 不具有 SUID 权限,因此普通用户在执行 cat /etc/shadow 命令时,无法以  root 的身份,只能以普通用户的身份,因此无法成功读取。

我们可以使用下面这张图来描述上述过程:

图 1 SUID示意图

由此,我们可以总结出,SUID 特殊权限具有如下特点:

只有可执行文件才能设定 SetUID 权限,对目录设定 SUID,是无效的。

用户要对该文件拥有 x(执行)权限。

用户在执行该文件时,会以文件所有者的身份执行。

SetUID 权限只在文件执行过程中有效,一旦执行完毕,身份的切换也随之消失。

linux 进程 setuid,Linux SetUID(SUID)文件特殊权限用法详解相关推荐

  1. linux 添加sbit权限,Linux Stick BIT(SBIT)文件特殊权限用法详解

    Sticky BIT,简称 SBIT 特殊权限,可意为粘着位.粘滞位.防删除位等. SBIT 权限仅对目录有效,一旦目录设定了 SBIT 权限,则用户在此目录下创建的文件或目录,就只有自己和 root ...

  2. 乌班图linux命令,乌班图Ubuntu常用命令及用法详解

    1.ls 这个相当于Windows 下的dir命令,可以列出当前窗口或指定窗口下的内容. 2.rm 这个相当于Windows 下的del 和rmdir 命令,可以删除文件及文件夹. 常见用法:rm - ...

  3. linux mdadm 源码,mdadm命令_Linux mdadm 命令用法详解: mdadm 标准的软件 RAID 管理工具...

    mdadm 命令 基本语法mdadm [mode] [options] [mode] 7种Assemble:将以前定义的某个阵列加入当前在用阵列. Build:Build a legacy array ...

  4. windows服务器文件夹权限设置详解,windows服务器如何设置文件夹权限

    windows服务器如何设置文件夹权限 内容精选 换一换 实际业务场景下,您可能会需要将文件临时分享给其他人或者将文件永久共享给其他人.临时分享:通过文件的临时URL直接将其分享给其他用户.文件分享强 ...

  5. jquery组件WebUploader文件上传用法详解

    这篇文章主要为大家详细介绍了jquery组件WebUploader文件上传用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 WebUploader是由Baidu WebFE(FEX)团队开发的一 ...

  6. linux进程管理工具supervisor安装卸载、子配置文件详解、遇到的问题、supervisor group群组管理、启动一个springboot项目示例、update命令注意点

    简介 Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启. 它是通过fork/exec的方式把这些被管 ...

  7. 使用ls命令查看Linux的目录结构,linux查看工作目录文件ls命令用法详解

    查看工作目录文件ls ls命令是Linux下最常用的命令.ls命令就是list的缩写.默认情况下ls用来查看当前目录的清单,如果ls指定其他目录,那么就会显示指定目录里的文件及文件夹清单.通过ls命令 ...

  8. linux 命令gpasswd -a,gpasswd命令_Linux gpasswd命令用法详解:Linux下工作组文件的管理工具...

    gpasswd命令是Linux下工作组文件/etc/group和/etc/gshadow管理工具. 语法gpasswd(选项)(参数) 选项-a:添加用户到组: -d:从组删除用户: -A:指定管理员 ...

  9. scp linux 命令加密码,scp命令_Linux scp 命令用法详解:加密的方式在本地主机和远程主机之间复制文件...

    scp命令用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速度.当你服务器硬盘变为只读read onl ...

最新文章

  1. Kali Linux python 安装pip
  2. 超声波测距测速升压可调中周倒车雷达变频器传感器1:10
  3. Mysql Proxy的安装配置详细教程
  4. 别再傻傻地用这些软件G转P了,修复后不稳定的真相在这里
  5. Android签名机制之---签名验证过程详解
  6. Android中使用retrofit2进行网络get请求查询数据和post请求上传文件
  7. 语义匹配(一)【NLP论文复现】Sentence-BERT 句子语义匹配模型的tensorflow实现以及训练Trick
  8. out类型参数的讲解
  9. 笨办法学linux dhcp,了解网关、DNS、子网掩码、MAC地址、DHCP
  10. linux服务器配置端口,Linux服务器配置-新增端口
  11. Python是非常优美的语言,那到底如何个美呢?
  12. Java学习--泛型
  13. plc的指针和c语言指针,关于STEP7 Pointer指针的问题
  14. 典型的异步客户端套接字构建
  15. 使用javascript 实现.net 验证控件功能
  16. myeclipse 创建work set 后不显示的解决方法
  17. 2021MathorCup高校数学建模挑战赛——大数据竞赛的一些想法总结
  18. 我本人常去的一些技术性网站!!(不定期更新)
  19. Linux/软件 - 资源[国外站点]
  20. 抢红包: 红包过期失效案例

热门文章

  1. 一篇文章带你解析,乐观锁与悲观锁的优缺点
  2. 面试旧敌之红黑树(直白介绍深入理解)
  3. Asp.net 字符串操作基类(安全,替换,分解等)
  4. JS-获取class类名为某个的元素-【getClass】函数封装
  5. React从入门到精通系列之(12)深入理解JSX
  6. Linux下安装FTP
  7. 用master-worker模型比对团队管理
  8. 常用16种视图切换动画
  9. Linux中的Kdump
  10. lnmp里面php测试脚本,军哥LNMP V1.4测试版一键脚本安装以及功能上的升级体验