一、前言
在开发linux应用的时候,我们经常会遇到getuid这个api,经常基于uid作为判断条件。uid其实是unix-like系统中的用户标识,本文就来介绍何为用户标识,包含如下内容:
1.什么是多用户系统?
2.什么是uid?
二、什么是多用户系统?
多用户系统指的是一台计算机能够同时登陆多个用户(账号),并且每个用户能够同时使用计算机。多用户系统使用的是分时技术,将计算机的处理资源分成多个时间片,让每个用户分时去使用,这样在使用者的感受中就是多个用户同时在使用计算机。
一个典型的应用场景就是服务器。服务器本质上也是一台计算机,一般的科技公司都会配备一定数量的服务器,然后为每一个开发人员创建一个账号,大家都同时使用一台服务器进行工作。
多用户系统允许多个用户共享主机的硬件和软件资源,如CPU、内存、磁盘空间、软件程序等,从而提高了资源的利用率。
系统管理员可以创建、管理多个用户账号,并为每个用户分配不同的权限和资源使用范围。用户登录系统后,根据自己的权限进行操作。
Windows 7及之后的版本、Linux、UNIX等都是典型的多用户操作系统。它们支持多个用户同时登录和使用系统资源。
三、什么是uid?
上面介绍了什么是多用户系统,每个用户在登陆计算机的时候都要输入账号和密码,这里说的账号其实就是所谓的用户标识。unix-like系统一般都有一个口令文件/etc/passwd,该文件的内容如下所示:
(3-1)
拿其中的一行来介绍:
root:x:0:0:root:/root:/bin/bash
用冒号分隔各个部分的内容,上面代码的定义如下:
用户名(root):加密口令(x):数字用户ID(0):数字组ID(0):注释字段(root):起始目录(/root):shell程序(/bin/bash)
UID说的就是数字ID,用来和用户名一一对应,因为计算机处理数字并处理字符串要方便。
系统还能根据用户ID来检验用户是否有执行某些操作的权限。
root用户是超级用户,一个系统只有一个超级用户,系统的某些功能只对超级用户释放,超级用户对系统有最高的权限。
四、组ID
一个公司人多了为了方便管理就会分为一个个小组,当计算机用户多了,为了方便管理,也会将相关联的用户分到一个组里,每个组也都有一个数字ID,这就是组ID(gid)。
同样,也有一个口令文件用来记录组信息:/etc/group
同组的用户可以共享资源。
五、相关api
getuid(): 用来获取当前进程的用户ID
getgid():用来获取当前进程的组ID
参考代码如下:
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char* argv[])
{
printf("%s: uid: %d,pid: %d\n",argv[0],getuid(),getgid());
exit(0);
}
运行结果如下图所示:
(5-1)
同时查看口令文件/etc/passwd,之前当前程序的用户信息如下:
bb-yy:x:1000:1000:bb-yy,,,:/home/bb-yy:/bin/bash
done
参考资料:
《UNIX环境高级编程(第3版) (史蒂文斯 (W.Richard Stevens) 拉戈 (Stephen A.Rago))
(Z-Library)》