linux用户标识UID与有效用户标识EUID

转载 2011年01月18日 21:44:00

linux系统中每个进程都有2个ID,分别为用户ID和有效用户ID,UID一般表示进程的创建者(属于哪个用户创建),而EUID表示进程对于文件和资源的访问权限(具备等同于哪个用户的权限)。可以通过函数getuid()和geteuid()或者进程的两个ID值。
 
当一个用户登陆系统时,系统会将UID和EUID都赋值为/etc/passwd文件中的UID,一般情况下2个ID是相同的,但是某些情况下会出现2个ID不同的情况。
 
以下通过一个典型问题和代码实例来说明UID和EUID的问题。
 
【关于linux的passwd命令】
 passwd命令是用来修改用户登陆密码的,用来记录用户登陆密码的文件为/etc/shadow,该文件只有root用户具有访问权限,如下所示:
gaolu@gaolu-desktop:~$
gaolu@gaolu-desktop:~$ cd /etc
gaolu@gaolu-desktop:/etc$ ls -l shadow
-rw-r----- 1 root shadow 978 2009-02-22 21:25 shadow
gaolu@gaolu-desktop:/etc$
这是出现了矛盾:出于安全考虑,不允许普通用户查看并修改shadow文件;但是如果这样普通用户就无法为自己修改密码。
Linux系统就是使用setuid来解决这个矛盾的问题:如果一个程序被设置了setuid位,那么它无论被哪个用户启用,都会具备程序所有者的权限。而passwd程序的所有者是root用户,passwd的权限如下所示,那么任何用户执行该程序,程序的EUID就会变成root用户的EUID,而不是执行该程序的UID。
gaolu@gaolu-desktop:/etc$ cd /usr/bin
gaolu@gaolu-desktop:/usr/bin$ ls -l passwd
-rwsr-xr-x 1 root root 32988 2008-06-10 02:10 passwd
gaolu@gaolu-desktop:/usr/bin$
gaolu@gaolu-desktop:/usr/bin$
因此,普通用户可以通过passwd程序修改shadow文件内容,完成密码修改。
 
【让代码说明问题】
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
 
int main(void)
{
printf("Current process UID: %ld/n",(long)getuid());
printf("Current process EUID: %ld/n",(long)geteuid()); 
return 1;
}
 
执行情况:
gaolu@gaolu-desktop:~$ gcc -o uid uid.c
gaolu@gaolu-desktop:~$
gaolu@gaolu-desktop:~$ chmod u+s uid   //用户主增加权限setuid
gaolu@gaolu-desktop:~$ ls -l uid
-rwsr-xr-x 1 gaolu gaolu 9118 2009-03-08 22:26 uid
gaolu@gaolu-desktop:~$
gaolu@gaolu-desktop:~$ ./uid
Current process UID: 1000
Current process EUID: 1000
gaolu@gaolu-desktop:~$
gaolu@gaolu-desktop:~$ su   //切换到root用户
Password:
root@gaolu-desktop:/home/gaolu# ls -l uid
-rwsr-xr-x 1 gaolu gaolu 9118 2009-03-08 22:26 uid
root@gaolu-desktop:/home/gaolu# ./uid
Current process UID: 0
Current process EUID: 1000   //有效用户ID为1000
root@gaolu-desktop:/home/gaolu#
root@gaolu-desktop:/home/gaolu#
 

本文出自 “淡泊明志,宁静致远” 博客,请务必保留此出处http://keren.blog.51cto.com/720558/144908

linux用户标识UID与有效用户标识EUID

linux系统中每个进程都有2个ID,分别为用户ID和有效用户ID,UID一般表示进程的创建者(属于哪个用户创建),而EUID表示进程对于文件和资源的访问权限(具备等同于哪个用户的权限)。可以通过函数...
  • mldxs
  • mldxs
  • 2013年11月12日 22:28
  • 577

Linux内核学习笔记: uid之ruid,euid,suid

看UNIX相关的书时经常能遇到这几个概念,但一直没有好好去理清这几个概念,以致对这几个概念一直一知半解。今天好好区分了一下这几个概念并总结如下。说白了这几个UID引出都是为了系统的权限管理。 下面分别...
  • carltraveler
  • carltraveler
  • 2017年02月06日 13:52
  • 273

获取用户唯一标识的替代方案

英文原文:In iOS 7 and later, if you ask for the MAC address of an iOS device, the system returns the val...
  • u012511584
  • u012511584
  • 2014年11月12日 11:03
  • 2305

用户身份标识

在移动通信系统中,唯一标识用户身份的标识是IMSI,该标识全球唯一,但是出于安全的考虑,移动通信系统都会尽可能少的在空口上传输该标识,而是采用TMSI来临时的标识用户。同样是临时标识,但是在2G、3G...
  • fanxiaoyu321
  • fanxiaoyu321
  • 2017年06月07日 21:26
  • 252

unix实际用户ID和有效用户ID解析

由于用户在UNIX下经常会遇到SUID、SGID的概念,而且SUID和SGID涉及到系统安全,所以用户也比较关心这个问题。关于SUID、 SGID的问题也经常有人提问,但回答的人一般答得不够详细,加上...
  • xhjcehust
  • xhjcehust
  • 2014年10月16日 15:02
  • 802

Linux进程的uid和euid

对可执行文件设置 setuid 权限时,将对运行该文件的进程授予基于文件属主的访问权限。该访问权限不是基于正在运行可执行文件的用户。使用此特殊权限,用户可以访问通常只有属主才可访问的文件和目录。  ...
  • MACMACip
  • MACMACip
  • 2017年05月15日 16:02
  • 1490

ubutu发现用户UID为0的用户

今天,在进行服务器查看的时候,看到/etc/passwd 下有个用户为userftp 其UID为0  说明他的用户级别和root是一样的 这明显有问题 然后进行了编辑/etc/passwd文件 V...
  • u012451979
  • u012451979
  • 2013年12月03日 17:24
  • 2368

java或者jsp中修复会话标识未更新漏洞

appscan扫描出来的。 1. 漏洞产生的原因: AppScan会扫描“登录行为”前后的Cookie,其中会对其中的JSESSIONOID(或者别的cookie id依应用而定)进行记录。在登录...
  • yangzongzhuan
  • yangzongzhuan
  • 2016年01月12日 11:21
  • 863

iis7为应用程序池指定标识(执行帐号)

打开 IIS 管理器。 有关如何打开 IIS 管理器的信息,请参阅 打开 IIS 管理器 (IIS 7)。 在“连接”窗格中,展开服务器节点,然后单击“应用程序池”。 在“应用程序池”页中,选...
  • u011127019
  • u011127019
  • 2013年12月12日 15:56
  • 1164

Linux 用户管理中UID和GID的研究

linux系统中的用户权限是作用于文件和目录上的,文件的权限涉及三类用户: 1、文件所有者,也称为用户(owner); 2、指派给文件的组(group); 3、在系统上拥有合法的注册但既不是所有...
  • launch_225
  • launch_225
  • 2013年07月01日 08:58
  • 6390
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux用户标识UID与有效用户标识EUID
举报原因:
原因补充:

(最多只允许输入30个字)