分享
 
 
 

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

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

标 题: UNIX系统编程常用库函数说明

UNIX系统为程序员提供了许多子程序,这些子程序可存取各种安全属性.有

些是信息子程序,返回文件属性,实际的和有效的UID,GID等信息.有些子程序可

改变文件属性.UID,GID等有些处理口令文件和小组文件,还有些完成加密和解密.

本文主要讨论有关系统子程序,标准C库子程序的安全,如何写安全的C程序

并从root的角度介绍程序设计(仅能被root调用的子程序).

1.系统子程序

(1)I/O子程序

*creat():建立一个新文件或重写一个暂存文件.

需要两个参数:文件名和存取许可值(8进制方式).如:

creat("/usr/pat/read_write",0666) /* 建立存取许可方式为0666的文件 */

调用此子程序的进程必须要有建立的文件的所在目录的写和执行许可,置

给creat()的许可方式变量将被umask()设置的文件建立屏蔽值所修改,新

文件的所有者和小组由有效的UID和GID决定.

返回值为新建文件的文件描述符.

*fstat():见后面的stat().

*open():在C程序内部打开文件.

需要两个参数:文件路径名和打开方式(I,O,I&O).

如果调用此子程序的进程没有对于要打开的文件的正确存取许可(包括文

件路径上所有目录分量的搜索许可),将会引起执行失败.

如果此子程序被调用去打开不存在的文件,除非设置了O_CREAT标志,调用

将不成功.此时,新文件的存取许可作为第三个参数(可被用户的umask修

改).

当文件被进程打开后再改变该文件或该文件所在目录的存取许可,不影响

对该文件的I/O操作.

*read():从已由open()打开并用作输入的文件中读信息.

它并不关心该文件的存取许可.一旦文件作为输入打开,即可从该文件中读

取信息.

*write():输出信息到已由open()打开并用作输出的文件中.同read()一样

它也不关心该文件的存取许可.

(2)进程控制

*exec()族:包括execl(),execv(),execle(),execve(),execlp()和execvp()

可将一可执行模快拷贝到调用进程占有的存贮空间.正被调用进

程执行的程序将不复存在,新程序取代其位置.

这是UNIX系统中一个程序被执行的唯一方式:用将执行的程序复盖原有的

程序.

安全注意事项:

. 实际的和有效的UID和GID传递给由exec()调入的不具有SUID和SGID许

可的程序.

. 如果由exec()调入的程序有SUID和SGID许可,则有效的UID和GID将设

置给该程序的所有者或小组.

. 文件建立屏蔽值将传递给新程序.

. 除设了对exec()关闭标志的文件外,所有打开的文件都传递给新程序.

用fcntl()子程序可设置对exec()的关闭标志.

*fork():用来建立新进程.其建立的子进程是与调用fork()的进程(父进程)

完全相同的拷贝(除了进程号外)

安全注意事项:

. 子进程将继承父进程的实际和有效的UID和GID.

. 子进程继承文件方式建立屏蔽值.

. 所有打开的文件传给子进程.

*signal():允许进程处理可能发生的意外事件和中断.

需要两个参数:信号编号和信号发生时要调用的子程序.

信号编号定义在signal.h中.

信号发生时要调用的子程序可由用户编写,也可用系统给的值,如:SIG_IGN

则信号将被忽略,SIG_DFL则信号将按系统的缺省方式处理.

如许多与安全有关的程序禁止终端发中断信息(BREAK和DELETE),以免自己

被用户终端终止运行.

有些信号使UNIX系统的产生进程的核心转储(进程接收到信号时所占内存

的内容,有时含有重要信息),此系统子程序可用于禁止核心转储.

(3)文件属性

*access():检测指定文件的存取能力是否符合指定的存取类型.

需要两个参数:文件名和要检测的存取类型(整数).

存取类型定义如下:

0: 检查文件是否存在

1: 检查是否可执行(搜索)

2: 检查是否可写

3: 检查是否可写和执行

4: 检查是否可读

5: 检查是否可读和执行

6: 检查是否可读可写可执行

这些数字的意义和chmod命令中规定许可方式的数字意义相同.

此子程序使用实际的UID和GID检测文件的存取能力(一般有效的UID和GID

用于检查文件存取能力).

返回值: 0:许可 -1:不许可.

*chmod():将指定文件或目录的存取许可方式改成新的许可方式.

需要两个参数:文件名和新的存取许可方式.

*chown():同时改变指定文件的所有者和小组的UID和GID.(与chown命令不

同).

由于此子程序同时改变文件的所有者和小组,故必须取消所操作文件的SUID

和SGID许可,以防止用户建立SUID和SGID程序,然后运行chown()去获得别

人的权限.

*stat():返回文件的状态(属性).

需要两个参数:文件路径名和一个结构指针,指向状态信息的存放

的位置.

结构定义如下:

st_mode: 文件类型和存取许可方式

st_ino: I节点号

st_dev: 文件所在设备的ID

st_rdev: 特别文件的ID

st_nlink: 文件链接数

st_uid: 文件所有者的UID

st_gid: 文件小组的GID

st_size: 按字节计数的文件大小

st_atime: 最后存取时间(读)

st_mtime: 最后修改时间(写)和最后状态的改变

st_ctime: 最后的状态修改时间

返回值: 0:成功 1:失败

*umask():将调用进程及其子进程的文件建立屏蔽值设置为指定的存取许可.

需要一个参数: 新的文件建立屏值.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有