Linux下用户信息

-用户信息-

**
除了著名的init程序以外,所有的Linux程序都是由其他程序或用户启动的。用户通常是在一个响应他们命令的shell(命令解析器)中启动程序。程序能够通过检查环境变量和读取系统时钟来在很大程度上了解它所处的运行环境。程序也能够发现它的使用者的相关信息。
当一个用户要登录进Linux系统时,他有一个用户名和密码。一旦验证通过,用户就可以进入一个shell。从内部机制来说,用户还有一个唯一的用户标识符UID。Linux运行的每个程序实际上都是以某个用户的名义在运行,因此都有一个关联的UID。
UID有它自己的类型————uid_t,它定义在头文件sys/tpes.h中。它通常是一个小整数。有些UID是系统预定义的,其他的则是系统管理员在添加用户时创建的。一般情况下,用户的UID都大于100。

#include<sys/types.h>
#include<unistd.h>

uid_t getuid(void);
char *getlogin(void);

**
getuid函数返回程序关联的UID,它通常是启动程序的用户的UID。
getlogin函数返回与当前用户关联的登录名。
系统文件/etc/passwd包含一个用户账号数据库。它由行组成,每行对应一个用户,包括用户名、加密口令、用户标识符(UID)、组标识符(GID)、全名、家目录和默认shell。
如果编写一个程序,他能确定启动它的的用户的UID,那么就可以对它进行扩展、让它查找密码文件以找到用户的登录名和全名。但并不推荐这种方法,因为为了提高系统的安全性,现代的UNIX系统都不再使用简单的密码文件了。许多系统,包括Linux,都有一个使用shadow密码文件的选项,原来的密码文件中不再包含任何有用的加密口令信息(这些信息通常存放在/etc/shadow文件中,这是一个普通用户不能读取的文件),为此,人们定义了一组函数来提供一个标准而又有效的获取用户信息的编程接口:

#include<sys/types.h>
#include<pwd.h>

struct passwd *getpwuid(uid_t uid);
struct passwd *getpwnam(const char *name);
密码数据库结构passwd定义在头文件pwd.h中,它包含如下的成员:

char *pw_name ———— 用户登录名
uid_t pw_uid ———— UID号
gid_t pw_gid ———— GID号
char *pw_dir ———— 用户家目录
char *pw_gecos ———— 用户全名
char *pw_shell ———— 用户默认shell
getpwuid和getpwnam函数都返回一个指针,该指针指向与某个用户对应的passwd结构。这个用户通过getpwuid的UID参数或通过getpenam的用户登录名参数来确定。出错时,它们都返回一个空指针并设置errno。

猜你喜欢

转载自blog.csdn.net/judgejames/article/details/82706708