Uid euid gid egid关系

时间:2010-03-22

  作者:陶宁,华清远见嵌入式学院上海中心讲师。

  每个用户有一个uid和gid, 这个记录在/etc/passwd, /etc/group里面,每个文件有一个uid, 就是拥有这个文件的用户的uid。每个用户运行一个程序时是以自己的uid作为身份的,如果这个程序被设置了stick位,则这个程序以程序拥有者的uid作为身份,程序运行时的这个身份(uid)就是euid, 表示这个程序以那个用户的身份运行(这样就拥有那个用户的权限,比如读取属于他的文件)。所以程序运行时的身份euid一般情况下都是运行这个程序的人的uid,有时会是这个程序拥有者的uid。

  以passwd程序为例,这个程序要写/etc/passwd, /etc/shadow,一般用户对这些文件是没有写权限的,用户A运行了passwd,这个passwd进程的euid就是uidA,当要写这两个文件时,passwd调用了setuid(seteuid?),这样这个passwd进程的euid就是uidRoot了,passwd就可以写那两个文件了,写完之后euid再切换成uidA.这个过程就实现了对/etc/passwd, /etc/shadow的受控访问:普通用户只允许按照passwd程序定义好的方式修改这两个文件。

  下面来看下这两个文件:

  (1)/etc/passwd

  功能:存放系统的用户帐号信息

  内容:用户名 密码 UID GID 所属组用户主目录 SHELL

  实例: u1 : x : 0 : 0 : u1     /home/u1 :/bin/bash

  注:如果采用了shadow,此处存放口令的为屏蔽字符,真正密码保存在/etc/shadow中 。

  如果不采用shadow,采用明文件显示,如果采用md5加密的话所存放的为密文。

  (2)/etc/shadow

  功能:存放用户口令(加密过的口令)

  实例: u1 : bq$# : 10750: 0: 999 :7 : -1 :-1 : 12546

  说明: u1 用户名

  b1$# 加密的口令

  10750 从1970.1.1开始计算,该口令修改后已过去了多少天

  0   需要再过多少天这个口令可以被修改

  9999 密码的有效期

  7 口令失效多少天前发出警告

  -1 口令失效多少天之后禁用这个账户

  -1 口令从1970.1.1计算,该口令已经禁用了多少天

  12546 保留

  linux系统中每个进程都有2个ID,分别为用户ID和有效用户ID,UID一般表示进程的创建者(属于哪个用户创建),而EUID表示进程 对于文件和资源的访问权限(具备等同于哪个用户的权限)。可以通过函数getuid()和geteuid()或者进程的两个ID值。

  当一个用户登陆系统时,系统会将UID和EUID都赋值为/etc/passwd文件中的UID,一般情况下2个ID是相同的,但是某些情况下会出现2个ID不同的情况

  下面举一个例子:


  结果:


  “本文由华清远见https://www.embedu.org/index.htm提供”


  
上一篇:Linux进程调度时机
下一篇:Linux下信号灯的使用

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料