精华内容
下载资源
问答
  • linux 实际用户ID 有效用户ID 和设置用户ID位

    linux 实际用户ID 有效用户ID 和设置用户ID位


    实际用户ID:实际用户ID标识了我们是谁,通常在登录后不会改变,但是超级用户有方法改变。
    有效用户ID:有效用户ID决定了文件访问权限(通常有效用户ID等于实际用户ID)。

    以上概念可能比较抽象,举例说明:

    用户A(实际用户ID=110) 用户B(实际用户ID=120)

    文件: 1.txt(用户A有读写权限,用户B没有读写权限)

    一个用户A创建了一个可执行文件 test,然后这个可执行文件test属于ID为110的用户A。test可执行程序在执行后会操作文件1.txt。用户A去执行test程序后,进程的有效用户ID就等于实际用户ID,也就是110。此时可以读写1.txt。
    但是当用户B去执行test程序后,进程的有效用户ID等于实际用户ID,也就是120。因为有效用户ID决定了文件访问权限,ID120对1.txt没有读写权限,此时进程将无法读写1.txt。

    如果用户A在创建了test后,设置了用户ID位,
    chmod u+s test
    此时,用户B再去执行test程序后,进程的实际用户ID=120,但是因为test设置了用户ID位,有效用户ID=110(也就是test文件的实际所属用户),此时就可以正常读写1.txt。
    这就是有效用户ID决定文件访问权限的意思。

    像passwd这个命令操作了/etc/passwd这个文件,这个文件普通用户是无法修改的,但是root用户对passwd设置了用户ID位,在普通用户使用passwd时,其有效用户ID等于了root的有效用户ID,就可以对/etc/passwd进行修改了。

    展开全文
  • 无死角理解保存设置用户ID,设置用户ID位,有效用户ID,实际用户ID demiaowu http://blog.csdn.net/u011412619/article/details/44002807 最近在理解保存设置用户ID时,遇到一些问题,但是发现...

    无死角理解保存设置用户ID,设置用户ID位,有效用户ID,实际用户ID


    最近在理解保存设置用户ID时,遇到一些问题,但是发现网上都没能把这个问题说清楚,通过自己的思考和查找资料,终于明白了,现在分享在这里共大家交流学习,如果有不正确的地方,欢迎指正

    1,基本概念:

    实际用户ID(RUID):用于标识一个系统中用户是谁,一般是在登录之后,就被唯一确定的,就是登陆的用户的uid

    有效用户ID(EUID):用于系统决定用户对系统资源的权限。也就是说当用户做任何一个操作时,最终看它有没有权限,都是在判断有效用户ID是否有权限,如果有,则OK,否则报错不能执行。在正常情况下,一个用户登录之后(我们假设是A用户),A用户的有效用户ID和实际用户ID是相同的,但是如果A用户在某些场景中想要执行一些特权操作,而上面我们说到用户的任何操作,LINUX内核都是通过检验有效用户ID来判断当前执行这个操作的用户是否具有权限,显然是特权操作,A用户没有权限,所以A用户就只能通过一定的手段来修改当前的有效用户ID使其具有执行特权操作的权限。这里说明了下面为什么我们需要修改有效用户ID,就是想再某一时刻能够执行一些特权操作。下面在举例说明。

    设置用户ID位:用于对外的权限的开发,它的作用是我们如何去修改有效用户ID,在后面的例子中在展开。

    保存设置用户ID(SUID):是有效用户ID副本,既然有效用户ID是副本,那么它的作用肯定是为了以后恢复有效用户ID用的。

    2,改变三个用户ID的方法

    下面这幅图给出了改变实际用户ID,有效用户ID和保存设置用户ID的方法

                                   

    3,实例1,如何在权限不够的情况下执行特权权限,也就是更改我们的有效用户ID。

    我们知道用户的密码都是存放在/etc/shadow文件下,我们看下这个文件的权限
    root@debian:~# ls -l /etc/shadow
    -rw-r----- 1 root shadow 8013 Sep  8 14:58 /etc/shadow
    假如我是一个普通用户,显然我是可以修改我的密码的,通过passwd命令,无可厚非。自己修改自己的密码肯定是被允许的。
    但是仔细想想你会发现不对啊,我作为一个普通用户登录后,我的实际用户ID和有效用户ID都是我自己的UID。从上面可以看出,显然我不具有修改/etc/shadow文件的权限,那我执行passwd命令时怎么改我的密码的呢?
    在上面1,基本概念中我们知道决定我们权限的是执行操作时的有效用户ID,所有我们在执行passwd命令时,我们的有效用户ID肯定被修改了。OK,我们看下面:
    root@debian:~# ls -l /usr/bin/passwd 
    -rwsr-xr-x 1 root root 43280 Feb 16  2011 /usr/bin/passwd
    我们看到了一个s,对的,它就是我们的保存设置用户ID位,上面我们说过这个位的作用就是修改有效用户ID,那我们来看看他是如何修改执行passwd命令时的有效用户ID的。

    首先我们看下命令执行的过程,当普通用户执行passwd命令时,shell会fork出一个子进程,此时进程有效用户ID还是普通用户ID,然后exec程序执行/usr/bin/passwd。通过上面的表我们会知道,exec发现/usr/bin/passwd有SUID位,于是会把进程的有效用户ID设成设置成文件用户ID,显然就是root,   此时这个进程都获得了root权限, 得到了读写/etc/shadow文件的权限, 从而普通用户可完成密码的修改。exec进程退出后会恢复普通用户的EUID为普通用户ID.这样就不会使普通用户一直拥有root权限。

    这就是我们设置用户ID位的作用,它的存在就是为了普通用户在某些需要特权权限时,去临时的改变有效用户ID而获得特权权限。
    但是你可能有疑问,为什么我们不用setuid()直接修改呢?何苦绕这么大的弯子。但是如果可以使用setuid()来直接修改有效用户ID来获得特权权限,那么我们的特权权限就会不可控了。这违背了最小权限模型。所以我们Linux特意将setuid设置成在非特权用户下面,有效用户ID只能设置成为实际用户ID和保存设置用户ID,而保存设置用户ID又是来自于有效用户ID的复制,而有效用户ID只能是实际用户ID或者文件所有者ID(在你设置了保存设置用户ID情况下才可以)。这样你就没法将有效用户ID设置成随意值,所以对普通用户创建的任何文件如果没有得到超级用户的授权,那么无论他怎么编写代码来设置自己的有效用户ID,或者设置保存用户ID位,由于你这个可执行文件是你自己编写的,所有你的权限更本没有得到实质性的改变。这里也就是说只有root自己创建的文件才具有这样的特权权限。这样是不是很好的保护了操作系统对权限的控制呢?


    4,实例2,保存设置用户ID的作用

    那么保存设置用户ID的作用又是什么呢?既然保存用户ID是有效用户ID的副本,那么肯定是为在某个时刻用于恢复我们的有效用户ID。这样就可能实现我们的用户权限的切换。
    例如:man(这是AUP上面的例子,当然实际linux上好像不是这样实现,不过为了便于说明,还是直接使用了这个例子)

            man程序的实际用户ID是man,有效用户ID也是man
    1、首先我们的进程要执行man命令,
    所以exec发现/usr/bin/man已经设置了用户ID位,于是进程的有效用户ID给改了/usr/bin/man的拥有者改成man了,并且复制了man给保存设置用户ID,然后我们就可以顺利执行man命令了。
    此时我们进程的ID:
    实际用户ID = 我们的用户ID
    有效用户ID = man(为了执行man命令)
      保存的设置用户ID = man(exec设置的)
    man程序访问需要配置文件和手册页,这些文件时名为man的用户所有的,因为有效用户ID是man,所有我们的操作得以顺利的被执行了。
    2,我们的进程要求man执行其他命令(这里不仅我们要执行man命令,我们还会让man代表我们执行一些命令),但是现在我们的有效ID是man,所以需要更改有效ID为我们进程的实际ID,调用setuid(getuid())函数,由于我不是超级用户,所以,
    实际用户ID = 我们的用户ID
    有效用户ID = 我们的用户ID(setuid改的)
    保存的设置用户ID = man
    现在man进程是以我们的用户ID而运行的,这就意味着能访问的只有我们通常可以访问的,而没有额外的权限,

    3,当man完成代替我们执行的命令后,我们当然要回到我们之前有效用户ID,也就是man,此时我们的保存设置用户ID这个副本就开始发挥它的作用了,我们只需要setuid(geteuid());即可,
    通过了这个有效用户ID的副本保存设置用户ID,我们的有效用户ID才能在man->uid->man这样的切换。如果没有保存设置用户ID这个副本,显然,我们是没有办法在man程序代替我们执行完命令之后,在将有效用户ID设置成man的。





    展开全文
  • 文件的设置用户ID位

    2011-10-13 19:55:57
    有段时间一直对这个不太了解,感觉“设置用户ID位“这个词都读得奇怪,现在终于搞清楚了。 设置用户ID位,这个是为了扩充进程的权限所用的,如果一个执行 文件的用户ID位被设置了(通过执行 sudo chmod u+s ...

    有段时间一直对这个不太了解,感觉“设置用户ID位“这个词都读得奇怪,现在终于搞清楚了。

    设置用户ID位,这个是为了扩充进程的权限所用的,如果一个执行 文件的用户ID位被设置了(通过执行 sudo chmod u+s filename),那么在该文件运行的时候。进程的有效用户ID位就会等于文件的所有者,实际用户ID位则等于进程自己的id,而当该进程对资源进行读写使用时,是通过进程的有效用户id(有效组id)来判断的所以就增大了进程的权限。

    展开全文
  • 实际用户ID:所谓实际用户ID,就是系统对你的标识。相当于你第一次登录系统时,系统给了你一个令牌,既然是标识,肯定每个人的令牌是不一样的。系统不认你长什么样,只要看到你的令牌他就知道是你。也就是说,每个人...

    最近在看《UINIX高级环境编程》,被标题所述的几个ID给整蒙圈了,今天查阅了别人的博客,对于这几个ID有了深刻一点的理解。下面我将用通俗易懂的语言来介绍这几个ID,以帮助大家理解。

    • 实际用户ID:所谓实际用户ID,就是系统对你的标识。相当于你第一次登录系统时,系统给了你一个令牌,既然是标识,肯定每个人的令牌是不一样的。系统不认你长什么样,只要看到你的令牌他就知道是你。也就是说,每个人的用户ID是唯一的,假如两个人的令牌一样,那么系统对用户的管理就乱套了。但是,root用户比较特殊,它具有特权,他可以给你换一个令牌(更换用户的ID),也可以把你的令牌没收(注销用户)。每当你进入系统后,你的令牌就是你身份的象征,就代表着你。

    • 有效用户ID:一个用户有着什么样的权限,取决于它手上的令牌。但是,你可以用你的令牌暂时把别人的令牌交换过来,但是交换后,你要把借的还回去,但是你给别人的别人却不还给你。(例如:你可以把root的令牌借过来,这样你的实际的权限就提升了,在借到令牌的期间整个系统唯你是用。)

    • 有效用户ID副本(官方名称:保存设置用户ID):不对等的交换,可能会使得你手上无令牌可用,为了避免这种情况,你在交换令牌前,需要复刻一份自己的令牌。以便再和别人不对等的交换令牌后,你还可以拥有和交换前一样的令牌。

    • 设置用户ID开关(官方名称:设置用户ID位):这个位相当于你是否对外开放,也就是是否愿意把令牌借给别人,你是主动的,别人是被动的。如果你愿意交换,可能就会有人进行不对等的交换。

    展开全文
  • 最近在理解保存设置用户ID时,遇到一些问题,但是发现网上都没能把这个问题说清楚,通过自己的思考和查找资料,终于明白了,现在分享在这里共大家交流学习,如果有不正确的地方,欢迎指正 1,基本概念: 实际...
  • 与一个进程相关的ID:  -实际用户ID与实际用户组ID——登录时参考口令文件(etc/passwd...设置用户ID位的使用: 当执行一个程序文件时,进程的有效用户ID通常是实际用户ID。但当对该文件设置了set-user-ID位(通常也
  • 设置用户ID位和设置组ID位

    千次阅读 2014-03-05 16:22:37
    首先需要说明的是这两个标识都在st_mode中,而文件的模式却在文件的inode中 inode包含了描述一个文件的所有信息,它包括了以下几个内容: 1 文件大小 2文件mode,  文件mode包含了:1/文件对各个用户的访问...
  • 最近在理解保存设置用户ID时,遇到一些问题,但是发现网上都没能把这个问题说清楚,通过自己的思考和查找资料,终于明白了,现在分享在这里共大家交流学习,如果有不正确的地方,欢迎指正 基本概念: 实际用户ID...
  • 概述 进程用户ID的种类 进程的用户ID有3种: ...保存的设置用户ID(SUID) 是EUID的副本,用于恢复EUID 下面详细讲解这3种ID。 实际用户ID(RUID) 实际用户ID说明了我们实际...
  • 前言: 博主在前不久的一个项目中,项目组的组员需要删除由daemon...今天就浅谈一下设置用户id位,为什么对shell脚本无效。   假设我们文件结构如下图所示  Cache文件目录下有3个缓存文件,分别为cache1、cac...
  • 有效用户ID(EUID):用于系统决定用户对系统资源的权限,也就是说当用户做任何一个操作时,最终看它有没有权限,都是在判断有效用户ID是否有权限。如果有,则ok,否则报错不能执行。在正常的情况下,一个用户登录之后...
  • 一、基本概念 实际用户ID(RUID):用于...有效用户ID(EUID):用于系统决定用户对系统资源的权限,也就是说当用户做任何一个操作时,最终看它有没有权限,都是在判断有效用户ID是否有权限。如果有,则ok,否则报错...
  • 《UNIX环境高级编程(第2版)》 4.9节1.chmod自动清除“设置ID位” user3@SuSE11SP2-1:/home/user1/setgid> id uid=1003(user3) gid=1003(group3) groups=1003(group3),16(dialout),33(video) user3@SuSE11...
  • 最近在学习《Unix 高级环境编程》这边书,之前对Unix中的文件访问还有和文件访问相关的设置用户id(set_user_ID)以及设置组id(set-group-ID)一直没有弄清楚,今天跟他人讨论一个问题,终于有些明白了,记录以供...
  • 本文章转载自:... 关于这个知识点,让我一段时间都觉得很难了解!经过了几章的学习,有点慢慢了解这个怎么一回事情。 ...每一个进程其实对应了6个以上的ID,它们分别是 ...保存设置用户ID,保存设置组ID
  • 用stat函数可以获取一个文件的状态信息,原型是这样的: int stat(const char *path, struct stat *buf);  其中结构体stat的结构: struct stat { ... /* ID of device containing file */ ...
  • 最近看apue,简单记录对设置用户id理解(设置组id同理)。 1. 相关的id好像很多,共有哪些? 文件2个id 2个位: 拥有者id 拥有者组id 设置用户id位 设置组...
  • 有效用户ID:通常情况下和实际用户ID一致,它限定了用户对资源的访问权限,在某个文件设置了设置用户ID位后,有效用户ID为文件所有者ID;设置用户ID:用于提升其它用户对资源的访问权限。 当有了设置用户ID位之后,...
  • 实际用户ID(RUID):用于标识一个系统中用户是谁,一般是在登录...设置用户ID位:用于对外的权限的开发,它的作用是我们如何去修改有效用户ID 例如: [root@slave102 bin]# ls -l /usr/bin/passwd -rwsr-xr-x 1 root ro

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 890
精华内容 356
关键字:

设置用户id位