Linux中的UID,EUID,SUID
来源:互联网 发布:模具erp软件 编辑:程序博客网 时间:2024/04/30 14:40
在做Android系统源码的时候,里面的权限管理,经常涉及到这些,可以说是Android权限机制的基础,但是理解的不透彻。先看看Linux中这几个概念,暂不关注Android中这些ID的利用。
下面分别用RUID, EUID,SUID来表示实际用户ID,有效用户ID,设置用户ID。另外用户ID是个整型数,为了说明方便真接使用了用户名来代表不同的UID。先解释一下这几个ID的作用:
RUID, 即UID,用于在系统中标识一个用户是谁,当用户使用用户名和密码成功登录后一个Linux系统后就唯一确定了他的RUID。
EUID, 用于系统决定用户对系统资源的访问权限,通常情况下等于RUID。
SUID,用于对外权限的开放。跟RUID及EUID是用一个用户绑定不同,它是跟文件而不是跟用户绑定。
我们知道linux系统的密码都存在了/etc/shadow这个文件里。查看/etc/shadow文件的属性如下:
steve@ubuntu:~$ ll /etc/shadow-rw-r----- 1 root shadow 1035 Mar 30 08:19 /etc/shadow
从上可以看出/etc/shadow文件是一个属于root用户及shadow 组的文件,并且只有EUID为root的用户具有读写的权限,shadow 组的具有读权限。
当你在steve用户(EUID此时也为steve)的shell下试图用vim打开这个文件时会提示权限不允许。
用过UNIX系统的人都知道,任何一个用户都可以使用passwd这个命令来得新设定自己的密码。但从上面已经知道,非root用户是无法读这个文件的,那么普通用户是如何做到修改这个文件的呢?我们知道passwd这个命令实际执行的程序是/usr/bin/passwd, 查看这个文件属性如下:
-rwsr-xr-x 1 root root 41284 Apr 8 2012 /usr/bin/passwd*
对应文件存取标志的s位就是通常说的SUID位,另外可以看到所有用户都有执行的这个程序权力。当steve用户执行passwd命令的时候。Shell会fork出一个子进程,此时进程的EUID还是steve,然后exec程序/usr/bin/passwd。exec会根据/usr/bin/passwd的SUID位会把进程的EUID设成root, 此时这个进程都获得了root权限, 得到了读写/etc/shadow文件的权限, 从而steve用户可完成密码的修改。 exec退出后会恢复steve用户的EUID为steve,这样就不会使steve用户一直拥有root权限。暂时的进行了权限的提升。
我们可以测试一下,用root用户把/usr/bin/passwd的SUID位去掉,如下:
steve@ubuntu:~$ sudo chmod u-s /usr/bin/passwd steve@ubuntu:~$ ll /usr/bin/passwd-rwxr-xr-x 1 root root 41284 Apr 8 2012 /usr/bin/passwd*
然后steve用户用命令passwd去更新密码会提示如下错误:
steve@ubuntu:~$ passwdChanging password for steve.(current) UNIX password: Enter new UNIX password: Retype new UNIX password: passwd: **Authentication token manipulation error**passwd: password unchanged
这就是因为/usr/bin/passwd程序的SUID去掉后,steve用户虽然可以执行该程序,但因为/usr/bin/passwd/的SUID没有设置,这样exec后进程的EUID仍为steve的原因。
另外也许有人会发现普通的文件文件普通的文本文件会也可以设置SUID位, 但这是没有意义的,因为文本文件没有地方执行seteuid()的系统调用来改变当用用户的EUID。
最后,这里的对用户ID的规则同样也适用了组ID。
- Linux中的UID,EUID,SUID
- UID, EUID, SUID, FSUID
- UID, EUID, SUID, FSUID
- UID, EUID, SUID
- UID, EUID, SUID, FSUID
- uid euid suid 相关函数
- UNIX(2) euid, suid, uid
- linux内核学习笔记: uid之ruid,euid,suid
- linux UID,GID,EUID,EGID,SUID,SGID快速理解
- Linux内核学习笔记: uid之ruid,euid,suid
- Linux内核学习笔记: uid之ruid,euid,suid
- Linux RUID EUID SUID
- RUID, EUID, SUID in linux
- Linux权限管理(suid euid)
- Linux ruid、euid和suid区别
- Linux进程的uid和euid
- Linux进程的uid和euid
- Linux进程的uid和euid
- XHTML表单学习总结
- android:assets下的文件复制到SD卡
- 学习 单链表 总结二
- Android开发之路之准备
- javascript数组的其他方法
- Linux中的UID,EUID,SUID
- 如何使用C#调用雅虎REST服务
- [HDU 1166]敌兵布阵[树状数组][入门]
- JDBC
- poj1279Art Gallery【半平面交求内核面积】
- 系统调用跟我学之wait, waitpid函数
- hdu 1728 BFS 逃离迷宫 值得注意
- android: java.io.IOException:open failed: ENOENT (No such file or directory)
- 安卓环境搭建须知