发信人: netman.bbs@cs3.xmu.edu.cn (邂逅), 信区: cnhacker
标  题: 程序员安全(7)
发信站: cs3 BBS (Sun Jun 15 23:24:15 1997)
转信站: Lilac!ustcnews!ustcnews!sjtunews!cs3
出  处: cs3.xmu.edu.cn

4.root程序的设计
    有若干个子程序可以从有效UID为0的进程中调用.许多前面提到的子程序,
当从root进程中调用时,将完成和原来不同的处理.主要是忽略了许可权限的检
查.
    由root用户运行的程序当然是root进程(SUID除外),因有效UID用于确定文
件的存取权限,所以从具有root的程序中,调用fork()产生的进程,也是root进程.

  (1)setuid():从root进程调用setuid()时,其处理有所不同,setuid()将把有
     效的和实际的UID都置为指定的值.这个值可以是任何整型数.而对非root
     进程则仅能以实际UID或本进程原来有效的UID为变量值调用setuid().
  (2)setgid():在系统进程中调用setgid()时,与setuid()类似,将实际和有效
     的GID都改变成其参数指定的值.
  *  调用以上两个子程序时,应当注意下面几点:
     . 调用一次setuid()(setgid())将同时设置有效和实际UID(GID),独立分
       别设置有效或实际UID(GID)固然很好,但无法做到这点.
     . setuid()(setgid())可将有效和实际UID(GID)设置成任何整型数,其数
       值不必一定与/etc/passwd(/etc/group)中用户(小组)相关联.
     . 一旦程序以一个用户的UID了setuid(),该程序就不再做为root运行,也
       不可能再获root特权.
  (3)chown():当root进程运行chown()时,chown()将不删除文件的SUID和/或
     SGID许可,但当非root进程运行chown()时,chown()将取消文件的SUID和/
     或SGID许可.
  (4)chroot():改变进程对根目录的概念,调用chroot()后,进程就不能把当前
     工作目录改变到新的根目录以上的任一目录,所有以/开始的路径搜索,都
     从新的根目录开始.
  (5)mknod():用于建立一个文件,类似于creat(),差别是mknod()不返回所打开
     文件的文件描述符,并且能建立任何类型的文件(普通文件,特殊文件,目录
     文件).若从非root进程调用mknod()将执行失败,只有建立FIFO特别文件
     (有名管道文件)时例外,其它任何情况下,必须从root进程调用mknod().由
     于creat()仅能建立普通文件,mknod()是建立目录文件的唯一途径,因而仅
     有root能建立目录,这就是为什么mkdir命令具有SUID许可并属root所有.
     一般不从程序中调用mknod().通常用/etc/mknod命令建立特别设备文件而
     这些文件一般不能在使用着时建立和删除,mkdir命令用于建立目录.当用
     mknod()建立特别文件时,应当注意确从所建的特别文件不允许存取内存,
     磁盘,终端和其它设备.
  (6)unlink():用于删除文件.参数是要删除文件的路径名指针.当指定了目录
     时,必须从root进程调用unlink(),这是必须从root进程调用unlink()的唯
     一情况,这就是为什么rmdir命令具有root的SGID许可的原因.
  (7)mount(),umount():由root进程调用,分别用于安装和拆卸文件系统.这两
     个子程序也被mount和umount命令调用,其参数基本和命令的参数相同.调
     用mount(),需要给出一个特别文件和一个目录的指针,特别文件上的文件
     系统就将安装在该目录下,调用时还要给出一个标识选项,指定被安装的文
     件系统要被读/写(0)还是仅读(1).umount()的参数是要一个要拆卸的特别
     文件的指针.

--
※ 来源:·古庙钟声 cs3.xmu.edu.cn·[FROM: freedom@cs3.xmu.edu.]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.086毫秒