linux 设置用户id 设置组id
 
 

最近看apue,简单记录对设置用户id理解(设置组id同理)。

1. 相关的id好像很多,共有哪些?

文件2个id 2个位:

拥有者id             拥有者组id

设置用户id位         设置组id位

进程6个或更多的id(如果有附加组id):

实际用户id             实际组id       (仅仅标志我们是谁,不参与文件访问权限检测)

有效用户id             有效组id        (用于文件访问检测)

保存的设置用户id       保存的设置组id  (有exec函数保存)

2. 进程打开、创建、删除文件时的权限测试?

测试的参与者是进程的有效用户id、有效组id、文件的拥有者id、文件拥有者组id。

(1)进程的有效用户id是0(超级用户),则允许访问;

(2)进程的有效用户id等于文件拥有者id,则按照拥有者的权限访问;

(3)进程有效组id或附加组id之一等于文件拥有者组id,则按照文件拥有者组的权限访问;

(4)否则,按照文件的其他用户访问权限访问;

上述的四步是按续依次进行的。

3. 什么时候用到设置用户id和设置组id?

当进程通过exec函数执行某个文件的时候,而且文件的设置用户id只会影响到进程的有效用户id

(其实也足够了,因为只有有效用户id参与权限测试),这样说不够严谨,因为进程的保存设置用

户id和保存设置组id会被exec函数从有效用户id和有效组id复制过来,所以保存的设置用户id和

保存的设置组id也会随之改变。

(1)当文件的设置用户id位和设置组id位没有打开:

进程的有效用户id和有效组id保持不变,严格按照第2步进行权限测试;

(2)文件的设置用户id位和设置组id位被打开:

exec函数才会把进程的有效用户id和有效组id设置为文件拥有者的用户id和组id,这时再进

行权限测试,进程就拥有了和文件拥有者一样的访问权限。

4. 进程保存设置用户id和保存设置组id有什么用?

顾名思义,这两个id存在的价值就是保存,保存谁呢?保存有效用户id和有效组id。当进程的

实际用户id和有效用户id不同时(组id同理),保存的设置用户id才有意义。因为这样就可以通

过调用setuid()把有效用户id切换为与进程的实际用户id或保存的设置用户id相同的值,不保存下

来,我们就弄丢了。

书上例子:

man程序文件的所有者及他属组通常是为man自身保留的用户和组, man可能需要执行许多其

他命令,以处理包含显示手册页的文件,为了防止被欺骗或重写错误文件, man在两种权限间

切换: 运行man命令用户的权限, 拥有man可执行文件用户的权限。下面列出其工作步骤:

(1)man拥有者是名为man的用户,且设置用户id位已经设置。当我们exec此程序时,用户id情况:

实际用户ID = 我们的用户ID
            有效用户ID = man      //设置用户id位已设置,有效用户id改变
            保存的设置用户ID = man  // 复制有效用户ID

(2) 进程访问需要的配置文件和手册页,这些文件由man用户拥有, 因为有效用户ID是man,

所以可以访问

(3)man 代表我们运行任一命令前, 调用setuid(getuid()) , 我们不是超级用户, 所以仅仅改变有效

用户ID,

用户ID情况变成:
          实际用户ID = 我们的用户ID (未改变)
          有效用户ID = 我们的用户ID
          保存的设置用户ID = man     //看出来了吧,如果不保存下来,我们就把man用户丢了,再想

setuid(man)就不会成功, 因为只允许将有效用户id设置为与实际用户id或保存的设置用户id

相同的值。 这时候,我们做回了自己,就只能访问我们通常可以访问的东西,没有特殊权限了。

man代表我们安全执行一次过滤。

(4)执行完过滤后,man再调用setuid(euid)(euid是man的数值用户id,man自己通过 geteuid

获得并保存的)。因为euid 等于保存的设置用户id,设置成功。(保存的设置用户id的价值所在)

得到:

实际用户ID = 我们的用户ID (未改变)
         有效用户ID = man 
         保存的设置用户ID = man (未改变)

5) 因为有效用户是man, 所以现在可以对其他文件进行操作了

【转】linux 设置用户id 设置组id的更多相关文章

  1. 获取和设置用户id以及组id

    #include<unistd.h> uid_t getuid(void); uid_t geteuid(void);//获取有效用户id gid_t getgid(void); gid_ ...

  2. 《UNIX环境高级编程》笔记--更改用户ID和组ID

    在unix系统中,特权是基于用户和组ID的,当程序需要增加特权,或需要访问当前并不允许访问的资源时,我们需要更换自己 用户ID或组ID,使的新ID具有合适的特权或访问权限.与此类似,当程序需要降低其特 ...

  3. 进程控制之更改用户ID和组ID

    在UNIX系统中,特权(例如能改变当前日期的表示法以及访问控制(例如,能否读.写一特定文件))是基于用户ID和组ID的.当程序需要增加特权,或需要访问当前并不允许访问的资源时,我们需要更换自己的用户I ...

  4. 更改用户id 和组id

    转自 http://blog.csdn.net/todd911/article/details/16370577 在unix系统中,特权是基于用户和组ID的,当程序需要增加特权,或需要访问当前并不允许 ...

  5. linux 中将用户添加到组的 4 个方法

    Linux 组是用于管理 Linux 中用户帐户的组织单位.对于 Linux 系统中的每一个用户和组,它都有惟一的数字标识号.它被称为 用户 ID(UID)和组 ID(GID).组的主要目的是为组的成 ...

  6. linux的用户管理、组管理

    用户管理:centos系统是一个多用户系统 用户分为三类: 超级用户(root) 用户id为 0 伪用户 用户id为1-499,虽然存在,但是不能用户登录 普通用户 用户id为500-60000 用户 ...

  7. Day 5 Linux之用户、群组和权限

    Linux之用户.群组和权限 一.各文件及内容对应含义 1./etc/passwd文件 功能:存储所有用户的相关信息,该文件也被称为用户信息数据库(Database). 含义:如下图所示. 2./et ...

  8. Linux id 命令 - 显示用户id和组id信息

    要登入一台计算机,我们需要一个用户名.用户名是一个可以被计算机识别的身份.基于此,计算机会对使用这个用户名的登陆的人应用一系列的规则.在Linux系统下,我们可以使用 id 命令. 什么是 id 命令 ...

  9. 用户id,组id和文件访问权限

    实际用户ID和实际组ID:标示了我们究竟是谁,这两个字段在登录时取自口令文件中的登录项 有效用户ID和有效组ID以及附属组ID:决定了我们的文件的访问权限(通常有效用户ID等于实际用户ID,有效组ID ...

  10. linux普通用户权限设置为超级用户权限方法、sudo不用登陆密码

    以用户zato为例 普通用户权限设置为超级用户权限 进入有超级用户权限的账号 添加文件可写(w)权限 sudo chmod u+x /etc/sudoers 编辑/etc/sudoers文件 添加语句 ...

随机推荐

  1. Jquery学习笔记 --ajax删除用户,使用了js原生ajax

    主要复习了php的pdo数据库操作,和js的ajax,真麻烦,希望jquery的ajax简单点. index.php: 1 <!DOCTYPE html> 2 <html lang= ...

  2. Ext分页实现(前台与后台)

    Ext分页实现(前台与后台)Spring+Mybatis 一.项目背景 关于Ext的分页网上有很多博客都有提到,但是作为Ext新手来说,并不能很容易的在自己的项目中得以应用.因为,大多数教程以及博客基 ...

  3. 【BZOJ 4582】【Usaco2016 Open】Diamond Collector

    http://www.lydsy.com/JudgeOnline/problem.php?id=4582 排好序后用两个指针直接\(O(n)\)扫,貌似这个东西学名"two pointers ...

  4. hdu3714 三分找最值

    Error Curves Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  5. 页置换算法FIFO、LRU、OPT

    页置换算法FIFO.LRU.OPT 为什么需要页置换 在地址映射过程中,若在页面中发现所要访问的页面不再内存中,则产生缺页中断.当发生缺页中断时操作系统必须在内存选择一个页面将其移出内存,以便为即将调 ...

  6. 【USACO 3.2】Spinning Wheels(同心圆旋转)

    题意: 5个同心圆,告诉你角速度,每个圆有1至5个楔,告诉你起点和宽度.求最早时间如果有的话使得存在某个角度经过5个圆的楔. 题解: 最重要的是要意识到,360秒钟后,每个圆都回到了原来的位置. 我的 ...

  7. jQuery对数组操作

    //对象数组 var trackObj1={ , "direcLine":"line31" }; var currentTrack=[]; currentTra ...

  8. #pragma once与#ifndef #define ...#endif的区别

    1. #pragma once用来防止某个头文件被多次include: #ifndef,#define,#endif用来防止某个宏被多次定义.   2. #pragma once是编译相关,就是说这个 ...

  9. MongoDB【第一篇】MongodDB初识

    NoSQL介绍 一.NoSQL简介 NoSQL,全称是”Not Only Sql”,指的是非关系型的数据库. 非关系型数据库主要有这些特点:非关系型的.分布式的.开源的.水平可扩展的. 原始的目的是为 ...

  10. Windows服务已经标记为删除

    一般卸载后..刷新一下服务列表就会消失不见..但是也会偶尔碰上一些钉子户.. 这时候其实重启一下机器就可以解决这个问题..会被回收掉..但是在服务器上..可不是随便都能重启的.. 这就到祭出杀手锏的时 ...