FreeBSD学习指南


    FreeBSD 的版本命名规则
    A-主要版本编号
    B-次要版本编号
    C-修正版本编号
    TAG-名称标签,如 RELEASE、STABLE、CURRENT
    install.iso 安装时用这一片即可!mini.iso 也是可以用来安装,但里面没有一些常用的 Package ,所以档案比较小。
    硬盘分割表的概念
    IDE 硬盘在 FreeBSD 中的代号分别是 ad0 、ad1 ,在 FreeBSD 可将主要扇区分割成许多逻辑扇区 logical slice ,a 在传统上是指根目录,b 是指 swap 虚拟内存,c 指整个主要扇区,d 指整个硬盘, efgh 可以任意使用!
    改变 inode 的设定
    按 N 并输入参数 newfs -i 1024 -b 4096 -f 1024
    选安装套件,除了最后二项 local 和 XFree86 外,全部都选。
    在 Configuration Menu 所做的设定都会存放在 /etc/rc.conf 中,可以修改这个档案!
    安装完 FreeBSD 要安装的软件 vim-lite less gnuls pkg_tree elm+ME bash2 unzip nmap wget ncftp3 pstree
    FreeBSD 的目录结构
    
/etc/defaults 放置预设的系统设定文件。
/etc/mtree 目录权限的设定文件。
/etc/periodic 每天、每周、每月定时要执行的设定。
/usr/ports FreeBSD 移植软件的原始程序目录,我们可以从这个目录中找到自己想要的软件来快速安装。
/usr/src 放置 BSD 或其它软件原始程序代码的目录。
/var/account 使用者执行过的指令记录文件。
/var/db 重要的系统数据库。
/var/quotas 档案系统使用容量限制的记录。

     
    修改、编译核心
    /usr/src/sys/i386/conf 中有二个档案,一个是 GENERIC ,是安装时用的一般核心,一个是 LINT 则是完整的核心及说明。
    编译新的核心
    options QUOTA
    pseudo-device snp 可以监看使用者
    #NAT
    一、options IPFIREWALL
    #支援 NAT
    二、options IPDIVERT
    #下面这一行是预设允许所有的封包通过,如果没有这一行,就必须在 /etc/rc.firewall 中设定封包的规则
    三、options IPFIREWALL_DEFAULT_TO_ACCEPT
    #下面一行是让您可以在 ipfw 中设定要记录哪些封包,如果没有这一行,这算设定了要留下记录也不会有作用
    四、options IPFIREWALL_VERBOSE
    #防火墙
    除了 NAT 的一、三、四外
    #这一行是限制每一条规则所要记录的封包数量,因为同样的规则可能有许多的记录,加上这一条可以使同样的记录重复数减少,以避免记录文件爆。
    options IPFIREWALL_VERBOSE_LIMIT=10
    #下面这一行是用来支持封包转向,当您要使用 fwd 动作时必须要有这一项设定
    options IPFIREWALL_FORWARD
    #如果要使用 pipe 来限制频宽,必须加入下列选项以支持 dummynet
    options DUMMYNET
    编译核心第一种方法
    config GENERIC
    cd ../../compile/GENERIC/
    make depend;make;make install
    第二种方法
    在 FreeBSD 4.2-STABLE 之后可以用的新的方法
    cd /usr/src
    make buildkernel KERNCONF=GENERIC
    make installkernel KERNCONF=GENERIC
    cd /;rm -rf /usr/src/sys/compile/GENERIC
    sync;sync;sync;reboot
    新的核心有问题时
    当编译完核心重新开机,无法进入 FreeBSD 时,要在开机时看到倒数计时的时候,按 Enter 以外的键,会出现 boot:,这时候就打 unload 来将已加载的数据移除,再打 /kernel.old 以使用旧的核心。万一连旧的核心也不能开机,就要使用安装时的核心,/kernel.GENERIC,如果您想删掉坏的核心,由于 kernel 文件有特殊的档案属性,必须先下指令修改属性才能删除。
    chflags noschg /kernel
     
    建立友善的使用者接口
    编辑 /etc/csh.cshrc 或 /.cshrc 使用 tcsh 或 csh shell 时
    加入 alias ls gnuls --color -F
    如果想要新增使用时都能加入,则要修改 /usr/share/skel/dot.cshrc
    想改 PATH 及一些设定也是在 /usr/share/skel 下的一些档案修改
    常见的环境变量
    EDITOR:设定文书编辑器
    PAGER:设定分页程序 more 或 less
    支持中文的环境,只支持 tcsh csh
    编辑 /etc/csh.login
    setenv ENABLE_STARTUP_LOCALE zh_TW.Big5
    # 使用远程登入时才能打出中文
    setenv LC_CTYPE is_IS.ISO_8859-1
    # Console 下用才能打出中文
    setenv LANG zh_TW.Big5
    如果是 bash 要改用
    export ENABLE_STARTUP_LOCALE='zh_TW.Big5'
    export LC_CTYPE='is_IS.ISO_8859-1'
    export LANG='zh_TW.Big5'
    取消登入后,会自动秀出的一段文字 修改 /etc/motd Message Of The Day
    如果不希望 motd 内容出现 FreeBSD 的版本信息,可以在 /etc/rc.conf 中加入
    update_motd="YES"
    FreeBSD 的账号管理
    adduser 新增使用者
    pw groupadd newgroup 新增一个群组
    pw groupshow newgroup 显示成果
    vipw
    FreeBSD 使用 shadow passowrd 的方式来保护密码文件,只有 root 才可以读取编码过的密码文件 /etc/master.passwd ,但是这并不是系统用来验证的档案,为了加快速度,FreeBSD 将该文件做成数据库 /etc/spwd.db 及 /etc/pw.db ,因此修改完 master.passwd 后要下指令 pwd_mkdb 来将 master.passwd 做成数据库,但使用 vipw 就会自动完成这项工作!
     
    rmuser 删除使用者
    FreeBSD 磁盘配额
    一、在核心设定中加入 options QUOTA 这一行,并重新编译核心。
    二、在 /etc/rc.conf 加入 enable_quotas="YES"
    三、在 /etc/fstab 中加入要启动磁盘限制的分割区中加入参数 userquota
            Options 下 rw 的后面加入 rw,userquota
    好了之后重新开机,再下 edquota -u username 来限制
    在 4.5-RELEASE 中,开机内定会检查所有使用者的 quota ,如果不要检查,就在 /etc/rc.conf 中加入 check_quotas="NO"。
    FreeBSD 网络相关指令
    ftp -a 以匿名者自动登入
    sockstat 查看主机 internet 或 domain socket 。您可以用来查询有谁连到您的机器中,由哪一个网络服务接收,该网络服务的 PID 是多少,还可以查询本机开放了哪些 Port ,提供了哪些服务。
     /etc 下的档案介绍
    csh.cshrc 这是 csh tcsh 用的内定 .cshrc 档案,也就是进入该 Shell 时会加载的设定。
    csh.login 这是 csh tcsh 用的内定 .login 档案,也就是进入该 Shell 时会加载的设定。
    defaults/make.conf 通常会复制一份到 /etc 下,用 port 安装软件时,会参考这个档案,把里面的 FTP 站台改成距离国内比较近的。
    login.access 用来设定登入系统使用者的权限,我们可以在这里设定是否允许使用者从 console 登入、从不同的区域登入的权限等。
    login.conf 这个档案用来控制不同账号可以使用的系统资源,它会依照使用者在密码文件中的 login class 来寻找相对的 class 设定,如果没有分类则使用 default 的默认值。修改完该档后,要执行 cap_mkdb /etc/login.conf 重建系统数据库。
    newsyslog.conf 用来定期检查 /var/log/ 的档案,设定当 log 到一定大小或是定期的将旧的档案压缩备份,并删除太老旧的档案。
    语法:logfilename [owner:group] mode count size when [ZB] [/pid_file] [sig_num]
     
    
logfilename log 文件名称
[owner:group] log 档拥有人:群组
mode 该 log 文件的权限[档案属性]
count 最多计算到多少,例如 cron 是 3 ,表示有 4 个压缩档,从 cron.0.gz 到 cron.3.gz
size 档案最大到多少即压缩备份,以 KB 计。
when 什么时候做备份,请 man newsyslog 来看详细说明。以 @ 为首代表用 ISO 8601 结构的时间格式。以 $ 为首代表使用每天、每周、每月。
    $D0 每天半夜十二点
    
    $D23 每天 23:00 时
    
    $W0D23 每周日 23:00
    
    $W5D16 每周五 16:00
    
    $MLD0 每月最一天半夜十二点
    
    $M5D6 每月第五天 6:00
    
[ZB] Z 表示要将该档以 gzip 压缩,B 代表该档是 binary 档。
[/pid_file] pid 文件的绝对路径
[sig_num] 要送给该 daemon 程的 signal number

    FreeBSD 的软件安装
    
    一、packages 安装
           pkg_add -v filename.tgz 扩展名是 tgz
           所有安装过的软件都会出现在 /var/db/pkg 的目录中。
           pkg_delete filename 删除软件
           pkg_info filename.tgz 查看这个软件的信息。
           pkg_info 查看系统中所有已安装软件的信息。
           pkg_tree 可以让我了解每一套软件之间的关系,不过要先安装!
           cd /usr/ports/sysutils/pkg_tree
           make install clean
           pkg_tree | more 来查看各软件之间的关系。
          用 packages 安装的软件,不能马上执行,要马上能执行要先执行 rehash 或注销后再重新登入即可执行。
    二、ports
           把在 A 系统上面可以正常运作的程序,修正成 B 系统上也能正常执行的工作,称为 Port。
           抓 port.tar.gz 档案回来,放在 /usr 下解压缩
          要安装哪一种软件就切换到它分类的目录中,如要安装 proftpd ,目录就在 /usr/ports/ftp/profptd 中,执行 make install 即可,它除了安装 proftpd 外,还会把缺的档案也一起抓回来安装,安装完后可执行 make clean 把安装编译过程中产生的一个档案清除。
    寻找需要安装的 Port
    在 /usr/ports 使用 make search key="ncftp" | less
    反安装软件,只要在该软件的目录中执行 make deinstall 即可。
    一些不常用的 make 方式
    make fetch 抓回所需的原始档
    make fetch-list 显示安装所需的档案
    make all install 抓回原始档、编译且安装
    make reinstall 若先前发生意外中断,重新尝试安装。
    如果安装完新的软件之后,如果使用的 Shell 是 csh 或 tcsh ,我们可能必须执行 rehash 来重建 hash table ,才能执行安装好的软件。
    FreeBSD 安装 Mysql、PHP、Apache
    一、安装 Mysql 用 Source Code 安装
    在 /etc/group 加入 mysql:*:100:
    执行 vipw 加入一行
    mysql:*:100:100::0:0:Mysql User:/usr/local/mysql:/sbin/nologin
    tar -xvzf mysql-3.23.52.tar.gz
    cd mysql-3.23.52
    ./configure --prefix=/usr/local/mysql --with-charset=big5 --with-low-memory --with-named-thread-libs=-lc_r
    make;make install
    script/mysql_install_db
    chown -R mysql:msqyl /usr/local/mysql
    cd /usr/local/mysql/share/mysql
    ./mysql.server.start
    /usr/local/mysql/bin/mysqladmin -u root -password 'xxxx';
    grant all privileges on dbname.* to username@localhost IDENTIFIED BY 'password';
    grant all privileges on *.* to username@localhost IDENTIFIED BY 'password';
    flush privileges;
    在 /etc/rc.local 加入一行
    /usr/local/mysql/share/mysql/mysql.server start
    备分数据库
    /usr/local/mysql/bin/mysqldump -u root -p dbname > dbname.sql        备份
    /usr/local/mysql/bin/mysql -u root -p dbname < dbname.sql 还原 之前可能要先把数据库建好
    更改使用者密码
    /usr/local/mysql/bin/mysqladmin -u root -p password newpassword
    二、安装 PHP、Apache
    apache_1.3.27.tar.gz
    mod_fastcgi_2.2.12.tar.gz
    php-4.2.3.tar.gz
    gd-1.84.tar.gz
    zlib-1.1.4.tar.gz
    t1lib-1.3.1.tgz
    freetype2-2.0.6.tgz
    jpeg-6b_1.tgz
    png-1.2.1.tgz
    先解压缩 apache 并做一次 Apache 的组态
    tar -xvzf apache-1.3.27.tar.gz
    ./configure --prefix=/usr/local/apache
    cd ..
    安装 PHP 之前先安装 GD 及其所需档案
    tar -xvzf zlib-1.1.4.tar.gz
    cd zlib-1.1.4
    make all install
    cd ..
    pkg_add -v jpeg-6b_1.tgz
    pkg_add -v png-1.2.1.tgz
    pkg_add -v t1lib-1,3,1,tgz
    pkg_add -v freetype2-2.0.6.tgz
    tar -xvzf gd-1.8.4.tar.gz
    cd gd-1.8.4
    make install
    cd ..
    安装 PHP
    tar -xvzf php-4.2.3.tar.gz
    cd php-4.2.3
    ./configure --with-mysql=/usr/local/mysql --with-apache=../apache-1.3.27 --enable-track-vars --with-gd=/usr/local --enable-gd-native-ttf --with-t1lib --with-jpeg-dir=/usr/local --with-png-dir --with-freetype-dir --with-zlib-dir
    make;make install
    cp php.ini-dist /usr/local/lib/php.ini
    cd ..
    安装 Apache
    cd apache_1.3.27/src/modules
    tar -xvzf ../../../mod_fastcgi-2.2.12.tar.gz
    mv mod_fastcgi-2.2.12 fastcgi
    cd ../../
    ./configure --prefix=/usr/local/apache --enable-shared=max --activate-module=src/modules/php4/libphp4.a --activate-module=src/modules/fastcgi/libfastcgi.a --enable-suexec --suexec-caller=nobody --suexec-docroot=/usr/local/apache/htdocs --suexec-userdir=www --suexec-logfile=/usr/local/apache/logs/suexec_log --suexec-uidmin=10 --suexec-gidmin=10
    make;make install
    加入对 PHP4 的支持
    在 /usr/local/apache/conf/httpd.conf 加入二行
    AddType application/x-httpd-php .php .phtml .php3
    AddType application/x-httpd-php-source .phps
    让 Apache 在开机时能够启动
    在 /etc/rc.local 加入 /usr/local/apache/bin/apachectl start
    在 /etc/newsyslog.conf 加入二行以压缩备份 Apache Log 档
    /var/log/apache_access_log    644    7    *    $W0D1    Z
    /var/log/apache_error_log    644    7    *    $W0D2    Z
    安装 ProFtpd
    Make sure you have the following lines in your PAM configuration file
    so that ProFTPd's PAM module can authenticate users correctly.
    ftpd auth    required    pam_unix.so         try_first_pass
    ftpd account required    pam_unix.so         try_first_pass
    ftpd session required    pam_permit.so
    ###
    ===>   Generating temporary packing list
    ===>   Compressing manual pages for proftpd-1.2.6
    ===>   Registering installation for proftpd-1.2.6
    ===>  SECURITY NOTE:
          This port has installed the following startup scripts which may cause
          network services to be started at boot time.
    /usr/local/etc/rc.d/proftpd.sh.sample
    安装 SNMP
    If you want to invoke snmpd from startup, put these lines into
         /etc/rc.conf.
            net_snmpd_enable="YES"
            net_snmpd_flags=""
    **** You can specify make variables as:
            NET_SNMP_SYS_CONTACT="kuriyama@FreeBSD.org"
            NET_SNMP_SYS_LOCATION="Tokyo, Japan"
            DEFAULT_SNMP_VERSION=3
            NET_SNMP_LOGFILE=/var/log/snmpd.log
            NET_SNMP_PERSISTENTDIR=/var/net-snmp
         to define default values (or overwriting defaults).  At least
         setting first two variables, you will not be prompted during
         configuration process.  Or you can set
            BATCH="yes"
         to make to avoid interactive configuration.===>   Compressing manual pages for net-snmp-5.0.6
    ===>   Running ldconfig
    /sbin/ldconfig -m /usr/local/lib
    ===>   Registering installation for net-snmp-5.0.6
    ===>  SECURITY NOTE:
          This port has installed the following startup scripts which may cause
          network services to be started at boot time.
    /usr/local/etc/rc.d/snmpd.sh
    安装 NAT
    修改 /etc/rc.conf
    一块网络卡 ifconfig_rl0_alias0="inet 192.168.1.1  netmask 255.255.255.0"
    二块网络卡 ifconfig_rl1="inet 192.168.1.1  netmask 255.255.255.0"
    加入下列五行
    gateway_enable="YES"
    firewall_enable="YES"
    firewall_type="OPEN"
    natd_interface="rl0"
    natd_enable="YES"
    FreeBSD 指令集
    cp -p 档案拷贝过去还是维持原来的权限
    避免 /bin 及 /sbin 等重要执行档遭到修改,可以为这些档案设定禁止修改的 schg flag
    chflags schg /bin/*
    chflags schg /sbin/*
    设定了 schg ,还要将 Kernel Security Level 调高到 1 以上,这样连 root 都不可以移除 flags 。
    Kernel Security Level
    FreeBSD 中有所谓的 Security Level ,它掌控了系统核心的行为运作。只有 root 可以使用指令提高 Security Level ,但不能降低它。如果要降低它,必须在 rc.conf 中设定,并重新开机。
    Security Level 代表的意义:
    -1:永远不安全模式。这是默认值。如果为 -1 ,它将永远以 Level 0 的模式执行。
    0 :不安全模式。使用者或 root 可以使用 chflags 来移除「不可更动」及「只能附加」的 flags。所有的装置只能依其权限来存取。
    1:安全模式。不可以移除「不可更动」及「只能附加」的 flags 。不可以手动加载或移除 LKM ,使用 /dev/mem /dev/kmem 只能只读,且不能 newfs 已挂上的档案系统。
    2:高度安全模式。除了和安全模式同样的限制外,不管硬盘是否挂上,都不可以 newfs。另外,Kernel Time 的改变限制在一秒内,如果超过,会记录 "Time adjust-ment clamped to +1 second".
    3:网络安全模式。除了和安全模式同样的限制外,还有 IP 封包过滤的规则,而且不可以调整 dummynet 的设定。
    可以利用 sysctl 来显示或设定 Security Level
    sysctl kern.securelevel
     将 Security Level 设为 1
    sysctl -w kernel.securelevel=1
    当我们将 Security Level 设为 1 以上时,我们会发现没有办法安装新的 Kernel ,因为不能移除 schg flag ,也没有办法使用 big5con 、 X Window 等软件。如果 FreeBSD 只作 Server ,就可以把 Security Level 的值调高一点。
    在开机时设定 Security Level ,可以在 /etc/rc.conf 中加入以下二行设定
    #是否启动 Security Level
    kern_securelevel_enable="YES"
    # Level 从 -1 到 3
    kern_securelevel="1"
    只能用 root 使用指令提高 Security Level,但不能降低,如果要降低,必须在 /etc/rc.conf 中设定,重新开机才会生效。 
    限制使用者邮件容量就是将使用者的邮件从 /var/mail 中搬移到使用者的目录中,再对使用者目录做磁盘配额的限制。
    cd /var/mail
    mkdir /home/username/mail
    mv /var/mail/username /home/username/mail
    ln -s /home/username/mail username
    限制 crontab 和 at 的使用
    在 /var/cron 目录中编辑 allow 的文字文件,里面的人才可以使用 cron
                                           deny 的文字文件,里面的人不可以使用 cron
    at 也是一样的设定。
    停止 Sendmail 在 /etc/rc.conf 中加入 sendmail_enable="NO"
    使用 sysctl 来设定当外部机器要使用我们没有提供的服务时运记录下来,例如有人尝试扫我们的 Port ,或者我们没有开放 telnet ,在 /var/log/message 中便会记录下来。
    #sysctl -w net.inet.tcp.log_in_vain=1
    #sysctl -w net.inet.udp.log_in_vain=1
    这二行加入 /etc/rc.local 中 或是在 /etc/sysctl.conf 加入下面二行
     net.inet.tcp.log_in_vain=1
    net.inet.udp.log_in_vain=1
    在 /etc/rc.conf 加入一行停止 inted 服务
    inetd_enable="NO"
    为了防止一些 DoS (Deny of Service) ,建议最好把 ICMP 重导向 ( redirect ) 的封包丢弃,可以在 /etc/rc.conf 中加入以下的设定:
    # YES 表示丢弃 ICMP REDIRECT 封包
    icmp_drop_redirect="YES"
    # YES 表示将丢弃的封包记录下来
    icmp_log_redirect="YES
     
    sshd 预设并未将使用者登入的数据记录下来,可以利用修改 /etc/syslog.conf 来记录,找到 seccrity 的项目,将它修改成下面这样:
    security.*;auth.info    /var/log/security
    如此一来,当使用者利用 ssh 登入时,便会记录在 /var/log/security 中。
    列出目前系统提供的服务
    netstat -a | grep LISTEN
    sysctl -a 可以列出目前 Kernel 状态值的设定
    列出空间使用最多的前 5 位
    du -s /home/* | sort -m | head -5
    FreeBSD 有一种特别的权限控制,称之为「flags」,这些 flags 的设定可以让我们用来保护特殊的档案。可以用 ls -ol 来加以观看。
    
nodump 档案不可以被 dump,只有档案拥有者和 root 可以设定
sappnd 档案只可以往后附加,不能删除,只有 root 可以设定
schg 档案不可以被更动,连 root 都不能删除,只有 root 可以设定
uappnd 档案只可以往后附加,不能删除,档案拥有者和 root 才可以设定
uchg 档案不可以被更动,档案拥有者和 root 才可以设定

    
    如果我们要解除所设定的 flags ,只要在上述的 flag 之前加上 no 即可,例如 nouchg 。
    用法:chflags flags file
    flags 的设定只有在 Kernel Security Level 为 -1 或 0 时才可以被更改。如果 Security Level 为 1 或 2 时就不能更动 flags 了。
    FreeBSD 下的 Samba Server
    tar -xvzf samba-2.2.7.tar.gz
    cd samba-2.2.7/source
    docs 中有许多相当有用的文件,值得一读
    ./configure
    make;make install
    启动 Samba
    以 Standalone 方式
    在 /etc/rc.local 中加入
    smbd -D -d1
    nmbd -D -d1 -G FreeBSD -n SambaServer
    -D 以 Daemon 方式运行
    -d1 除错记录型别
    -G 显示在 Windows 之网络芳邻中的 Workgroup 名称
    -n Samab Server 在 Workgroup 之内计算机名称。
    以 Inetd 方式启动
    修改 /etc/services ,检查是否有底下二行存在
    netbios-ssn    139/tcp
    netbios-ns    137/udp
    /etc/inetd.conf 是否有以下二行存在
    netbios-ssn stream tcp  nowait          root    /usr/local/samba/bin/smbd       smbd
    netbios-ns dgram udp    wait            root    /usr/local/samba/bin/nmbd       nmbd
    设定档设置在 /usr/local/samba/lib/smb.conf
    Samba 的使用者账号与密码文件位于 /usr/local/samba/private 之中,档名为 smbpasswd ,如果这个档案不存在,Samba Server 将无法允许任何人登入。建立 smbpasswd 的方法有三种:
    一、直接采用 SWAT 之 PASSWORD 选单,选取 Add New User 来建立。
    二、使用 mksmbpasswd.sh 来转换 /etc/passwd 或是账号清单
    这种方法直接把 Linux / FreeBSD 的账号密码数据文件转换成 Samba 的档案密码数据文件格式,这方法可以很快地把所有在工作站上有账号的使用者都同时在 Samba Server 使用账号开好。但是您仍旧必须要用 SWAT 的 PASSWORD 选单来更改密码。
    mksmbpasswd.sh < /etc/passwd > /usr/local/samba/private/smbpasswd
    采用 mksmbpasswd.sh 有一个缺点,就是会把 /etc/passwd 中所有的账号,无论是有效或是无效的都转换,所以建置出来的 smbpasswd 会很复杂。
    三、
    在 Windows NT 中,我们可以设定使用者名称及密码。如果在这里设定为 share,就是只使用密码;而设为 user ,则是要输入使用者名称及密码。如果我们设为 user ,Client 端在浏览网络芳邻时,Windows 会自动输入使用者名称为登入 Windows 时所用的名称,我们必须在 Samba 中加入相对的使用者密码。
    For Traditional Chiese User
    client code page=950
    ;coding system=cap
    valid chars=0xb9
     
     
     
     
    FreeBSD 下的 DHCP Server
    tar -xvzf dhcp-3.0pl1.tar.gz
    cd dhcp-3.0pl1
    ./configure
    make all;make install
    执行 /usr/sbin/dhcpd
    设定档在 /etc/dhcpd.conf
    内容:
    # dhcpd.conf
    #
    # Sample configuration file for ISC dhcpd
    #
     
    ddns-update-style ad-hoc;
    # option definitions common to all supported networks...
    option domain-name "tces.ilc.edu.tw";
    option domain-name-servers 140.111.152.3, 140.111.66.1, 140.111.66.10;
     
    # ddns-update-style;
    default-lease-time 600;
    max-lease-time 7200;
     
    # If this DHCP server is the official DHCP server for the local
    # network, the authoritative directive should be uncommented.
    #authoritative;
     
    # Use this to send dhcp log messages to a different log file (you also
    # have to hack syslog.conf to complete the redirection).
    log-facility local7;
     
    # No service will be given on this subnet, but declaring it helps the
    # DHCP server to understand the network topology.
     
    subnet 140.111.152.0 netmask 255.255.255.0 {
      range 140.111.152.50 140.111.152.100;
      option domain-name-servers 140.111.152.3, 140.111.66.1, 140.111.66.10;
      option domain-name "tces.ilc.edu.tw";
      option routers 140.111.152.254;
      option broadcast-address 140.111.152.255;
      default-lease-time 600;
      max-lease-time 7200;
    }
     
    # Hosts which require special configuration options can be listed in
    # host statements.   If no address is specified, the address will be
    # allocated dynamically (if possible), but the host-specific information
    # will still come from the host declaration.
     
    host passacaglia {
      hardware ethernet 0:0:c0:5d:bd:95;
      filename "vmunix.passacaglia";
      server-name "toccata.fugue.com";
    }
     
    # Fixed IP addresses can also be specified for hosts.   These addresses
    # should not also be listed as being available for dynamic assignment.
    # Hosts for which fixed IP addresses have been specified can boot using
    # BOOTP or DHCP.   Hosts for which no fixed address is specified can only
    # be booted with DHCP, unless there is an address range on the subnet
    # to which a BOOTP client is connected which has the dynamic-bootp flag
    # set.
    host fantasia {
      hardware ethernet 08:00:07:26:c0:a5;
      fixed-address fantasia.fugue.com;
    }
    touch /var/db/dhcpd.leases
    用 DHCP Server 分配 IP ,但要固定某些机器的 IP
    在那台机器上 Ping DHCP Server,在 DHCP Server 执行 arp 查出那一台机器的 Mac Address ,在 /etc/dhcpd.conf 中设定
     host fantasia {
      hardware ethernet 08:00:07:26:c0:a5;
      fixed-address fantasia.fugue.com;
    }