getuid(),geteuid()
来源:互联网 发布:ubuntu ifconfig 安装 编辑:程序博客网 时间:2024/05/22 17:22
getuid() 与 geteuid() -- 获得 UID 以及 有效 UID 值
2012-01-09 23:53 3414人阅读 评论(0) 收藏 举报
file测试
函数声明:
说明:
两个函数分别获得用户 UID 值( getuid() ) 与 用户有效 UID 值 ( geteuid() )。
测试程序(用 root 用户创建编译并创建可执行文件):
在没有 test.txt 文件情况下的默认输出:
说明-1:
errno 在 errno.h 中有定义:
extern int errno;
strerror() 函数返回一个对错误号进行相应描述的字符串。
由于 text.txt 文件不存在,所以造成打开失败。
下面,用 root 用户在 uid.exe 文件所在目录下建立 test.txt 文件,然后运行程序:
root 用户自然可以成功打开此文件。切换到普通用户下执行这个程序:
提示,普通用户没有权限执行这个程序。
下面,用 chmod 命令来对 uid.exe 设置 set_uid(suid) 位,然后再执行这个程序:
现在,文件可以成功打开了!关于文件有效位以及组等有效位的详其他相关介绍:
http://www.groad.net/bbs/read.php?tid=367
http://www.groad.net/bbs/read.php?tid=749
从上面的运行结果说明: 内核对进程存取文件的许可权的检查,是通过考察进程的有效用户 ID 来实现的。
#include <unistd.h>
#include <sys/types.h>
uid_t getuid(void);
uid_t geteuid(void);在linux中每个进程有三个[实际上有第4个]用户标识符.
real uid : 真实用户ID.
saved uid : 已保存用户ID
effective uid : 有效用户ID
真实用户ID(real uid)是login时的用户.而在运行过程中,
用于所有的安全检查的是有效用户ID(effective uid).
说明:
两个函数分别获得用户 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 0
- getuid(),geteuid()
- getuid() , geteuid()
- getuid与geteuid
- geteuid()和getuid()的区别
- setUID,setGID,getuid,geteuid函数
- geteuid()和getuid()的区别
- 从getuid()&+geteuid()谈文件特殊权限
- geteuid()和getuid()的区别
- geteuid()和getuid()的区别
- getuid() 与 geteuid() -- 获得 UID 以及 有效 UID 值
- geteuid
- getuid
- getgid getuid
- getuid,setuid函数
- getuid,setuid函数
- getuid,setuid函数
- 【库函数】linux之getuid和getpwuid函数
- ( standard c libraries translation )getuid
- Linux 进程与进程调度详解
- 百度面试杂感
- leetcode283
- [转载]org.apache.log4j.Logger详解
- Nim 中的参数传递
- getuid(),geteuid()
- Unity的旋转问题
- IOS9 适配注意事项
- HDU 1011 Starship Troopers(树形背包)
- 文章标题
- Java输入输出流
- 树形管理工具-美美哒
- firebug重新载入页面获取源码
- Dialogfragment的使用