<html>
<head>
<title>c++系列</title>
<meta content="text/html; charset=gb2312" http-equiv=Content-Type>
</head>
<p align="center"><script src="../../1.js"></script></a>
<body bgcolor="#ffffff" leftmargin="5" topmargin="1" marginheight="5" marginwidth="5">
<div align=center>
<table border=0 cellpadding=0 cellspacing=0 width=680 align="center">
<tbody>
<tr>
<td width=200 height="59">
</tr>
</tbody>
</table>
<table border=1 bordercolordark=#ffffff bordercolorlight=#ffffff cellpadding=0
cellspacing=0 width=685 align="center" height="70">
<tbody>
<tr>
<td bgcolor=#F9D23C height=14>
<div align=center class=H1> <b><font color="#FF0000"> <font color="#FFFFFF">UNIX(Linux)系统编程常用库函数说明</font></span></font><font
color=#ffa000><b></b></font></b></font></div>
</td>
</tr>
<tr valign=top>
<td class=H1 height=212>
<h4 align="right"> 作者:169
时间:2000-02-25.19:07:14 </span></font></h4>
<p> <span class="unnamed1">UNIX系统为程序员提供了许多子程序,这些子程序可存取各种安全属性.有些是信息子程序,返回文件属性,实际的和有效的UID,GID等信息.有些子程序可改变文件属性.UID,GID等有些处理口令文件和小组文件,还有些完成加密和解密.
<br>
本文主要讨论有关系统子程序,标准C库子程序的安全,如何写安全的C程序并从root的角度介绍程序设计(仅能被root调用的子程序). <br>
1.系统子程序 <br>
(1)I/O子程序 <br>
*creat():建立一个新文件或重写一个暂存文件. <br>
需要两个参数:文件名和存取许可值(8进制方式).如: <br>
creat("/usr/pat/read_write",0666) /* 建立存取许可方式为0666的文件 */ <br>
调用此子程序的进程必须要有建立的文件的所在目录的写和执行许可,置给creat()的许可方式变量将被umask()设置的文件建立屏蔽值所修改,新文件的所有者和小组由有效的UID和GID决定.
<br>
返回值为新建文件的文件描述符. <br>
*fstat():见后面的stat(). <br>
*open():在C程序内部打开文件. <br>
需要两个参数:文件路径名和打开方式(I,O,I&O). <br>
如果调用此子程序的进程没有对于要打开的文件的正确存取许可(包括文件路径上所有目录分量的搜索许可),将会引起执行失败. <br>
如果此子程序被调用去打开不存在的文件,除非设置了O_CREAT标志,调用将不成功.此时,新文件的存取许可作为第三个参数(可被用户的umask修改).
<br>
当文件被进程打开后再改变该文件或该文件所在目录的存取许可,不影响对该文件的I/O操作. <br>
*read():从已由open()打开并用作输入的文件中读信息. <br>
它并不关心该文件的存取许可.一旦文件作为输入打开,即可从该文件中读取信息. <br>
*write():输出信息到已由open()打开并用作输出的文件中.同read()一样它也不关心该文件的存取许可. <br>
(2)进程控制<br>
*exec()族:包括execl(),execv(),execle(),execve(),execlp()和execvp() <br>
可将一可执行模快拷贝到调用进程占有的存贮空间.正被调用进程执行的程序将不复存在,新程序取代其位置. <br>
这是UNIX系统中一个程序被执行的唯一方式:用将执行的程序复盖原有的程序. <br>
安全注意事项: <br>
. 实际的和有效的UID和GID传递给由exec()调入的不具有SUID和SGID许可的程序. <br>
. 如果由exec()调入的程序有SUID和SGID许可,则有效的UID和GID将设置给该程序的所有者或小组. <br>
. 文件建立屏蔽值将传递给新程序. <br>
. 除设了对exec()关闭标志的文件外,所有打开的文件都传递给新程序. <br>
用fcntl()子程序可设置对exec()的关闭标志. <br>
*fork():用来建立新进程.其建立的子进程是与调用fork()的进程(父进程)完全相同的拷贝(除了进程号外) <br>
安全注意事项: <br>
. 子进程将继承父进程的实际和有效的UID和GID. <br>
. 子进程继承文件方式建立屏蔽值. <br>
. 所有打开的文件传给子进程. <br>
*signal():允许进程处理可能发生的意外事件和中断,需要两个参数:信号编号和信号发生时要调用的子程序. <br>
信号编号定义在signal.h中. <br>
信号发生时要调用的子程序可由用户编写,也可用系统给的值,如:SIG_IGN 则信号将被忽略,SIG_DFL则信号将按系统的缺省方式处理.
<br>
如许多与安全有关的程序禁止终端发中断信息(BREAK和DELETE),以免自己被用户终端终止运行. <br>
有些信号使UNIX系统的产生进程的核心转储(进程接收到信号时所占内存的内容,有时含有重要信息),此系统子程序可用于禁止核心转储. <br>
(3)文件属性 <br>
*access():检测指定文件的存取能力是否符合指定的存取类型.需要两个参数:文件名和要检测的存取类型(整数). <br>
存取类型定义如下: <br>
0: 检查文件是否存在 <br>
1: 检查是否可执行(搜索) <br>
2: 检查是否可写 <br>
3: 检查是否可写和执行 <br>
4: 检查是否可读 <br>
5: 检查是否可读和执行 <br>
6: 检查是否可读可写可执行 <br>
这些数字的意义和chmod命令中规定许可方式的数字意义相同.此子程序使用实际的UID和GID检测文件的存取能力(一般有效的UID和GID
用于检查文件存取能力). <br>
返回值: 0:许可 -1:不许可. <br>
*chmod():将指定文件或目录的存取许可方式改成新的许可方式. <br>
需要两个参数:文件名和新的存取许可方式. <br>
*chown():同时改变指定文件的所有者和小组的UID和GID.(与chown命令不同). <br>
由于此子程序同时改变文件的所有者和小组,故必须取消所操作文件的SUID 和SGID许可,以防止用户建立SUID和SGID程序,然后运行chown()去获得别人的权限.
<br>
*stat():返回文件的状态(属性). <br>
需要两个参数:文件路径名和一个结构指针,指向状态信息的存放的位置. <br>
结构定义如下: <br>
st_mode: 文件类型和存取许可方式 <br>
st_ino: I节点号 <br>
st_dev: 文件所在设备的ID <br>
st_rdev: 特别文件的ID <br>
st_nlink: 文件链接数 <br>
st_uid: 文件所有者的UID <br>
st_gid: 文件小组的GID <br>
st_size: 按字节计数的文件大小 <br>
st_atime: 最后存取时间(读) <br>
st_mtime: 最后修改时间(写)和最后状态的改变 <br>
st_ctime: 最后的状态修改时间 <br>
返回值: 0:成功 1:失败 <br>
*umask():将调用进程及其子进程的文件建立屏蔽值设置为指定的存取许可. <br>
需要一个参数: 新的文件建立屏值. <br>
(4)UID和GID的处理 <br>
*getuid():返回进程的实际UID. <br>
*getgid():返回进程的实际GID. <br>
以上两个子程序可用于确定是谁在运行进程. <br>
*geteuid():返回进程的有效UID. <br>
*getegid():返回进程的有效GID. <br>
以上两个子程序可在一个程序不得不确定它是否在运行某用户而不是运行它的用户的SUID程序时很有用,可调用它们来检查确认本程序的确是以该用户的SUID许可在运行.
<br>
*setuid():用于改变有效的UID. <br>
对于一般用户,此子程序仅对要在有效和实际的UID之间变换的SUID程序才有用(从原有效UID变换为实际UID),以保护进程不受到安全危害.实际上该进程不再是SUID方式运行.
<br>
*setgid():用于改变有效的GID. <br>
2.标准C库 <br>
(1)标准I/O <br>
*fopen():打开一个文件供读或写,安全方面的考虑同open()一样. <br>
*fread(),getc(),fgetc(),gets(),scanf()和fscanf():从已由fopen()打开供读的文件中读取信息.它们并不关心文件的存取许可.这一点同read().
<br>
*fwrite(),put(),fputc(),puts,fputs(),printf(),fprintf():写信息到已由fopen()打开供写的文件中.它们也不关心文件的存取许可.
<br>
同write(). <br>
*getpass():从终端上读至多8个字符长的口令,不回显用户输入的字符.需要一个参数: 提示信息. <br>
该子程序将提示信息显示在终端上,禁止字符回显功能,从/dev/tty读取口令,然后再恢复字符回显功能,返回刚敲入的口令的指针. <br>
*popen():将在(5)运行shell中介绍. <br>
(2)/etc/passwd处理 <br>
有一组子程序可对/etc/passwd文件进行方便的存取,可对文件读取到入口项或写新的入口项或更新等等. <br>
*getpwuid():从/etc/passwd文件中获取指定的UID的入口项. <br>
*getpwnam():对于指定的登录名,在/etc/passwd文件检索入口项. <br>
以上两个子程序返回一指向passwd结构的指针,该结构定义在 <br>
/usr/include/pwd.h中,定义如下: <br>
没有合适的资源?快使用搜索试试~ 我知道了~
Visual Studio 6.0 专题教程
共96个文件
htm:96个
4星 · 超过85%的资源 需积分: 10 59 下载量 85 浏览量
2008-12-16
19:10:27
上传
评论 1
收藏 239KB RAR 举报
温馨提示
Visual Studio 6.0是Microsoft公司推出的一个可视化应用程序集成开发环境(IDE Integrate Develop Environment)。 Visual Studio IDE不仅支持Visual C++,还支持Visual Basic、Visual J++、Visual InterDev等Microsoft系列开发工具。 Visual Studio包含文本编辑器、资源编辑器、工程编译工具,源代码浏览器、集成调试工具,以及一套联机文档。使用Visual Studio可以直观方便地完成创建、调试、修改应用程序等工作。
资源推荐
资源详情
资源评论
收起资源包目录
VC.C++专题教程》.rar (96个子文件)
cvcjc
vcc69.htm 4KB
vcc45.htm 7KB
vcc63.htm 4KB
vcc24.htm 11KB
vcc47.htm 7KB
vcc70.htm 3KB
vcc76.htm 4KB
vcc89.htm 6KB
vcc64.htm 3KB
vcc16.htm 10KB
vcc1.htm 4KB
vcc80.htm 3KB
vcc14.htm 9KB
vcc46.htm 7KB
vcc6.htm 11KB
vcc19.htm 6KB
vcc18.htm 10KB
vcc84.htm 5KB
vcc50.htm 4KB
vcc25.htm 4KB
vcc60.htm 7KB
vcc33.htm 15KB
vcc93.htm 3KB
vcc58.htm 7KB
vcc67.htm 4KB
vcc55.htm 3KB
vcc61.htm 6KB
vcc22.htm 5KB
vcc41.htm 5KB
vcc48.htm 3KB
vcc3.htm 2KB
vcc2.htm 7KB
vcc54.htm 4KB
vcc29.htm 15KB
vcc28.htm 11KB
vcc36.htm 5KB
vcc72.htm 3KB
vcc57.htm 5KB
vcc15.htm 5KB
vcc96.htm 3KB
vcc32.htm 8KB
vcc11.htm 7KB
vcc38.htm 6KB
vcc27.htm 17KB
vcc9.htm 8KB
vcc44.htm 7KB
vcc35.htm 8KB
vcc7.htm 16KB
vcc97.htm 5KB
vcc65.htm 7KB
vcc53.htm 3KB
vcc12.htm 4KB
vcc81.htm 3KB
vcc52.htm 4KB
vcc94.htm 13KB
vcc20.htm 11KB
vcc85.htm 4KB
vcc31.htm 5KB
vcc17.htm 4KB
vcc71.htm 6KB
vcc37.htm 19KB
vcc23.htm 5KB
vcc66.htm 7KB
vcc62.htm 5KB
vcc91.htm 6KB
vcc87.htm 6KB
vcc75.htm 4KB
vcc59.htm 18KB
vcc8.htm 3KB
vcc10.htm 2KB
vcc90.htm 6KB
vcc42.htm 4KB
vcc39.htm 8KB
vcc73.htm 4KB
vcc78.htm 7KB
vcc21.htm 4KB
vcc95.htm 3KB
vcc49.htm 3KB
vcc79.htm 4KB
vcc26.htm 8KB
vcc34.htm 10KB
vcc86.htm 4KB
vcc13.htm 14KB
vcc92.htm 3KB
vcc43.htm 11KB
vcc30.htm 10KB
vcc82.htm 2KB
vcc4.htm 6KB
vcc51.htm 4KB
vcc77.htm 8KB
vcc88.htm 7KB
vcc56.htm 2KB
vcc5.htm 5KB
vcc83.htm 7KB
vcc40.htm 17KB
vcc74.htm 4KB
共 96 条
- 1
资源评论
- yyd4152013-09-20现在还在用VS6.0的已经少了很多。
- hitzhaoxb2014-04-16下完发现下错了 原来不是VS VS6.0不是很好用啊
you168you
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功