Linux下判断程序是否高级权限运行

在Linux下,某些涉及到底层或系统级操作的程序,如tcpdump、wireshark等,我们不得不以root(高级用户)权限运行方能正常工作。

在设计诸如此类的程序时,能否在程序内部判断程序自身是否以root(高级用户)权限运行,以便于提示用户切换到高级权限下运行呢?答案是肯定的。

Linux下的程序运行时,是有用户概念的,在不同的用户环境下运行同一个程序,程序对应的运行信息内有用户ID这一项。

凡是root用户,调用进程的实际用户ID跟有效用户ID都为0,而如果是非root用户,则实际用户ID或有效用户ID都是从1000开始的某个值,作为除了root用户外,系统第一个创建的用户,其ID是1000,随后创建的用户,其ID依次累加。

所以,我们可以通过获取调用进程的实际用户ID或者有效用户ID来判断该进程是否以root(高级用户)权限运行。

在Linux下,我们使用getuid来获取调用进程的实际用户ID,用geteuid来获取调用进程的有效用户ID。

有效用户ID(EUID)是你最初执行程序时所用的ID,表示该ID是程序的所有者;实际用户ID(UID)是程序执行过程中采用的ID,该ID表明当前运行位置程序的执行者。

如果要判断程序是否root权限运行,当然要获取程序最初启动时候的用的ID,即有效用户ID(EUID),所以调用geteuid:

if (geteuid() != 0) {
     fprintf(stderr, "This program must run as root\n");
     exit(1);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值