文件存取权限与设置set_uid位

首先,声明几个概念:

实际用户表示符(UID):该标识号负责标识运行进程的用户

有效用户表述符(EUID):该标识号负责标识以什么用户身份来给新创建的进程赋所有权、检查文件的存取权限和检查通过系统调用kill向进程                                       发送软中断信号的许可权限

实际用户组表示符(GID):负责标识运行进程的用户所属的组ID

有效用户组表述符(EGID):用来标识目前进程所属的用户组

 

很容易知道getuid()函数用于获取实际用户ID,geteuid()函数用于获取有效用户ID。下面通过一个例子来说明操作系统是通过哪种标志判断当前用户对文件的存取权限的。

 

 

 

root@heqiang-desktop:/home/heqiang/document/myc/linuxC# ls -l test.c

-rw-r--r-- 1 root root 0 2010-08-19 12:09 test.c

由列出的test.c文件信息可知,该文件只对root用户具有读写权限。
以root身份编译并执行该程序
root@heqiang-desktop:/home/heqiang/document/myc/linuxC# ./studyuid 
uid study:
Process's uid =0,euid=0
open successfully!
若切换到普通用户执行该程序
heqiang@heqiang-desktop:~/document/myc/linuxC$ ./studyuid 
uid study:
Process's uid =1000,euid=1000
Open failure,errno is 13: Permission denied
提示权限不够错误。
让我们对可执行程序./studyuid设置set_uid位看看(需切换到root用户)
root@heqiang-desktop:/home/heqiang/document/myc/linuxC# chmod 4755 studyuid
开始时,某个程序需要 root 权限完成一些工作,但后续的工作不需要 root 权限。可以将该可执行程序文件设置 set_uid 位,并使得该文件的属主为 root。这样,普通用户执行这个程序时,进程就具有了 root 权限。
之后,在切换到普通用户执行该程序
heqiang@heqiang-desktop:~/document/myc/linuxC$ ./studyuid 
uid study:
Process's uid =1000,euid=0
open successfully!
对比失败的那一次和成功的一次,我们发现,实际用户id没有变,而有效用户id变了,也就是说通过设置set_uid位,使得原本只有root用户可以执行的文件,普通用户执行时也同样具有了root权限。
因此,可以得出,内核对进程存取文件的许可权的检查,是通过考查进程的有效用户ID来实现的。
/*借鉴网络诸多内容*/

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值