用户信息 /etc/passwd,getuid(),getpwuid()
< 上一篇
|
下一篇 >
来源: ChinaUnix博客 作者: 发布时间:2007-01-01 17:03:00
Unix系统的基本用户数据库是文本文档,/etc/passwd (叫
口令文档
),他列出任何有效用户名及其相关信息。文档的每个用户一行,分为用:分隔的7个域:
用户名
加密格式的口令
数字的user id
数字的group id
全名或帐户的其他说明
家目录
登录shell(登录时运行的程式)
除了著名的init 程式以外,任何的Linux程式都是由其他程式或用户启动的。我们将在第11章对运行中的程式或进程的交互进行更深入的学习。用户通常是在一个响应他们命令的shell中启动程式。我们已看到,程式能够通过检查环境变量和读取系统时钟来在很大程度上了解他所处的运行环境。程式也能够发现他的使用者的相关信息。
当一个用户要登录Linux系统时,他或她有一个用户名和密码。一旦用户名和密码通过验证,用户就能够进入一个shell。从内部原理来说,用户更有一个唯一的用户标识符UID。Linux运行的每个程式实际上都是被某个用户运行的,因此都有一个关联的UID。
您能够对程式进行配置,让他们的运行看上去似乎是由另一个用户启动的。当一个程式的SUID权限被置位时,他的运行就似乎是由该可执行文档的属主启动的。当su命令被执行时,程式的运行就似乎他是由终极用户启动的,他随后验证用户的访问权限,将UID改为目标账户的UID值并执行该账户的登录shell。采用这种方式还能够允许一个程式的运行就似乎是由另一个用户启动的,他经常被系统管理员使用来执行一些维护任务。
既然UID是用户身份的关键,我们就从他开始吧。
UID有他自己的类型??uid_t,他定义在头文档sys/types.h中。他通常是个小整数。有些UID是系统预定义的;其他的则是系统管理员在添加新用户时创建的。一般情况下,用户的UID值都大于100。
getuid函数返回程式关联的UID,他通常是启动程式的用户的UID。
getlogin函数返回和当前用户关联的登录名。
系统文档/etc/passwd包含一个用户账户数据库。他由行组成,每行对应一个用户,包括用户名、加密口令、用户标识符(UID)、组标识符(GID)、全名、主目录和默认shell。下面是个示例行:
neil:zBqxfqedfpk:500:100:Neil Matthew:/home/neil:/bin/bash
假如编写一个程式,他能确定启动他的用户的UID,我们就能够再对他进行扩展,让他查找密码文档以找到用户的登录名和全名。但我们并不推荐这种做法,因为为了改善系统的安全性,现代的类UNIX系统都不再使用简单的密码文档了。许多系统,包括Linux,都有一个使用“shadow密码”文档的选项,原来的密码文档中不再包含任何有用的加密口令信息(这些信息通常存放在/etc/shadow文档中,这是个普通用户不能读取的文档)。因此,人们定义了一组函数以提供一个标准而又有效地获取用户信息的编程接口。
密码数据库结构passwd定义在头文档pwd.h中,他包含表4-4中的成员。
表 4-4
passwd成员
说 明
char *pw_name
用户登录名
uid_t pw_uid
UID编号
gid_t pw_gid
GID编号
char *pw_dir
用户主目录
char *pw_gecos
用户全名
char *pw_shell
用户默认shell
有些UNIX系统可能对用户全名字段使用一个不同的名字,在某些系统(如Linux)上,他是pw_gecos,而在其他系统上,他是pw_comment。这意味着我们不能对他给出一个统一的用法。
getpwuid和getpwnam函数都返回一个指针,该指针指向和某个用户对应的passwd结构。这个用户通过getpwuid的UID或通过getpwnam的用户登录名来确定。出错时,他们都返回一个空指针并配置errno。
实验:用户信息
下面的程式user.c从密码数据库中提取出一些用户信息:
他给出如下的输出,在不同的Linux和UNIX版本中,输出结果可能会稍有差异:
实验解析
这个程式先调用getuid来获得当前用户的UID。再把这个UID用在getpwuid函数中来获得密码文档中保存的周详信息。此外,我们还演示了通过在getpwnam中给出用户名root来获得用户信息的方法。
假如读者查看Linux的源代码,就能在id命令的源代码中看到另一个使用getuid函数的例子。
假如要扫描密码文档的任何信息,我们能够使用getpwent函数。他的作用是取出连续的文档数据项:
getpwent函数依次返回每个用户的信息数据项。当到达文档尾时,他返回一个空指针。假如已扫描了足够多的数据项,我们能够使用endpwent函数来终止处理过程。setpwent函数重置读指针到密码文档的开始位置,这样下一个getpwent调用将重新开始一个新的扫描。这些函数的操作方式和我们在第3章讨论的目录扫描函数opendir、 readdir和closedir很相似。
(有效的和实际的)用户和组标识符还能够被其他一些不太常用的函数获得:
组标识符和有效用户标识符的周详资料请参考系统的使用手册,虽然您可能会发现自己根本无需对他们进行处理。
喜欢本文,那就收藏到:
上一篇:
/ld.so.conf ; ldconfig ; PKG_CONFIG_PATH详解
下一篇:
搜集相同名称的文件(collect files with the same name)
相关评论
我也要评论
还没有关于此文章的相关评论!
首页
上一页
下一页
尾页
昵称:
(为空则显示guest)
评论分数:
★
★ ★
★★★
★★★★
★★★★★
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
相关推荐
xml轻松学习手册(3)xml的术语_xml教程
xml轻松学习手册(4)xml语法_xml教程
xml轻松学习手册(5)xml实例解析_xml教程
了解web页面工具语言xml(一)产生背景_xml教程
了解web页面工具语言xml(二)定义_xml教程
了解web页面工具语言xml(三)支持工具_xml教程
了解web页面工具语言xml(四)应用分类_xml教程
了解web页面工具语言xml(五)好处_xml教程
了解web页面工具语言xml(六)展望_xml教程
xml技术上传文档_xml技巧
相关资讯
PerlScript的介绍
用perl访问mysql数据库
Perl语言的文字处理模式之三
Perl语言的文字处理模式之二
Perl语言的文字处理模式之一
本地调试PERLCGI程式
怎样利用Perl研发Internet/Intranet应用之二
怎样利用Perl研发Internet/Intranet应用之一
Perl教学第二篇简单变量
Perl教学第一篇概述
点击发布文章
导航
主页
设为首页
加入收藏
联系我们
赞助商
文章类别
行业资讯
域名资讯
虚拟主机
托管租用
VPS
CDN
网站运营
技术资讯
Mac OS
网络设备
路由技术
网络技术
HTML/DHTML
源码天堂
网络编程
Java
Perl
C/C++
Shell
数据库其他
DB2
Sybase
存储备份
硬件技术
网站建设
通信技术
虚拟化技术
安全其他
安全工具
加密和破解
数据库安全
程序安全
网络安全
系统安全
防火墙
VPN
网管技术其他
Informix
Oracle
PostgreSQL
Dreamweaver教程
windows操作系统
XML编程
NET编程
JSP编程
PHP编程
ASP编程
Mssql
Mysql
Access
Coreldraw
flash
web服务器
ftp服务器
mail服务器
邮件系统
IBM-AIX
HP-UX
Sco
Solaris
FreeBSD
Linux
Proxy
CSS教程
Javascript教程
Ajax
dns服务器
Photoshop教程
站长资讯
冲浪宝典
帮助中心
首页新闻
其它相关问题
安全漏洞相关问题
网站推广相关问题
虚拟主机相关问题
网站建设相关问题
服务器相关问题
备案相关问题
支付相关问题
后台操作指南
代理相关问题
邮件相关问题
域名相关问题
vps相关问题
行业资讯
名网动态
新手指南
代理帮助
订阅
Rss Feed
主机赞助商连接:
华夏名网虚拟主机域名注册
关于我们 | 网站声明 | 联系我们 | 广告服务 IDC中文资讯站-客观公证的IDC产业权威媒体
Copyright
@
2007-2008 IDCNEWS.NET, All Rights Reserved
蜀ICP备07504800号
Jordan Shoes
christian audigier wholesale
Nike air Jordan
Jordan retro shoes
wholesale Nike Shoes
Wholesale Shoes
Wholesale clothing