getuid() 与 geteuid() -- 获得 UID 以及 有效 UID 值

函数声明:
#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 来实现的。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值