Linux系统UID和GID详解

一个文件都有一个所有者, 表示该文件是谁创建的. 同时, 该文件还有一个组编号, 表示该文件所属的组, 一般为文件所有者所属的组.

如果是一个可执行文件, 那么在执行时, 一般该文件只拥有调用该文件的用户具有的权限. 而setuid, setgid 可以来改变这种设置.

setuid: 设置使文件在执行阶段具有文件所有者的权限. 典型的文件是 /usr/bin/passwd. 如果一般用户执行该文件, 则在执行过程中, 该文件可以获得root权限, 从而可以更改用户的密码.

setgid: 该权限只对目录有效. 目录被设置该位后, 任何用户在此目录下创建的文件都具有和该目录所属的组相同的组.

sticky bit: 该位可以理解为防删除位. 一个文件是否可以被某用户删除, 主要取决于该文件所属的组是否对该用户具有写权限. 如果没有写权限, 则这个目录下的所有文件都不能被删除, 同时也不能添加新的文件. 如果希望用户能够添加文件但同时不能删除文件, 则可以对文件使用sticky bit位. 设置该位后, 就算用户对目录具有写权限, 也不能删除该文件.

下面说一下如何操作这些标志:

操作这些标志与操作文件权限的命令是一样的, 都是 chmod. 有两种方法来操作,

1) chmod u+s temp -- 为temp文件加上setuid标志. (setuid 只对文件有效)

chmod g+s tempdir -- 为tempdir目录加上setgid标志 (setgid 只对目录有效)

chmod o+t temp -- 为temp文件加上sticky标志 (sticky只对文件有效)

2) 采用八进制方式. 对一般文件通过三组八进制数字来置标志, 如 666, 777, 644等. 如果设置这些特殊标志, 则在这组数字之外外加一组八进制数字. 如 4666, 2777等. 这一组八进制数字三位的意义如下:

abc

a - setuid位, 如果该位为1, 则表示设置setuid

b - setgid位, 如果该位为1, 则表示设置setgid

c - sticky位, 如果该位为1, 则表示设置sticky

设置完这些标志后, 可以用 ls -l 来查看. 如果有这些标志, 则会在原来的执行标志位置上显示. 如

rwsrw-r-- 表示有setuid标志

rwxrwsrw- 表示有setgid标志

rwxrw-rwt 表示有sticky标志

那么原来的执行标志x到哪里去了呢? 系统是这样规定的, 如果本来在该位上有x, 则这些特殊标志显示为小写字母 (s, s, t). 否则, 显示为大写字母 (S, S, T)

要删除一个文件,你不一定要有这个文件的写权限,但你一定要有这个文件的上级目录的写权限。也就是说,你即使没有一个文件的写权限,但你有这个文件的上级目录的写权限,你也可以把这个文件给删除,而如果没有一个目录的写权限,也就不能在这个目录下创建文件。

如何才能使一个目录既可以让任何用户写入文件,又不让用户删除这个目录下他人的文件,sticky就是能起到这个作用。stciky一般只用在目录上,用在文件上起不到什么作用。

在一个目录上设了sticky位后,(如/tmp,权限为1777)所有的用户都可以在这个目录下创建文件,但只能删除自己创建的文件,这就对所有用户 能写的目录下的用户文件启到了保护的作用。(我当时/tmp没有设sticky位,而在文件上设了,这也就是为什么我为什么设了sticky位,还能删除 自己创建的文件的原因了)

--------------------------------------------------------------------------------

suid/sgid

要了解 suid/sgid, 必需先了解 process 及 permission.

我们需知道: 每个 process 都有其 effective uid/gid , 以决定其在传统 unix filesystem 中获得的实际 permission .

再, process 是由 binary 产生的, 而 binary 是从 shell / shell script 载入执行.

在正常的情況下, process 的 effective uid/gid 是从 parent 继承, 或简单说是与 shell 的 uid/gid 一样。

shell 的 uid/gid 則是根据 /etc/passwd 的第 3 与第 4 两位决定.

当我们有了以上的概念之后, 再来看 suid 对 effective uid/gid 的影响:

若 binary file 带有 suid/sgid 的时候, 其 effective id 就不是从 parent 那边继承, 而是以 binary file 本身的 user/group 为准。

举例而言, 若一个 prog1 的 user/group 都是 root , 但沒设 suid/sgid ,

那当一个uid(500)/gid(500) 的 parent process 执行这个 prog1 的话,

那 effective uid/gid 就是 500 ...

但若 prog1 设了 suid/sgid 后, 那其 effective uid/gid 就是 root !

一旦这个 process effective 是 root 的话, 那它对 file system 的 permission 就不受任何限制了.

因此我才在前面提到木马程式与病毒的例子...

试想一下: 若病毒的 user/group 被设为 root, 然后被一般 user 执行时,

suid/sgid 的有与无将导致什么不同结果?

好了, 由于 suid/sgid 在系统上有其存在的必要性(如 /usr/bin/passwd 与 /etc/shadow 为例),

但同时又有极大的杀伤力, 在应用上要异常小心!

因此, bash shell script 在先天上不支援 suid/sgid .

perl 亦如此, 除非额外再安裝 suid-perl ....

--------------------------------------------------------------------------------

uid gid euid egid

root 0 0

test 500 500

tset.shell 500 500 500 500 登陆后的shell

test.passwd.process 500 500 0 500 fork后

(-r-s--x--x)

test用户fork binary文件passwd后,test属于others,拥有该文件的x权利,因为设置了suid,所以fork出来的进程(passwd.process)的euid=

文件(passwd)的owner的uid 也就是

passwd.process.euid=passwd.owner.uid=0

euid和guid是用来进程passwd.process发生读,写,执行文件shadow的时候确认访问权限的.

-r-------- 1 root root 855 Sep 4 10:58 /etc/shadow ( passwd.uid=0 有r权限 )

文件shadow.owner.uid为0拥有r权限 因为passwd.process.euid=shadow.ower.uid=0所以由test用户产生的进程passwd.process拥有文件

shadow的r权限

-r-s--x--x 1 root root 19336 Sep 7 2004 /usr/bin/passwd

linux gid 含义,Linux系统UID和GID详解相关推荐

  1. linux vsftpd用法,Linux_LINUX系统下vsftpd 命令详解,FTP命令是Internet用户使用最频 - phpStudy...

    LINUX系统下vsftpd 命令详解 FTP命令是Internet用户使用最频繁的命令之一,不论是在DOS还是UNIX操 作系统下使用FTP,都会遇到大量的FTP内部命令. 熟悉并灵活应用FTP的内 ...

  2. linux命令清理磁盘空间,linux环境下清理系统磁盘空间命令详解

    提示 1:清理残余的配置文件 一般而言,当我们从 Ubuntu 系统中删除了一个软件之后,该软件的残余配置文件并没有被删除.如果你确信以后不再使用该软件,那么保留其配置文件实在没有必要,所以我们大可一 ...

  3. Linux性能监测(系统监测统计命令详解)

    通过这个命令,可以最简便的看出系统当前基本状态信息,这里面最有用是负载指标,如果你还想查看当前系统的CPU/内存以及相关的进程状态,可以使用TOP命令. TOP 通过TOP命令可以详细看出当前系统的C ...

  4. linux(ubuntu)系统下Top命令详解

    参考链接: 1. https://www.cnblogs.com/niuben/p/12017242.html 2. https://blog.csdn.net/qq_39416311/article ...

  5. Linux系统UID和GID详解

    Linux系统UID和GID详解 <script src="http://hot.tianyaclub.com/hot.js"></script> 一个文件 ...

  6. linux系统下grub.cfg详解和实例操作

    linux系统下grub.cfg详解和实例操作 简介 grub是引导操作系统的程序,它会根据自己的配置文件,去引导内核,当内核被加载到内存以后,内核会根据grub配置文件中的配置,找到根分区所使用的文 ...

  7. u盘制作大师 linux系统教程,制作用U盘启动的Linux系统的简单步骤详解

    制作用U盘启动的Linux系统的简单步骤详解 最近听朋友说误删除了Linux系统里的文件,于是系统进不了,里面保存着很多重要的数据,这该怎么办?虽然可以把硬盘取出挂载其他Linux系统运行,也可跳过控 ...

  8. Linux 系统 ldirectord.cf 文件详解

    Linux 系统 ldirectord.cf 文件详解 时间:2012-04-06 09:35 来源:未知 作者:admin 点击:129次 ldirectord使用一个配置文件建立IPVS表,你可以 ...

  9. Linux系统之dd命令详解

    Linux系统之dd命令详解 一.dd命令介绍 1.dd介绍 2.dd的相关解释 二.创建指定大小的文件 三.给磁盘的分区做备份 1.磁盘分区备份 2.磁盘分区还原 四.清空磁盘 五.给磁盘备份 1. ...

最新文章

  1. 你了解计算机系统的层次结构吗?计算机语言怎么发展的?
  2. 2.1.2 骑自行车的最短时间
  3. 无线路由器发起ARP攻击,致使网络中断,这是为什么?
  4. ckeditor源码编辑模式,添加style、javascript内容丢失的解决
  5. PHP排序算法的复习和总结
  6. ios采用什么技术_app软件公司开发宠物别APP采用什么技术?
  7. 高德地图调用和添加标注
  8. IO 端口和IO 内存(原理篇)
  9. 【通俗易懂】手把手带你实现DeepFM!
  10. 【gulp】----gulp的使用
  11. 写给人类的机器学习 2.2 监督学习 II
  12. php -l 检查文件是否语法错误
  13. stm32中的延时函数
  14. 手把手教如何制作数字证书并进行程序的数字签名
  15. 【四足机器人--控制器统筹controlFSM(复杂度2)】HFSM四足机器人步态运行有限状态机fsm_manager代码解析【包括FSM_control、FSM_statelist两层】
  16. 范德堡大学计算机专业课程,2020年范德堡大学专业设置
  17. winform右下角弹窗
  18. Windows VScode SSH连接 Bad owner or permissions on C:\\Users\\admin/.ssh/config 错误解决方法
  19. 腾讯抖音搬运视频如何消重
  20. 控制反转(IOC) 和依赖注入(DI) 的理解

热门文章

  1. P7441 「EZEC-7」Erinnerung
  2. 【笔记】行测——图形推理总结与归纳
  3. ganglia离线安装_ganglia安装教程(centos7)
  4. main java src_java建项目时,带有“src/main/java”的目录是怎么建的?
  5. 安装gromacs报错记录
  6. forever 管理node服务
  7. 微信小程序的茶叶线上购买电商系统源码下载
  8. 数学建模-斯皮尔曼spearman相关系数
  9. IllegalArgumentException:非法参数异常
  10. vmware converter p2v windows2008R2