曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 15069|回复: 0
打印 上一主题 下一主题

[进程] getuid() 与 geteuid() -- 获得 UID 以及 有效 UID 值

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2009-6-18 13:15:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
函数声明:
#include <unistd.h>
#include <sys/types.h>

uid_t getuid(void);
uid_t geteuid(void);

说明:
两个函数分别获得用户 UID 值( getuid() ) 与 用户有效 UID 值 ( geteuid() )。

测试程序
(用 root 用户创建编译并创建可执行文件):
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>

int main()
{
    int fd;
    printf("uid study: \n");
    printf("Process's uid = %d, euid = %d ", getuid(), geteuid());
   
    if( (fd = open("test.txt", O_RDWR)) == -1 ) {
        printf("Open failure, errno is %d :%s \n", errno,strerror(errno));
        exit(1);
    } else {
        printf("Open successfully!\n");
    }

    close(fd);
    exit(0);
}
在没有 test.txt 文件情况下的默认输出
uid study:
Process's uid = 0, euid = 0 Open failure, errno is 2 :No such file or directory
 
说明-1
errno 在 errno.h 中有定义:
extern int errno;
strerror() 函数返回一个对错误号进行相应描述的字符串。
由于 text.txt 文件不存在,所以造成打开失败。

下面,用 root 用户在 uid.exe 文件所在目录下建立 test.txt 文件,然后运行程序
linux-beyes:/home/beyes/C # touch test.txt
linux-beyes:/home/beyes/C # ./uid.exe
uid study:
Process's uid = 0, euid = 0 Open successfully!
 
root 用户自然可以成功打开此文件。切换到普通用户下执行这个程序
beyes@linux-beyes:~/C> ./uid.exe
uid study:
Process's uid = 1000, euid = 1000 Open failure, errno is 13 :Permission denied
提示,普通用户没有权限执行这个程序。

下面,用 chmod 命令来对 uid.exe 设置 set_uid(suid) 位,然后再执行这个程序
linux-beyes:/home/beyes/C # chmod 4755 uid.exe
linux-beyes:/home/beyes/C # ll uid.exe
-rwsr-xr-x 1 root root 11582 06-18 13:02 uid.exe
linux-beyes:/home/beyes/C # exit      //切换到普通用户
exit
beyes@linux-beyes:~/C> ./uid.exe
uid study:
Process's uid = 1000, euid = 0 Open successfully!
现在,文件可以成功打开了!关于文件有效位以及组等有效位的详其他相关介绍:
http://www.groad.net/bbs/read.php?tid=367
http://www.groad.net/bbs/read.php?tid=749

从上面的运行结果说明: 内核对进程存取文件的许可权的检查,是通过考察进程的有效用户 ID 来实现的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-4 01:05 , Processed in 0.080712 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表