免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1863 | 回复: 8
打印 上一主题 下一主题

uid 和euid 的困惑,精华里没有有关的帖子。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-14 10:47 |只看该作者 |倒序浏览
1、#who 显示uid。
2、#/usr/ucb/whoami  显示euid。
但不知其工作原理及作用。
RBAC的/etc/security/exec.attr的数据库中的security attributes,如uid,euid,gid和egid,是如何工作的?例如:
Shut:suser:cmd:::/usr/sbin/shutdown:uid=0

论坛徽章:
0
2 [报告]
发表于 2005-12-14 13:37 |只看该作者
请帮忙置顶,确实很着急,摆脱啦!

论坛徽章:
0
3 [报告]
发表于 2005-12-14 14:19 |只看该作者
这个涉及到进程的概念。系统调用getuid可以得到进程的所有者id(uid)。有时因为进程的权限,进程无法使用一些资源,为了获取这些资源,进程还有一个有效用户id(euid)。这个id和系统的资源使用有关,通过系统调用geteuid可以得到进程的euid。和用户id相对应,进程还有一个组id(gid)和有效组id(egid),系统调用getgid和getegid可以分别得到gid和egid。

参考:
http://www.oldlinux.org/cgi-bin/ ... pic=37&postno=4
man -k uid euid gid egid

论坛徽章:
0
4 [报告]
发表于 2005-12-14 14:38 |只看该作者
非常感谢你,yuzlei。

论坛徽章:
0
5 [报告]
发表于 2005-12-14 14:40 |只看该作者
uid 是你登陆的用户名的id,如user1
euid 是你当前窗口用户的id,如你使用了su命令,换成别的用户user2。那你在这个窗口上看到的uid就是你登陆的user1的id,euid就是你su的user2的id。分别可以通过#whoami   & #who am i 来查看euid & uid

论坛徽章:
0
6 [报告]
发表于 2005-12-14 17:14 |只看该作者
原帖由 yuzlei 于 2005-12-14 14:19 发表
这个涉及到进程的概念。系统调用getuid可以得到进程的所有者id(uid)。有时因为进程的权限,进程无法使用一些资源,为了获取这些资源,进程还有一个有效用户id(euid)。这个id和系统的资源使用有关,通过系统调 ...

你说的是SUID吧

论坛徽章:
0
7 [报告]
发表于 2005-12-14 17:19 |只看该作者
原帖由 有间茅屋 于 2005-12-14 14:40 发表
uid 是你登陆的用户名的id,如user1
euid 是你当前窗口用户的id,如你使用了su命令,换成别的用户user2。那你在这个窗口上看到的uid就是你登陆的user1的id,euid就是你su的user2的id。分别可以通过#whoami   &am ...


试了一下, 好象是的。

论坛徽章:
0
8 [报告]
发表于 2005-12-15 10:42 |只看该作者
根据我的理解,做了下面的实验:
在数据库/etc/security/exec_attr中插入:
shut:suser:cmd:::/usr/sbin/shutdown:uid=0
在数据库/etc/security/prof_attr中:
shut:::It is for a account to shutdown the system:
在数据库/etc/user_attr中:
shut_role::::type=role;profiles=shut
执行useradd 命令:
#useradd  –m –d /export/home/usera –s /bin/ksh –R shut_role usera
以usera的身份登录。
#su sole_shut
#/usr/sbin/shutdown
根据http://www.oldlinux.org/cgi-bin/ ... pic=37&postno=4
这时进程的uid=0,euid=0,suid=0 因为euid=0,所以该进程具有root的权限,所以命令可以执行,实验结果确实如此。
但是把数据库/etc/security/exec_attr的内容修改为:
shut:suser:cmd:::/usr/sbin/shutdown:euid=0
再次执行/usr/sbin/shutdown命令,进程的uid=100(usera的uid),euid=0,suid=0,因为进程的权限由euid确定,所以命令应该能执行,但结果相反,不能运行shutdown命令。
不知我上面的分析是否有道理,请您指教,谢谢!

论坛徽章:
0
9 [报告]
发表于 2005-12-15 21:04 |只看该作者
后一种情况,假如shutdown的源码里有这样一句呢

if (getuid() != 0)
{
    ......
    exit(1);
}

其实,/usr/sbin/shutdown是一个shell脚本,如果uid不为0,它就exit了。

一般一个set-user-id进程在需要操作受限制资源的时候通过使用setuid/seteuid来提升权限,操作完成后应放弃权限,进程的权限不是一成不变的。

[ 本帖最后由 yuzlei 于 2005-12-15 21:08 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP