FreeBSD系统安装及安全调整

FreeBSD系统安装及安全调整

内容简介:本文将详细介绍一个网站服务器的系统安装、针对安全因素的系统调整。该服务器通过Apache+PHP4+MySQL提供动态网站服务,通过自带的FTPD提供网页上传服务,通过自带的Open SSH提供管理维护服务。本文将不涉及Apache和MySQL的管理。

  一、安装操作系统

  1.选择发行版本

  安装生产服务器,应当尽量选择最新的稳定版本。本文将采用 FreeBSD 4.8 RELEASE。

  4.8-RELEASE是成文时候最新的-STABLE版本。5.0-RELEASE和即将推出的5.1-RELEASE都是-CURRENT分支的发行版本,其稳定性和性能可能不如-STABLE,仅适合于开发者和发烧友。对于生产服务器来说,miniinst或disc1就足够了。请下载4.8-RELEASE-i386-mini.iso这个文件,刻录成安装光盘。
本文所叙述操作系统的安装就将采用光盘安装方式。

  2.安装要点

  通过安装向导可以很轻松的完成系统安装,这里不加详细叙述,仅仅指出如下两点:

  (1)硬盘分区的注意事项:

  分区的大小根据应用的实际情况而异,特别指出的是,网站文件、数据库文件、日志文件、临时文件应当单独分区存储,以防止攻击者滥用磁盘空间导致系统崩溃。下面是一块容量为18G SCSI硬盘的分区例子:

分区 大小 备注
/ 128M
SWAP 1008M 至少是内存数量的2倍(本系统采用512M内存)
/tmp 256M
/usr 3G 系统和Apache等应用软件、源码存储于这个分区
/usr/home 7G 网站文件存储于此
/var 3G 数据库将使用这个分区
/var/log 2811M 日志文件单独分区

  (2)选择要安装的文件(distributions):

  只安装必要的基本系统即可,绝对不要安装全部软件。在custom项目中,选取如下安装内容:

  bin,基本的 FreeBSD系统文件;
  man,系统帮助文件;
  src—》sys,操作系统核心源码,定制内核时候将使用到。

  接下来,安装程序询问是否安装PORTS,为了方便安装软件,我们选择安装。但在高安全要求的系统上,最好不要使用ports或者packages,尽量自己下载源代码在本地编译,手动安装。

  提示:有时,安全和易用是相互矛盾的。

  然后是拷贝文件,直至安装完毕。

  3.安装后的初步设置

  安装完之后,建议您安装cvsup-without-gui(从bento. freebsd.org可以下在最新版本),并同步代码。对系统进行初步设置:

  增加用户帐号;
  设置网络参数,将主机连接到网络上(全部设置完成后移动到Internet);
  配置网络服务,打开FTP、 SSH服务,后续的配置工作都将远程进行。


  二、定制系统内核

  定制系统内核内容:

  支持特定硬件,如SMP、RAID、大容量内存;
  删除多余硬件驱动支持;
  增强系统安全性,增加IP过滤防火墙支持。

  编辑内核设置文件,为增强安全特性,增添或修改如下内容:

  #启用ipfw过滤
  options IPFIREWALL #打开IPFW过滤功能
  options IPFIREWALL_VERBOSE #设置过滤日志记录
  options IPFIREWALL_VERBOSE_LIMIT=100 #设置日志记录限制
  options IPFIREWALL_DEFAULT_TO_ACCEPT #设置缺省行为
  options NOLKM#关闭LKM
  options TCP_DROP_SYNFIN #丢弃SYNFIN包,需要在rc.conf中打开

  #关于虚拟终端
  #取消历史记录,在登出系统后刷新虚拟终端缓冲中的内容
  SC_NO_HISTORY
  #取消debug键
  SC_DISABLE_DDBKEY
  #取消ctl+alt+del键
  SC_DISABLE_REBOOT


  重新编译系统内核并使之生效。

  三、系统配置

  1.修改/etc/inetd.conf文件内容,配置inetd服务

  (1)telnet服务

  我们将使用 SSH远程管理这台服务器,因此禁止telnet服务:在行前加"#"标记。

  (2)FTP服务

  使用系统自带的FTP服务,并作如下设置:

  ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l -l -h

  -l 参数,记录每个成功或者失败的FTP登录尝试;
  -l -l 参数,所有的下载、上传、删除更动作和文件名都会被记录下来(设置syslog.conf)
  -h参数,将禁止主机相关信息的输出,例如ftpd版本、主机名等;
  -P参数,指定FTPD进程监听端口号

  FTP服务其他安全方面的设置:

  把网站编辑帐号放到/etc/ftpchroot文件中,把他们限制在自己的HOME目录,防止浏览其他目录。
  编辑/etc/hosts.allow 文件,限制对FTPD的访问。
  可以编辑/etc/ftpwelcome,防止泄露系统信息。

  2.修改/etc/rc.conf文件,配置系统初始参数

  #配置开机器后自动启动或关闭的守护进程
  #可以关闭inetd,使用 SSH代替了telnet服务,使用其他的FTP服务程序代替系统的ftpd。
  inetd_enable="NO"

  #如果决定使用inetd则启动inetd的日志选项,并提高一个服务每分钟启动的上限数目(默认是256,建议提高到1024),防止DoS攻击;

  inetd_enable="YES"
  inetd_flags="-l -R 1024"

  #打开 SSHD
   sshd_enable="YES"

  #禁止syslogd记录其他主机日志(关闭端口514)
  syslogd_enable="YES"
  syslogd_flags="-s -s"

  #关闭不必要的服务。本服务器没有NFS、NIS登需要,可以关闭portmap (关闭端口111)
  portmap_enable="NO"
  nfs_server_enable="NO"
  nfs_client_enable="NO"

  #使sendmail只监听localhost,允许邮件客户程序发送邮件
  sendmail_enable="NO"
  #设置为"NONE",将彻底关闭25端口

  #设置内核安全级别(Securelevels)
  #内核安全级别从-1到3,-1和0级别是非安全级别。
  #系统在多用户模式下,安全级别只能提升不能降低。
  #Securelevel -1,永久不安全模式
  #Securelevel 0,不安全模式
  #Securelevel 1,安全模式
  #Securelevel 2,高安全模式
  kern_securelevel_enable="YES"
  kern_securelevel="2"

  #计算机启动时候发现文件系统失效,将以-y参数运行fsck

  fsck_y_enable="YES"

  #打开磁盘配额
  enable_quotas="YES"
  check_quotas="YES"

  #在系统启动时清空/tmp
  clear_tmp_enable="YES"

  #防止系统自动加入信息到motd
  update_motd="NO"

  #启动防火墙设置
  firewall_enable="YES"
  firewall_logging="YES"
  firewall_script="/etc/firewall.rules"

  #丢弃SYNFIN信息包。缺省时设置为”NO”,当设置为”YES”的时候,系统内核将忽略同时设置了syn和fin位的TCP桢(需要内核的支持:options tcp_drop_synfin)
  tcp_drop_synfin="YES"

  #丢弃ICMP重定向。可以防止DOS攻击或劫持进程(hijack sessions)
  icmp_drop_redirect="YES"
  icmp_log_redirect="YES" #记录ICMP重定向
  #在CISCO路由器上关闭重定向:no ip send-redirects

  log_in_vain="YES" #记录每一个到关闭端口的连接企图。
  accounting_enable="YES" #打开系统审计功能


  3.修改/etc/sysctl.conf文件,调整IP堆栈


  #关闭对广播类型的响应,过滤ICMP响应后,服务器无法ping 通,可以提高部分安全性能
net.inet.icmp.bmcastecho=0
  #对UDP包的校验和进行计算,防止不正确的UDP包的攻击
  net.inet.udp.checksum=1

  #在默认情况下,操作系统在关闭的端口上接受到TCP SYN段的时候,会发送RST信息包,告诉攻击者这个端口关闭了,导致攻击者继续扫描下一个端口,使端口扫描简单化,浪费了本机CPU时间在DOS上。我们可以使用blackhole来控制对没有socket监听的TCP或者UDP端口接受到连接请求时的行为。
  #当设置这个选项后,系统将马上丢弃这个包而不发RST包,连接端将看到"Connection reset by peer."

  net.inet.tcp.blackhole=2
  net.inet.udp.blackhole=1

  4.防火墙规则设置

  尽管按照上面的叙述已经能够形成一定的防护,但是若要实现安全程度更高的主机系统,就要借助于IPFW这样的包过滤软件,通过设置防火墙规则,严格限制对服务器的访问。

  过滤ICMP服务,命令格式:

  ipfw add pass log icmp from $ip to any [要处理的协议]

  icmp是使用类型规定出站的信息。
  0 echo-reply ping
  3 destination unreachable Any TCP/UDP traffic(主机不可到达)
  5 redirect routing if not running routing daemon(如果未运行路由守护程序,复位向路由)
  8 echo-request ping (入站信息)
  11 time-exceeded traceroute (traceroute 超时)

  配置文件的例子:
  ip="你自己的IP"

  #强制清除所有规则
  ipfw -f flush

  ipfw add pass log udp from $ip to any
  ipfw add pass log icmp from $ip to any icmp 8#接受回答
  ipfw add pass log icmp from not $ip to $ip icmp 0#拒绝请求
  ipfw add pass log icmp from not $ip to any icmp 11# traceroute 超时
  ipfw add pass log icmp from not $ip to any icmp 3#目标主机不可到达

  #SYN、FIN组合的包一般是nmap、queso扫描器使用,所以过滤。
  ipfw add deny log tcp from any to any in tcpflags syn,fin

  #检查通信状态
  ipfw add check-state
  ipfw add deny tcp from any to any in established
  ipfw add allow ip from any to any out keep-state

  #允许ident请求
  ipfw add allow tcp from any to any 113 keep-state setup

  5.日志管理

  (1)启动日志
  修改/etc/rc.conf文件。使用 "-s -s"标志启动syslogd,防止打开UDP 514端口;

  (2)修改/etc/syslog.conf文件,配置syslogd

  #可以将本地日志记录到其他主机loghost上:
  *.*@loghost

  #为FTP增加日志条目:
  ftp.* /var/log/ftpd
  #相关命令:touch /var/log/ftpd

  #记录 SSH连接记录
  security.*;auth.info /var/log/security #记录连接到 SSH的日志信息
  auth.* /var/log/authlog

  #使ipfw能够用syslog记录
  !ipfw
  *.* /var/log/ipfw.log

  (3)使用newsyslog压缩日志
  newsyslog程序能够定时压缩日志文件并清除旧的文件是, freebsd默认安装的,它是从crontab启动的:

  #grep newsyslog /etc/crontab
  0 * * * * root /usr/sbin/newsyslog

  可以修改/etc/newsyslog.conf以符合你的需求。通常把文件属性从664变为640,不让一般用户查看系统记录。

  /var/log/authlog root.wheel 640 7 100 * Z
  /var/log/ipfw.log root.wheel 640 3 100 * Z
  #这会在日志文件达到100K时将它压缩并编号,将mode改成640,chown成root.wheel,并删除旧的日志文件。

  #相关操作:
  #cd /var/log
  #chmod g-w,o-r *;chmod a+r wtmp
  #把所有文件的组属性改为wheel的。

  #防止一般用户读日志配置文件
  #chmod 600 /etc/syslog.conf
  #chmod 600 /etc/newsyslog.conf

  四、用户管理


  1.限制登录条件

  (1)把个人用户放到/etc/ftpchroot文件中,把他们限制在自己的HOME目录

  (2)修改/etc/shells文件,增加不能用来登录的shell,如passwd或者nologin,赋予仅需要FTP功能的用户以/usr/bin/passwd的shell 阻止他们使用SHELL命令。

  (3)拒绝直接以root身份登录:

  在/etc/ttys文件中,将"secure"标记改为"insecure"标记,使系统在进入单用户模式时会要求root密码。但是这样以来也为恢复root密码制造了障碍——安全和易用再次形成了矛盾的两个对立面。

  console none unknown off insecure

  (4)使用 tcp wrapper (/etc/hosts.allow)允许/拒绝访问特定的TCP服务。

  tcp_wrappers 可以在访问者要求服务前先检查/etc/hosts.allow 文件中设定的规则,符合放行规则的才会去启动服务程序,可以达到有条件开放系统服务的目的。

  在/etc/host.allow文件中,注释掉"ALL:ALL:allow",去掉其他无关服务访问,增加如下内容:

   sshd: localhost : allow
   sshd: friendlycomputer : allow
   sshd: all : deny

  另外需要注意的是:

  注意规则的先后顺序,因为tcp_wrappers的规则有first match 的特性,最好把放行的规则写在前面,然后在后面加一条全部禁止的规则;

  为避免 DNS 欺骗,规则尽量使用IP表示;

   FreeBSD缺省的/etc/hosts.allow中第一条规则是 ALL : ALL : allow,自己的规则一定要放在他前面才有效。

  (5)使用 allowuser/allowgroup SSH配置选项以允许特定的用户和组使用 SSH连接。

  (6)限制登录的用户、组以及登录地方,修改/etc/login.access。

  (7)利用login.conf对用户的登录环境和资源许可进行设置。

   FreeBSD系统使用/etc/login.conf中描述的数据将用户按照登录环境、强制性的资源限制以及记帐管理登分为不同的登录类别,每个用户的登录类别记录在/etc/master.passwd中该用户的设置中。

  每次修改login.conf后,都要进行更新登录数据库的操作:

  #cap_mkdb /etc/login.conf

  由于登录类别保存在master.passwd文件中,通常在使用adduser添加用户的时候设置用户的登录类别,如果要进行修改,必须使用vipw来修改/etc/master.passwd文件中的5个域。


  2.登录环境


  (1)编辑/etc/motd文件,阻止计算机泄露系统信息

  (2)删除版权信息
  #touch /etc/COPYRIGHT

  (3)防止系统自动加入信息,修改/etc/rc.conf
  update_motd="NO"

  (4)修改登录提示,编辑/etc/gettytab,找到default:小节,他以下面的文字开头:
  :cb:ce:ck:lc

  小心的修改r:之间的文字来适应自己的需要。

  3.crontab的问题

  建议 www、nobody、bind等用户不能使用crontab,建立/etc/cron/allow文件把需要使用的用户放进去,如:
  #echo root>/var/cron/allow
  #chmod 600 /var/cron/allow

  如果不使用at命令,就关闭这个服务,在/etc/crontab文件中注释掉
  # */5 * * * * root /usr/libexec/atrun

  4.保护文件系统

  (1)锁住文件系统

  A.修改/etc/fstab文件,设置系统启动时自动挂接的文件系统,使用nosuid参数挂接/usr 或 /(目的是/sbin)文件系统,尤其是一般用户可以写入的文件系统,应单独划分分区:

  /home or /usr/home
  /tmp or /var/tmp

  /etc/fstab文件内容:
  /dev/sd0s1e /var/tmp ufs rw,nosuid 2 2

  B.搜寻并去除不用的二进制文件的suid位,(尤其是uucp——setgid)
  C.使用chflags设置变量,例如,给日志文件设置sappnd,给系统二进制文件设置schg标志;

  #相关命令:
  #找出你所有的可写入目录,
  #find / -perm -0777 -type d -ls

  找出那些程序是suid 或者sgid的命令:

  #find / -perm -2000 -ls
  #find / -perm -4000 –ls

  (2)文件保护,严格限制系统配置文件权限,只对root用户开放读写权利:

  #chflags schg /bin/*
  #chflags schg /sbin/*

  #chmod 600 /etc/firewall.rules
  #chmod 600 /etc/crontab
  #chmod 600 /etc/newsyslog.conf
  #chmod 600 /etc/rc.sysctl
  #chmod 600 /etc/rc.conf
  #chmod 600 /etc/syslog.conf
  #chmod 600 /etc/sysctl.conf
  #防止一般用户读日志文件
  # chmod 640 /var/log/httpd-access.log

  (3)可以把不是很有用的程序 chmod 000,如uustat,uucico。如果你从来不碰uucp或是PPP和PPPD的话,你绝不会用到他们。如果不用打印机的话,把lpr lprd也chmod 000了吧。

  5.其他相关

  修改计算机相关设置,如BIOS,不允许软盘启动、CDROM启动,即在装载硬盘驱动之前不允许其他媒介启动,设置BIOS密码,保护机器物理安全。

  五、配置 SSH


  修改/etc/ ssh/ ssh_ config文件

  (1)使用protocol 2代替protocol 1, SSH2更加安全,可以防止攻击者通过修改携带的版本banner来劫持(hijacking)启动会话进程并降低到protocol 1。注释掉protocol 2,1 改用下面语句代替:

  protocol 2

  (2)合理设置最大连接数量, 防止DOS攻击

  MaxStartups 5:50:10

  (3)禁止远程root和空密码登录,建议关闭X11forwording

  X11Forwarding no

  (4)强烈建议不使用静态密码,而使用DSA 或RSA KEY,修改如下内容可以关闭使用密码认证:

  PasswordAuthentication no

  (5)可以限制组或光是单个用户访问shell

  AllowGroups wheel
  AllowUsers xundi

  (6)使用TCP wrappers来限制一些访问,修改/etc/hosts.allow文件,注释掉"ALL : ALL : allow",增加如下内容:

   sshd:localhost:allow
   sshd:friendlcomputer:allow
   sshd:all : deny

  #相关命令:
  #chsh -s /sbin/nologin user

  六、总结和补充

  使用最新版本的操作系统;推荐使用STABLE或者最新RELEASE分支。
  修改系统前,首先备份系统。
  修改/etc/inetd.conf和rc.conf关闭可有可无和不必要的服务。
  立即禁用telnet,使用 SSH代替之——Open SSHfreebsd安装时即被包括。
  使用 SSH2协议中内建的sftp服务代替标准的ftp
  建立 SSH公钥防止口令传输。
  使用包过滤软件类如ipfw或者ipfilter限制服务的获取。
  禁止不需要的帐户
  应用组和用户的概念
  设置正确的文件权限
  以chroot环境运行具有潜在危险的程序,例如bind
  使用sudo,非严格root级访问
  限制某些强大命令的访问
  如何检查你的安全性

  /usr/ports/security/nmap 对自己进行端口扫描,以发现异常服务
  /usr/ports/security/whisker 对WEB服务器进行审计,防止潜在破坏
  /usr/ports/security/tripwire-
  /usr/ports/security/snort

  日常操作

  (1)经常查看http://www. freebsd.org/security/index.html的安全公告;
  (2)订阅security bugtraq和 freebsd官方安全邮件列表了解安全动态;
  (3)每天查看系统日志,关于检查系统日志,你可以通过其他工具增加多信息的捕获,如snort可以比较完全的记录信息;
  (4)如果你的硬盘够大,信息处理够快,可以定时使用 netstat -an >> /.../.../netstat.log来记录信息,因为netstat能记录连接信息,所以如有些后门日志不能记录,但netstat却在一定时间里总有连接记录。
  (5)如果你对文件系统有原始的记录,可以定时使用一些系统完整性检查工具进行检验;
  (6)如果你有防火墙,经常查看防火墙信息。
第一部分 综述 第1章 BSD系统的历史和目标 1.1 UNIX系统的历史 1.1.1 UNIX系统的起源 1.1.2 Research小组的UNIX系统 1.1.3 AT&T UNIX System III和System V 1.1.4 伯克利软件发布(BSD) 1.1.5 UNIX无处不在 1.2 BSD和其他系统 1.3 BSD向开放源代码的转变 1.3.1 Networking Release 2 1.3.2 法律诉讼 1.3.3 4.4BSD 1.3.4 4.4BSD-Lite Release 2 1.4 FreeBSD的开发模式 1.5 参考文献 第2章 FreeBSD设计概述 2.1 FreeBSD的功能和内核 2.2 内核结构 2.3 内核服务 2.4 进程管理 2.4.1 信号 2.4.2 进程组和会话 2.5 内存管理 2.5.1 BSD内存管理设计要点 2.5.2 内核中的内存管理 2.6 I/O系统 2.6.1 描述符与I/O 2.6.2 描述符管理 2.6.3 设备 2.6.4 套接口IPC 2.6.5 分散/聚集I/O 2.6.6 多文件系统支持 2.7 设备 2.8 文件系统 2.9 网络文件系统 2.10 终端 2.11 进程间通信 2.12 网络通信 2.13 网络实现 2.14 系统运行 2.15 复习题 2.16 参考文献 第3章 内核服务 3.1 内核结构 3.1.1 系统进程 3.1.2 系统入口 3.1.3 运行时刻的内核结构 3.1.4 内核的入口 3.1.5 从内核返回 3.2 系统调用 3.2.1 调用结果的处理 3.2.2 从系统调用返回 3.3 陷阱和中断 3.3.1 陷阱 3.3.2 I/O设备中断 3.3.3 软件中断 3.4 时钟中断 3.4.1 统计和进程调度 3.4.2 超时 3.5 内存管理服务 3.6 时间服务 3.6.1 真实时间 3.6.2 外部表示 3.6.3 调整时间 3.6.4 时间间隔 3.7 用户、用户组和其他身份标识 3.7.1 主机标识符 3.7.2 进程组和会话 3.8 资源服务 3.8.1 进程优先级 3.8.2 资源利用 3.8.3 资源限制 3.8.4 文件系统配额 3.9 系统运行服务 3.10 复习题 3.11 参考文献 第二部分 进程 第4章 进程管理 4.1 进程管理概述 4.1.1 多程序机制 4.1.2 调度 4.2 进程状态 4.2.1 进程结构 4.2.2 线程结构 4.3 上下文切换 4.3.1 线程状态 4.3.2 底层上下文切换 4.3.3 主动上下文切换 4.3.4 同步 4.3.5 互斥同步 4.3.6 锁管理器的锁 4.3.7 其他同步 4.4 线程调度 4.4.1 4.4BSD的调度程序 4.4.2 线程调度 4.4.3 线程优先级的计算 4.4.4 线程优先级例程 4.4.5 线程运行队列和上下文切换 4.4.6 ULE调度程序 4.5 创建进程 4.6 终止进程 4.7 信号 4.7.1 信号的历史 4.7.2 发送信号 4.7.3 接收信号 4.8 进程组和会话 4.8.1 会话 4.8.2 作业控制 4.9 监管环境 4.9.1 监管环境的语义 4.9.2 监管环境的实现 4.9.3 监管环境的限制 4.10 进程的调试 4.11 复习题 4.12 参考文献 第5章 存储管理 5.1 术语 5.1.1 进程与内存 5.1.2 调页机制 5.1.3 替换算法 5.1.4 工作集模型 5.1.5 交换机制 5.1.6 虚拟内存的优点 5.1.7 虚拟内存的硬件要求 5.2 FreeBSD虚拟内存系统概述 5.3 内核的存储管理 5.3.1 内核映射和子映射 5.3.2 内核地址空间的分配 5.3.3 内核的存储分配程序 5.3.4 内核的区域存储分配程序 5.4 进程独立拥有的资源 5.4.1 FreeBSD的进程虚拟地址空间 5.4.2 缺页处理 5.4.3 映射到对象 5.4.4 对象 5.4.5 对象到页面 5.5 共享存储 5.5.1 mmap模型 5.5.2 共享映射 5.5.3 私有映射 5.5.4 压缩影子链 5.5.5 私有快照 5.6 创建新进程 5.6.1 保留内核资源 5.6.2 复制用户地址空间 5.6.3 不通过复制创建新进程 5.7 执行一个文件 5.8 进程地址空间的操作 5.8.1 改变进程大小 5.8.2 文件映射 5.8.3 改变保护权限 5.9 终止进程 5.10 调页器接口 5.10.1 vnode调页器 5.10.2 设备调页器 5.10.3 物理内存调页器 5.10.4 交换调页器 5.11 调页机制 5.11.1 硬件高速缓存的设计 5.11.2 页面填色 5.12 页面替换 5.12.1 调页参数 5.12.2 pageout守护进程 5.12.3 交换机制 5.12.4 换入进程 5.13 可移植性 5.13.1 pmap模块的作用 5.13.2 初始化和启动 5.13.3 分配和释放映射 5.13.4 改变映射的访问和固定属性 5.13.5 管理页表的使用信息 5.13.6 初始化物理页面 5.13.7 管理内部数据结构 5.14 复习题 5.15 参考文献 第三部分 I/O系统 第6章 I/O系统概述 6.1 从用户到设备的I/O映射 6.1.1 设备驱动程序 6.1.2 I/O队列 6.1.3 中断处理 6.2 字符设备 6.2.1 原始设备和物理I/O 6.2.2 面向字符的设备 6.2.3 字符设备驱动程序的入口点 6.3 磁盘设备 6.3.1 块设备驱动程序的入口点 6.3.2 磁盘I/O请求的排序 6.3.3 磁盘标签 6.4 描述符的管理和服务 6.4.1 打开文件项 6.4.2 管理描述符 6.4.3 异步I/O 6.4.4 文件描述符的上锁机制 6.4.5 描述符上的多路I/O操作 6.4.6 select调用的实现 6.4.7 数据在内核中的转移 6.5 虚拟文件系统的接口 6.5.1 vnode的内容 6.5.2 对vnode的操作 6.5.3 路径名转换 6.5.4 文件系统的导出服务 6.6 与文件系统无关的服务 6.6.1 名字缓存 6.6.2 缓冲区管理 6.6.3 缓冲区管理的实现 6.7 可叠加的文件系统 6.7.1 简单的文件系统层 6.7.2 联合安装的文件系统 6.7.3 其他文件系统 6.8 复习题 6.9 参考文献 第7章 设备 7.1 设备概述 7.1.1 PC的I/O体系结构 7.1.2 FreeBSD海量存储I/O子系统的结构 7.1.3 设备的命名和访问 7.2 GEOM层 7.2.1 术语和拓扑规则 7.2.2 改变拓扑 7.2.3 运行 7.2.4 拓扑的灵活性 7.3 CAM层 7.3.1 SCSI子系统 7.3.2 I/O请求通过CAM子系统的路径 7.4 ATA层 7.5 配置设备 7.5.1 识别设备 7.5.2 自动配置数据结构 7.5.3 资源管理 7.6 复习题 7.7 参考文献 第8章 本地文件系统 8.1 文件系统的分层管理 8.2 inode的结构 8.2.1 inode格式的变化 8.2.2 扩展属性 8.2.3 文件系统的新功能 8.2.4 文件标志 8.2.5 动态的inode 8.2.6 管理inode 8.3 命名 8.3.1 目录 8.3.2 在目录中查找名字 8.3.3 路径名转换 8.3.4 链接 8.4 配额 8.5 文件上锁 8.6 软更新 8.6.1 文件系统中的更新依赖 8.6.2 依赖关系的数据结构 8.6.3 跟踪位映射表的依赖关系 8.6.4 跟踪inode的依赖关系 8.6.5 跟踪直接块的依赖关系 8.6.6 跟踪间接块的依赖关系 8.6.7 跟踪新间接块的依赖关系 8.6.8 跟踪新目录项的依赖关系 8.6.9 跟踪新目录的依赖关系 8.6.10 跟踪删除目录项时的依赖关系 8.6.11 截短文件 8.6.12 回收文件和目录的inode节点 8.6.13 跟踪目录项重命名时的依赖关系 8.6.14 跟踪删除文件时的依赖关系 8.6.15 fsync对软更新的要求 8.6.16 删除文件时对软更新的要求 8.6.17 fsck对软更新的要求 8.6.18 软更新的性能 8.7 文件系统的快照 8.7.1 创建文件系统快照 8.7.2 维护文件系统快照 8.7.3 大型文件系统的快照 8.7.4 快照性能 8.7.5 后台fsck 8.7.6 用户可见的快照 8.7.7 动态的转储 8.8 本地文件库 8.8.1 文件库概述 8.8.2 用户的文件I/O 8.9 伯克利快速文件系统 8.9.1 伯克利快速文件系统的组成 8.9.2 引导块 8.9.3 优化存储空间利用率 8.9.4 读写文件 8.9.5 布局策略 8.9.6 分配机制 8.9.7 将块组成簇 8.9.8 基于扩展的分配 8.10 复习题 8.11 参考文献 第9章 网络文件系统 9.1 历史和概述 9.2 NFS的结构和操作 9.2.1 NFS协议 9.2.2 FreeBSD的NFS实现 9.2.3 客户机/服务器的交互操作 9.2.4 RPC的传输问题 9.2.5 安全问题 9.3 提高性能的技术 9.3.1 租约 9.3.2 崩溃恢复 9.4 复习题 9.5 参考文献 第10章 终端处理 10.1 终端处理模式 10.2 行规程 10.3 用户接口 10.4 tty结构 10.5 进程组、会话和终端控制 10.6 C-list 10.7 RS-232和调制解调器控制 10.8 终端操作 10.8.1 打开终端 10.8.2 输出到行规程 10.8.3 终端的输出 10.8.4 终端的输入 10.8.5 ioctl例程 10.8.6 调制解调器转换 10.8.7 关闭终端设备 10.9 其他行规程 10.10 复习题 10.11 参考文献 第四部分 进程间通信 第11章 进程间通信 11.1 进程间通信的模型 11.2 实现的结构和概述 11.3 内存管理 11.3.1 mbuf 11.3.2 存储管理算法 11.3.3 mbuf工具例程 11.4 数据结构 11.4.1 通信域 11.4.2 套接口 11.4.3 套接口地址 11.4.4 锁 11.5 建立连接 11.6 传送数据 11.6.1 发送数据 11.6.2 接收数据 11.7 关闭套接口 11.8 本地进程间通信 11.8.1 信号量 11.8.2 消息队列 11.8.3 共享内存 11.9 复习题 11.10 参考文献 第12章 网络通信 12.1 内部结构 12.1.1 数据流 12.1.2 通信协议 12.1.3 网络接口 12.2 套接口到协议的接口 12.2.1 协议的用户请求例程 12.2.2 协议的控制输出例程 12.3 协议到协议的接口 12.3.1 pr_output 12.3.2 pr_input 12.3.3 pr_ctlinput 12.4 协议和网络的接口 12.4.1 发送数据包 12.4.2 接收数据包 12.5 路由选择 12.5.1 内核路由选择表 12.5.2 路由选择查找 12.5.3 路由选择重定向 12.5.4 路由选择表接口 12.5.5 用户级的路由选择策略 12.5.6 用户级路由选择接口:路由选择套接口 12.6 缓冲和拥塞控制 12.6.1 协议缓冲策略 12.6.2 队列限制 12.7 原始套接口 12.7.1 控制块 12.7.2 输入处理 12.7.3 输出处理 12.8 网络子系统的其他主题 12.8.1 带外数据 12.8.2 地址解析协议 12.9 复习题 12.10 参考文献 第13章 网络协议 13.1 IPv4网络协议 13.1.1 IPv4地址 13.1.2 广播地址 13.1.3 组播 13.1.4 端口与关联 13.1.5 协议控制块 13.2 UDP协议 13.2.1 初始化 13.2.2 输出 13.2.3 输入 13.2.4 控制操作 13.3 Internet协议(IP) 13.3.1 输出 13.3.2 输入 13.3.3 转发 13.4 TCP协议 13.4.1 TCP连接状态 13.4.2 序号变量 13.5 TCP算法 13.5.1 定时器 13.5.2 往返时间的估计 13.5.3 建立连接 13.5.4 SYN缓存 13.5.5 关闭连接 13.6 TCP输入处理 13.7 TCP输出处理 13.7.1 发送数据 13.7.2 避免糊涂窗口综合症 13.7.3 避免小数据包 13.7.4 确认延迟和窗口更新 13.7.5 重发状态 13.7.6 慢启动 13.7.7 源拥塞的处理 13.7.8 缓冲与窗口大小分配 13.7.9 使用慢启动避免拥塞 13.7.10 快速重发 13.8 ICMP协议 13.9 IPv6 13.9.1 IPv6地址 13.9.2 IPv6数据包格式 13.9.3 套接口API的调整 13.9.4 自动配置 13.10 安全 13.10.1 IPSec概述 13.10.2 安全协议 13.10.3 密钥管理 13.10.4 IPSec实现 13.10.5 密码子系统 13.11 复习题 13.12 参考文献 第五部分 系统运行 第14章 启动和关机 14.1 概述 14.2 引导 14.3 初始化内核 14.4 初始化内核模块 14.4.1 基本服务 14.4.2 初始化内核线程 14.4.3 初始化设备模块 14.4.4 内核的可加载模块 14.4.5 启动进程间通信 14.4.6 启动内核线程 14.5 用户级初始化 14.5.1 /sbin/init 14.5.2 系统的启动脚本 14.5.3 /usr/libexec/getty 14.5.4 /usr/bin/login 14.6 系统运行 14.6.1 内核的配置 14.6.2 系统关机与自动重启 14.6.3 系统调试 14.6.4 同内核传递信息 14.7 复习题 14.8 参考文献 术语表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值