文档介绍:系统管理-UNIX编程-UNIX系统编程常用库函数说明
UNIX系统为程序员提供了许多子程序,,返回文件属性,实际的和有效的UID,,GID等有些处理口令文件和小组文件,还有些完成加密和解密. 本文主要讨论有关系统子程序,标准C库子程序的安全,如何写安全的C程序并从root的角度介绍程序设计(仅能被root调用的子程序).
(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()()一样它也不关心该文件的存取许可.
(2)进程控制
*exec()族:包括execl(),execv(),execle(),execve(),execlp()和execvp() ,新程序取代其位置. 这是UNIX系统中一个程序被执行的唯一方式:用将执行的程序复盖原有的程序.
安全注意事项:
. 实际的和有效的UID和GID传递给由exec()调入的不具有SUID和SGID许可的程序.
. 如果由exec()调入的程序有SUID和SGID许可,则有效的UID和GID将设置给该程序的所有者或小组
. 文件建立屏蔽值将传递给新程序.
. 除设了对exec()关闭标志的文件外,所有打开的文件都传递给新程序. tl()子程序可设置对exec()的关闭标志.
*fork():()的进程(父进程) 完全相同的拷贝(除了进程号外)
安全注意事项:
. 子进程将继承父进程的实际和有效的UID和GID. . 子进程继承文件方式建立屏蔽值.
. 所有打开的文件传给子进程.
*signal():允许进程处理可能发生的意外事件和中断. 需要两个参数:信号编号和信号发生时要调用的子程序. 信号编号定义在s