分享
 
 
 

UNIX系统编程常用库函数说明 (2)

王朝system·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

(4)UID和GID的处理

*getuid():返回进程的实际UID.

*getgid():返回进程的实际GID.

以上两个子程序可用于确定是谁在运行进程.

*geteuid():返回进程的有效UID.

*getegid():返回进程的有效GID.

以上两个子程序可在一个程序不得不确定它是否在运行某用户而不是运行

它的用户的SUID程序时很有用,可调用它们来检查确认本程序的确是以该

用户的SUID许可在运行.

*setuid():用于改变有效的UID.

对于一般用户,此子程序仅对要在有效和实际的UID之间变换的SUID程序才

有用(从原有效UID变换为实际UID),以保护进程不受到安全危害.实际上该

进程不再是SUID方式运行.

*setgid():用于改变有效的GID.

2.标准C库

(1)标准I/O

*fopen():打开一个文件供读或写,安全方面的考虑同open()一样.

*fread(),getc(),fgetc(),gets(),scanf()和fscanf():从已由fopen()打

开供读的文件中读取信息.它们并不关心文件的存取许可.这一点

同read().

*fwrite(),put(),fputc(),puts,fputs(),printf(),fprintf():写信息到

已由fopen()打开供写的文件中.它们也不关心文件的存取许可.

同write().

*getpass():从终端上读至多8个字符长的口令,不回显用户输入的字符.

需要一个参数: 提示信息.

该子程序将提示信息显示在终端上,禁止字符回显功能,从/dev/tty读取口

令,然后再恢复字符回显功能,返回刚敲入的口令的指针.

*popen():将在(5)运行shell中介绍.

(2)/etc/passwd处理

有一组子程序可对/etc/passwd文件进行方便的存取,可对文件读取到入口

项或写新的入口项或更新等等.

*getpwuid():从/etc/passwd文件中获取指定的UID的入口项.

*getpwnam():对于指定的登录名,在/etc/passwd文件检索入口项.

以上两个子程序返回一指向passwd结构的指针,该结构定义在

/usr/include/pwd.h中,定义如下:

struct passwd {

char * pw_name; /* 登录名 */

char * pw_passwd; /* 加密后的口令 */

uid_t pw_uid; /* UID */

gid_t pw_gid; /* GID */

char * pw_age; /* 代理信息 */

char * pw_comment; /* 注释 */

char * pw_gecos;

char * pw_dir; /* 主目录 */

char * pw_shell; /* 使用的shell */

};

*getpwent(),setpwent(),endpwent():对口令文件作后续处理.

首次调用getpwent(),打开/etc/passwd并返回指向文件中第一个入口项的

指针,保持调用之间文件的打开状态.

再调用getpwent()可顺序地返回口令文件中的各入口项.

调用setpwent()把口令文件的指针重新置为文件的开始处.

使用完口令文件后调用endpwent()关闭口令文件.

*putpwent():修改或增加/etc/passwd文件中的入口项.

此子程序将入口项写到一个指定的文件中,一般是一个临时文件,直接写口

令文件是很危险的.最好在执行前做文件封锁,使两个程序不能同时写一个

文件.算法如下:

. 建立一个独立的临时文件,即/etc/passnnn,nnn是PID号.

. 建立新产生的临时文件和标准临时文件/etc/ptmp的链,若建链失败,

则为有人正在使用/etc/ptmp,等待直到/etc/ptmp可用为止或退出.

. 将/etc/passwd拷贝到/etc/ptmp,可对此文件做任何修改.

. 将/etc/passwd移到备份文件/etc/opasswd.

. 建立/etc/ptmp和/etc/passwd的链.

. 断开/etc/passnnn与/etc/ptmp的链.

注意:临时文件应建立在/etc目录,才能保证文件处于同一文件系统中,建

链才能成功,且临时文件不会不安全.此外,若新文件已存在,即便建

链的是root用户,也将失败,从而保证了一旦临时文件成功地建链后

没有人能再插进来干扰.当然,使用临时文件的程序应确保清除所有

临时文件,正确地捕捉信号.

(3)/etc/group的处理

有一组类似于前面的子程序处理/etc/group的信息,使用时必须用include

语句将/usr/include/grp.h文件加入到自己的程序中.该文件定义了group

结构,将由getgrnam(),getgrgid(),getgrent()返回group结构指针.

*getgrnam():在/etc/group文件中搜索指定的小组名,然后返回指向小组入

口项的指针.

*getgrgid():类似于前一子程序,不同的是搜索指定的GID.

*getgrent():返回group文件中的下一个入口项.

*setgrent():将group文件的文件指针恢复到文件的起点.

*endgrent():用于完成工作后,关闭group文件.

*getuid():返回调用进程的实际UID.

*getpruid():以getuid()返回的实际UID为参数,确定与实际UID相应的登录

名,或指定一UID为参数.

*getlogin():返回在终端上登录的用户的指针.

系统依次检查STDIN,STDOUT,STDERR是否与终端相联,与终端相联的标准输

入用于确定终端名,终端名用于查找列于/etc/utmp文件中的用户,该文件

由login维护,由who程序用来确认用户.

*cuserid():首先调用getlogin(),若getlogin()返回NULL指针,再调用

getpwuid(getuid()).

*以下为命令:

*logname:列出登录进终端的用户名.

*who am I:显示出运行这条命令的用户的登录名.

*id:显示实际的UID和GID(若有效的UID和GID和实际的不同时也显示有效的

UID和GID)和相应的登录名.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有