FreeBSD_11-系統管理——{Part_2-核心}

1、Managing Services in FreeBSDhtml

  • Service restart will only work if it is set to YES in /etc/rc.conf. To start, stop or restart a service regardless of the settings in /etc/rc.conf, these commands should be prefixed with 「one」
  • service sshd onerestart
  • 配置文件優先級:/etc/rc.conf.local > /etc/rc.conf > /etc/default/rc.conf
  • 通用腳本(sh)函數定義文件:/etc/rc.subr、/etc/networksubr
  • 系統腳本目錄:/etc/rc.d/;用戶腳本目錄:/usr/local/etc/rc.d/
  • /* 以下爲啓動腳本的基本格式 */
    #!/bin/sh # PROVIDE: xxx #將要啓動的程序名稱 # REQUIRE: xxx #在指定進程以後啓動——依賴 # BEFORE: xxx #在指定進程以前啓動——被依賴 # KEYWORD: shutdown #固定格式,表示在關機以前執行正常程序終止流程 . /etc/rc.subr #固定格式,載入系統預定義的規則(函數等) name=xxx #指定該腳本的名稱 rcvar=${name}_enable #指定用於 /etc 下 rc.conf 或 rc.conf.local 的開機啓動標誌(語法) command="/usr/sbin/xxxx" #指定可執行文件的路徑,xxxx 的名稱與 PROVIDE 保持一致 pidfile="/var/run/xxxx.pid" #指定 pid 文件,提升操做效率 # 如下兩行爲固定格式 load_rc_config $name #使 rc.subr 載入 rc.conf 中的參數 run_rc_command "$1" #使 rc.subr 載入當前腳本中定義的參數
  • (/etc/rc.conf)ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx/xx":alias# 的編號必須從 0 開始,且必須連續;針對每一個不一樣的網絡(段),只能將首個 IP 的 netmask 配置成真實的掩碼,其他均須設置爲 0xffffffff(255.255.255.255 或 .../32)
  • ifconfig_fxp0="inet 10.1.1.1/24" #物理 NIC ,首 IP ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 0xffffffff" ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255" ifconfig_fxp0_alias2="inet 10.1.1.4/32" ifconfig_fxp0_alias3="inet 10.1.1.5/32" ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240" #新網段,首 IP ifconfig_fxp0_alias5="inet 202.0.75.18/32" ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 0xffffffff" ifconfig_fxp0_alias7="inet 202.0.75.20/32"
  • 簡寫模式: ifconfig_alc0_aliases="inet 10.1.1.1-5/24 inet 202.0.75.17-20/28"
  • syslog.conf 語法
    • facility:auth, authpriv, console, cron, daemon,ftp, kern, lpr, mail, mark, news, ntp, security, syslog, user, uucp, and local(0,1,..7)
    • level:emerg, crit, alert, err,warning, notice, info and debug
  •  *.err;kern.*;auth.notice;authpriv.none;mail.crit /dev/console 注:all facility 的大於或等於(=>) err 級別(level)的日誌,kern facility 的全部 level 日誌,及 mail facility 的 =>crit level 的日誌,顯示到控制檯;authpriv facility 的全部 level 日誌均不顯示在控制檯 *.info;mail.none;authpriv.none /var/log/messages 注:除了 mail 與 authpriv 以外的全部 facility 的 info level 以上的日誌,記錄到 messages 文件  daemon.=debug /var/log/daemon.debug 注:記錄 daemon facility 的 debug level 日誌(「=」 指僅記錄此一個級別)  authpriv.* /var/log/secure 注:authpriv facility 的全部 level 日誌記錄到單獨的文件以確保安全  mail.* -/var/log/maillog 注:記錄 mail facility 的全部 level 日誌,但 I/O 不以 fsync 方式同步(「-」 指以普通緩存形式執行非同步寫入,以減小到系統性能的影響) *.emerg * *.emerg @arpa.berkeley.edu 注:以上兩行,將全部 facility 的 emerg level 日誌記錄到遠程主機,即便已記錄到其它位置(「*」 指重置,對應的日誌可重複記錄) *.alert root,eric 注:僅 root 及 eric 兩個用戶能夠收到 alert 信息  auth.* |exec /usr/local/sbin/authfilter 注:將 auth facility 的全部 level 日誌首先經過管道傳遞給 authfilter 處理  console.* /var/log/console.log 注:將全部原先寫往控制檯的信息,記錄到文件 !ipfw *.* -/var/log/ipfw !* 注:以上三行,僅記錄 ipfw 程序產生的日誌,且非同步寫入(使用緩存),「!」 指明接下來的內容僅對 ipfw 有效,最後的 "!*" 將重置記錄對象 
  • Log Management and Rotation:newsyslog.conf(cron 定時執行)
  • # logfilename    [owner:group]    mode    count    size    when    flags    [/pid_file]    [sig_num]
    1
    logfilename:生成的分段日誌文件存放路徑,如:/root/logdir 2 [owner:group]:可選項,指定生成的文件的屬主屬組,如:root:wheel 3 mode:指定生成的文件的訪問權限,如:0600 4 count:指定能生成的最大文件數量 5 size:數字,以 KB 爲單位,指定日誌大小維度的觸發條件 6 when:指定時間維度的觸發條件,如:$D23(天天 23:00)、$W5D20(每週五 20:00 ,W0 指星期日)、$M10D0(每個月的第 1000:007 flags:指定壓縮格式等,如:X 指用 xz 壓縮以節約空間;B 指源文件爲二進制格式,直接壓縮不添加備註信息
  • Configuring Remote Logging
    • 服務器端
    • /etc/syslog.conf
          +logclient.example.org # 「+」 指接受遠程主機存儲日誌
          *.*     /var/log/logclient.log #指定遠程客戶端的日誌存儲位置

      /etc/rc.conf
          syslogd_enable="YES"
          syslogd_flags="-d -a logclient.example.org -v -v"
      # -d ,Put syslogd into debugging mode(僅用於故障調試)
      # -a 指添加,多個客戶端須用多個 -a 選項,格式能夠爲:IP/masklen:port 或 IP/masklen:syslogd 或 hostname:syslogd 等,syslogd能夠替換爲其它可用的日誌服務器名稱
      # -v -v 指存儲詳細信息,日誌按 facility 分類顯示
    • 客戶端
    • /etc/syslog.conf
          *.*        @logserv.example.org # 「@」 指將日誌存儲到其後的 hostname 主機之上

      /etc/rc.conf
          syslogd_enable="YES"
          syslogd_flags="-s -v -v" # -s 不爲其它主機存儲日誌,若 -s -s (兩個 -s),則同時不能將日誌存儲到其它主機
    • 遠程日誌存儲是以明文形式傳輸,能夠考慮應用 ssh 遂道
  • 系統配置文件位置
  • 1 /etc    Generic system-specific configuration information 2 /etc/defaults Default versions of system configuration files 3 /etc/mail Extra sendmail configuration and other MTA configuration files 4 /etc/ppp    Configuration for both user- and kernel-ppp programs 5 /etc/namedb    Default location for named data. Normally named.conf and zone files are stored here 6 /usr/local/etc    Configuration files for installed applications. May contain per-application subdirectories 7 /usr/local/etc/rc.d    rc scripts for installed applications. 8 /var/db    Automatically generated system-specific database files, such as the package database and the locate database
  • /etc/hosts 文件格式
  • [Internet address] [official hostname] [alias1] [alias2] ... 如: 10.0.0.4    myname.xxx.org    myname    cat    monkey
  • Tuning with sysctl :readonly 項只能在 /boot/loader.conf 中設置,其它可在 /etc/sysctl.conf 中或使用 sysctl 命令設置
    • sysctl -a #顯示全部可用項目
    • sysctl kern.maxproc #顯示指定項目的值
    • sysctl -d kern.maxvnodes #顯示指定項目的簡介
    • sysctl kern.maxfiles=10000 #臨時設置指定項目的值
    • /etc/sysctl.conf #配置文件
    • kern.ipc.soacceptqueue
      #默認值是 128,limits the size of the listen queue for accepting new TCP connections.For Web Server,increase this value to 1024 or higher
      net.inet.ip.portrange.first/net.inet.ip.portrange.last
      #服務器主動對外鏈接可用的端口範圍:last - first
      sysctl kern.maxvnodes/sysctl vfs.numvnodes
      #maxvnodes 指系統最大可用 vnodes 數量,numvnodes 指當前已用數量;當後者的數量與前者接近時,有必要提高前者的值,以免 I/O 瓶頸
      kern.ipc.somaxconn=32768  #併發鏈接數,默認 128
      security.bsd.see_other_uids=0  #禁止用戶查看其餘用戶的進程
      kern.ipc.shm_use_phys=1  #共享內存只使用物理內存,不使用 swap
      kern.ipc.shmmax=67108864  #單一 shm segment 可佔用的最大內存量(單位:bytes/B)
      kern.ipc.shmall=32768  #系統共享內存可分配的總頁數,頁大小可用 getconf PAGESIZE 命令得到,一般爲 4096 
  • Disk Soft Updates
    • 磁盤的元數據是否異步寫入,可極大提高機械式硬盤的元數據操做效率,但在系統異常停止的狀況下,會形成數據不一致
    • 提供 UFS 文件系統的 snapshot 功能,可對單個目錄作快照
    • 操做方式:tunefs -n enable/disable /FILESYSTEM
    • Linux 下的 ext 系列文件系統默認便是異步寫入
  • Swap
    • Adding a new hard drive for swap gives better performance than using a partition on an existing drive.
    • RAW disk ,即沒有建立文件系統的裸盤,用做 swap 可提高性能

 2、The FreeBSD Booting Processnode

  •  shutdown -p/-r now :關機/重啓
  • 以下所示,修改 /etc/ttys ,使單用戶模式下登錄系統須要 root 密碼
  • # If console is marked "insecure", then init will ask for the root password when going to single-user mode
    console none                unknown off insecure

3、Securitylinux

  • 系統資源限制
    • 傳統方式:/etc/login.confcap_mkdb /etc/login.conf :Whenever /etc/login.conf is edited, the /etc/login.conf.db must be updated by executing the command) 
    • rctl(>= FreeBSD 9.0):supports user limits, and set resource constraints on processes and jails
    • rctl requires the kernel to be compiled with: options RACCT options RCTL 啓用 rctl 支持: /boot/loader.conf 中 添加 kern.racct.enable=1 #只讀項,沒法經過 sysctl 直接設置 /etc/rctl.conf 格式: subject:subject-id:resource:action=amount/per(user/process...) 示例:jail:httpd:memoryuse:deny=2G/jail #Block jail from using more than 2G memory subject:process, user, loginclass, or jail
          subject-id:process ID, user name, numerical user ID, login class name, or jail name
          resouce:memoryuse, maxproc, datasize(單文件大小), pcpu(single CPU 佔用率), readbps(bytes/sec), writebps(B/sec), readiops(operations/sec), writeiops(每秒鐘的 I/O 寫數量)
          action:
      <1> deny(deny the allocation,not supported
      for cputime, wallclock, readbps, writebps, readiops, and writeiops)
      <2> log(log a warning to the console)
      <3> throttle(slow down process execution; only supported for readbps, writebps, readiops, and writeiops)
  • 阻止用戶登錄
  • pw lock USERNAME 或 chsh -s /usr/sbin/nologin USERNAME
  • Permitted Account Escalation:sudo
  • # visudo
    #賦予 webadmin 組的成員操做 apache24 的權限
    %webadmin ALL=(ALL) /usr/sbin/service apache24 *
    #啓用日誌功能,使用 sudoreplay 工具進行管理
    Defaults iolog_dir=/var/log/sudo-io/%{user}
  • /etc/master.passwd:相似於 Linux 下的 shadow 文件
  • HASH 算法標誌:Blowfish(2a)、sha512(6)等
  • Password Policy Enforcement:Pluggable Authentication Modules (PAM)——密碼複雜度控制
  • # /etc/pam.d/passwd
    # 格式以下:
    # module-type control-flag pam_passwdqc [options]
    password requisite pam_passwdqc.so min(密碼最小長度:N0...N5,分別指明不一樣複雜度性況下的長度要求)=disabled,18,14,12,10 max(密碼最大長度)=40 similar(是否容許與之前設置過的密碼相似)=permit|deny enforce(策略類型:僅警告|普通用戶|包括 root )=none|users|everyone
  • /etc/login.conf 中的安全相關
  • :passwd_format=blf:\ #設置密碼加密算法爲 Blowfish
    :passwordtime=90d:\ #設置全部普通帳戶的密碼有效期爲 90#配置完成後,執行 cap_mkdb /etc/login.conf 使之生效
  • rkhunter :排查系統安全漏洞的工具
  • rkhunter -c
  • # /var/lib/rkhunter.log
    ...
    [09:20:01]   Checking if SSH root access is allowed          [ Warning ]
    [09:20:01] Warning: The SSH configuration option 'PermitRootLogin' has not been set.
                The default value may be 'yes', to allow root access.
    [09:20:01]   Checking if SSH protocol v1 is allowed          [ Warning ]
    [09:20:01] Warning: The SSH configuration option 'Protocol' has not been set.
                The default value may be '2,1', to allow the use of protocol version 1.
    ...
  • Binary Verification:mtree/map a directory hierarchy
  • mtree -p /sbin -s 31982734 -c -K cksum,sha256 > ~/.sbin_mtree #映射目錄層次結構
    #-c 建立;-p 指定目標目錄;-s 加鹽 salt;-K 指定校驗算法
    #可與 freebsd-update IDS 結合使用進行輔助性入侵檢測 mtree
    -p /sbin -s 31982734 < ~/.sbin_mtree >> ~/.sbin_chk_result #檢測內容被修改的文件
  • 更改內核安全等級:-1/0/1/2/3
  • # /etc/rc.conf
    kern_securelevel_enable=「YES」
    # /etc/sysctl.conf
    kern.securelevel=N # -1/0/1/2/3
    # 級別 -10 :Insecure Mode,適用於桌面環境,更高安全級將會給 Xorg 帶來問題
    # 級別 1 :Secure Mode ,不能修改文件的 immutable 和 append-only 標誌、不能 load 或 unload 內核模塊、不能對 /dev/mem 及 /dev/kmem 執行寫操做
    # 級別 2 :Highly Secure Mode ,在級別 1 之上,額外限制不能將磁盤持載或從新掛載成可寫模式、多用戶環境下不能使用 newfs 格式化磁盤
    # 級別 3 :Network Secure Mode ,在級別 2 之上,額外限制不能修改網絡防火牆(ipfw)規則、不能修改 dummynet 與 pf 的配置文件
  • blackhole :防止端口掃描,設置 net.inet.tcp.blackhole=2net.inet.udp.blackhole=1
  • # Control system behaviour when connection requests are received on SCTP, TCP, or UDP ports where there is no socket listening # /etc/sysctl.conf net.inet.tcp.blackhole[={0 | 1 | 2}] # 1 : the incoming SYN segment is merely dropped # 2 : any segment arriving on a closed port is dropped without returning a RST net.inet.udp.blackhole[={0 | 1}] # 1 : turns off the sending of an ICMP port unreachable message in response to a UDP datagram
    # 注:Any remote host‘s "traceroute" via this node will failed
  • 防止 ip redirect (icmp type 5)攻擊:net.inet.icmp.drop_redirect=1 及 net.inet.ip.redirect=0,與 ping(icmp type 0) 無關
  • 禁用源路由(用於防問不可路由地址,如:10.*.*.* 等內網網段的技術)功能,保護私網安全:net.inet.ip.sourceroute=0 / net.inet.ip.accept_sourceroute=0
  • 拒絕外部主機的廣播報文:net.inet.icmp.bmcastecho=0
  • ssh 安全相關
  • # /etc/ssh/sshd_config
    AllowUsers Ani@11.11.11.11 John #限制能夠登錄 ssh 服務器用戶列表,僅容許 Ani 與 John 兩個用戶登錄,且 Ani 只能從 11.11.11.11 登錄
    Protocol 2#僅啓用 ssh 協議版本 2
    PasswordAuthentication no #禁用密碼方式,僅容許密鈅對登錄
    PermitRootLogin  no #禁止直接使用 root 登錄
  • Third Party Software Auditing(Monitoring Third Party Security Issues)
  • pkg audit -F #/etc/defaults/periodic.conf daily_status_security_enable="YES" #設置此項確保天天執行,審記結果將發至 root 的郵箱
  • Process Accounting:參見手冊頁 lastcomm(1)、 acct(5) 和 sa(8)  
  • /usr/bin/finger:將此程序的權限設定爲 0500 ,不容許普通用戶查看它人登錄信息

4、Storage——UFS 文件系統git

  • 添加硬盤
    • gpart delete -i N ada1 #刪除原有的分區,N 指分區編號,如 ada1p3 中 N=3
    • gpart create -s GPT ada1 #建立 GPT 類型的 scheme
    • gpart add -t freebsd-ufs -a 1M -s 100G ada1 #建立一個大小爲 100GB 的 freebsd-ufs 類型的分區,由於是首個分區因此按 1M 對齊,若不指定 -s 選項,則使用所有可用空間
    • gpart add -t freebsd-swap -a 4k -s 2G -i 8 ada1 #建立 swap 分區,以 4k 對齊,指定分區編號爲 8 ,所以分區名稱爲 ada1p8
    • gpart show ada1 #顯示磁盤信息
    • newfs -U ada1p1 #建立 UFS2 文件系統
    • gpart recover ada1 #If the disk was formatted with the GPT partitioning scheme, it may show as 「corrupted」 , fix with gpart
  • 調整容量
    • gpart resize -i 2 -a 4k -s 20G ada0 #將 ada0 的每 2 個分區總容量擴展至 20G ,保証 4k 對齊;不能縮小分區
    • growfs ada0p2 #使新擴展的容量生效
  • 外部設備
    • camcontrol devlist :查看 CDROM 或 USB 等設備信息
    • usbconfig :查看詳細 USB 設備信息
  • 受權非 root 用戶操做磁盤
    • /etc/devfs.rules
    • [localrules=5] #給規則取一個惟一的數字編號,此處爲 5
      add path 'da[3-6]*' mode 0660 group usb #名稱符合 da[3-6]* 表達式的設備能夠被 usb 組的成員操做
      add path 'usb/*' mode 0660 group usb #受權 usb 組成員可使用 usbconfig 工具查看設備信息 
    • /etc/rc.conf
    • devfs_system_ruleset="localrules" #聲明規則的標識
    • /etc/sysctl.conf
    • vfs.usermount=1 #容許普通用戶掛載設備 
  • 文件備份
    • tar -zcvf /tmp/mybackup.tgz . #將當前目錄打包壓縮備份
    •  ls -R | cpio -ovF /tmp/mybackup.cpio # cpio 能夠同時打包多個文件和目錄
  • 掛載 ISO 文件
    • mdconfig -f diskimage.iso -u N #將 iso 文件映射到 /dev/mdN 設備,若不指定 -u N ,則自動分配編號並返回結果
      mount /dev/`mdconfig -f diskimage.iso` /mnt #僅用一條命令,將 iso 文件掛域到 /mnt 下
      umount /mnt #首先取消掛載
      mdconfig -d -u N #而後斷開與 /dev/mdN 的 映射
  • 磁盤配額web

    • 內核支持:options QUOTA 及 sysctl kern.features.ufs_quota=1
    • /etc/rc.conf:quota_enable="YES" 及 check_quotas="NO",後者用於縮斷開機時間
    • /etc/fstab:/dev/ada0p1    /home    ufs rw,userquota,groupquota 1 2 #按需啓用 userquota 及 groupquota 特性
    • quota -v:查詢本身的配額使用信息
    • edquota -u John:編輯用戶 John 的磁盤配額
    • edquota -p John 2-100:將 John 的配額規則複製到 uid 爲 2-100 之間的全部用戶,修改 John 的限額後,須要從新執行此命令
    • repquota -v /dev/ada0p1:查看指定分區的詳細磁盤 quota 信息 

5、Updating and Upgrading FreeBSD算法

  •  指定更新方式,一般保持默認
  • #/etc/freebsd-update.conf
    IgnorePaths /usr/sbin #指定不與系統一塊兒更新的目錄 
    KeepModifiedMetadata yes #更新時保留舊文件的權限、歸屬及 flags 等元數據信息
    UpdateIfUnmodified /etc/ #指定目錄中的被更改過的文件不會被更新
    WorkDir /var/db/freebsd-update #指定更新時的 patch 及 臨時文件存放目錄
    MergeChanges /etc/ #指定目錄中的文件更新時,新舊文件的合併方式將提示用戶選擇,如:替換、保留或手動編輯等
  • freebsd-update
  • 版本內更新:
      # 只有 GENERIC 內核能夠直接打補丁,自定義內核須要從新編譯並安裝,用uname -r 查看內核核本號
      # 若 /etc/freebsd-update.conf 中的相關項保持默認,freebsd-update 會同時下載更新的源碼
      freebsd-update fetch #檢查並下載可用更新,包括軟件更新及內核補丁   freebsd-update install #安裝更新,內核補丁須要重啓機器,軟件補丁須要 restart 程序   freebsd-update cron #放在 crontab 中按期檢查更新   freebsd-update rollback #回滾到上一次未更新的狀態,一樣,回滾以後須要重啓生效 
    跨版本升級:
      第一步:freebsd-update -r 11.0-RELEASE-p1 upgrade #跨版本升級時一般切換至 GENERIC 內核
      第二步:freebsd-update install #基礎文件更新
      第三步:[使用自定義內核升級時須要] nextboot -k GENERIC
      第四步:shutdown -r now
      第五步:freebsd-update install #系統庫更新
      第六步:portmaster -af [-G] #大版本(major)一般伴隨 ABI 的版本更新,所以須要從新編譯安裝全部軟件包;-G 選項指明全部軟件按默認配置編譯安裝,不提示用戶選擇
      第七步:freebsd-update install #應用程序更新
      第八步:[可選]從新編譯自定義內核
  • !注意!
    • 首次編譯內核後,系統會將預裝的 GENERIC 內核目錄保存爲 /boot/kernel.old ,須要手動改名至 /boot/GENERIC ,防止下一次編譯內核時被覆蓋 
    • 若 GENERIC 內核已被意外覆蓋,可經過如下兩種方式解決:
    • # mount /cdrom #指 FreeBSD 系統安裝光盤
      # cd /cdrom/usr/freebsd-dist
      # tar -C /boot/kernel/ -xvf kernel.txz kernel    # !!! set "-C" before "-xvf"
      或
      # cd /usr/src #須要保証 GENERIC 內核配置文件沒有被更改
      # make kernel __MAKE_CONF=/dev/null SRCCONF=/dev/null 
  • 從新編譯整個系統:Rebuild World
    • 務必查看 /usr/src/UPDATING 文件瞭解注意事項
    • 更新步驟-(若是編譯失敗,在 /usr/src 下連續執行兩次 make cleandir 以後從新開始):
    • #儘量在單用戶模式下編譯
      1、刪除 /usr/obj/ 下全部舊文件
          chflags -R nosimmutable /usr/obj/ rm -rf /usr/obj/* 2、編譯新的編譯器及相關工具 cd /usr/src make buildworld 3、使用 /usr/obj/ 中新生成的編譯器編譯 kernel make buildkernel 4、安裝新內核(若內核安全等級在 1 以上,則須要進行單用戶模式操做) make installkernel 5、進入單用戶模式,並從新掛載文件系統爲可讀寫 mount -u / && mount -a $$ swapon -a #UFS 文件系統,-u 選項表示將已掛載的分區標記爲可更改狀態,以便從新掛載 zfs set readonly=off zroot && zfs mount -a #ZFS 文件系統 6、若是 date 顯示的時間和時區不正確,執行如下命令糾正 adjkerntz -i 7、更新配置文件 mergemaster -p #remaking world 過程當中,/etc 等目錄默認不會被更新,備份 /etc 以後,使用此命令合併配置文件,-p 選項指僅處理與下一步中的 installworld 相關的文件 8、安裝 /usr/obj 中新編譯出的軟件包 cd /usr/src && make installworld 9、追加新的配置文件 mergemaster -iF #-i 選項指若目標目錄中不存在同名文件,則安裝;-F 選項指若新舊文件之間的差別只有系統版本標識,則覆蓋舊文件 10、清除全部不須要的舊文件,以後 reboot make check-old && yes|make delete-old && reboot #檢查覈對無誤後,傳遞 yes 無需用戶確認直接刪除 11、從新編譯全部軟件包以後,刪除舊的庫文件
          portmaster -af && make delete-old-libs
    • /etc/src.conf:全局控制除內核之外的系統軟件包構建(/usr/src 下的源碼編譯)apache

    • #單次不使用全局設定,可指定 make SRCCONF=/dev/null
      WITHOUT_BLUETOOTH=1 #不安裝藍牙相關包
      WITHOUT_GAMES=1
      WITHOUT_IPFILTER=1 #選擇 IPFW ,故禁用 ipfilter
      WITHOUT_PF=1 #同上,禁用 PF
      WITHOUT_ISCSI=1 #IBM iscsi 支持模塊 WITHOUT_LIB32=1 #不安裝 32 位 lib 庫 # WITHOUT_WIRELESS=1 #不安裝無線網絡相關軟件包 WITHOUT_TCP_WRAPPERS=1 #不使用 inetd 及 tcpwrapper WITHOUT_INETD=1 #同上
      WITHOUT_RCMDS=1 #不安裝 rlogin 等過期遠程軟件包 WITHOUT_TELNET=1 #同上
      WITHOUT_SETUID_LOGIN=1 #取消 login 程序的 setuid 權限位 # WITHOUT_RADIUS_SUPPORT=1 #沒有拔號網絡可禁用 # WITHOUT_PPP=1 #同上 WITHOUT_LPR=1 #過期的打印相關軟件包 WITHOUT_HYPERV=1 #微軟的 hyperv 支持 WITHOUT_HTML=1 #html 幫助文檔 WITHOUT_FLOPPY=1 #軟盤 WITHOUT_EE=1 #ee 編輯器 WITHOUT_ATM=1 #過期的路由協議
      WITHOUT_APM=1 #過期的電源管理工具 apm、apmd
      WITHOUT_AUTOFS=1 #用於自動掛載光盤及網絡文件系統的工具包 autofs
      WITHOUT_BHYVE=1 #FreeBSD 平臺的虛擬機組件,使用相似於 kvm 的技術特性充分利用硬件資源
      WITHOUT_CALENDAR=1 #用於用戶提示目的的日曆小工具
      WITHOUT_CCD=1 #一種將多個物理磁盤鏈接成一個邏輯磁盤的技術,相似於軟 raid
      WITHOUT_CTM=1 #FreeBSD 平臺的一種源代碼管理工具,相似於 CVS git 等的應用領域
      WITHOUT_DICT=1 #不建立韋氏詞典相關的文件(Webster dictionary,一種英文詞典)
      WITHOUT_KVM_SUPPORT=1 #不安裝 libkvm 庫
      WITH_NAND=1 #使用 SSD 最好啓用此項,最新的 NVM 新型 SSD 不在此列
      WITHOUT_PC_SYSINSTALL=1 #PC-BSD 發明的系統安裝工具,主要用於桌面系統
      WITHOUT_SHAREDOCS=1 #不建立老舊的 4.4BSD 相關文檔
      WITHOUT_TALK=1 #用戶之間的互動小工具,相似於 Linux 下的 screen
      WITHOUT_TIMED=1 #用於多主機間的時間同步,提供 ntpd 的部分功能
      # WITHOUT_FTP=1 #不安裝系統自帶的 ftp 軟件包
      # WITHOUT_UNBOUND=1 #不安裝系統自帶的精簡版 unbound 域名緩存服務器(用於本地 DNS 緩存,若本機須要爲其它主機提供 DNS 緩存服務,建議從 ports 中安裝完整版 unbound)
      # WITHOUT_MAIL=1 #徹底不安裝與 mail 有關的全部組件,包括 sendmail、mailwrapper等
      # WITHOUT_SENDMAIL=1 #不安裝 sendmail 及相關組件;如計劃使用 postfix等
      # WITHOUT_TCSH=1 #不安裝 tcsh/csh(須要進入單用戶模式更改 root 的 SHELL 爲 sh)
      # WITHOUT_VI=1 #不安裝原始的 vi 編輯器
      # WITHOUT_SVNLITE=1 #不安裝用於系統版本控制的 svnlite 及相關組件(Subversion)
      # WITHOUT_ZFS=1 #不安裝 zfs 文件系統組件
      # WITHOUT_CDDL=1 #不安裝以 CDDL 許可証發佈的軟件包,如:zfs 文件系統、ctfconvert 調式信息轉換工具等
      # WITHOUT_JAIL=1 #不安裝 jail 組件
      # WITHOUT_AUDIT=1 #不安裝系統審計組組件
      # WITHOUT_KERBEROS=1 #若不使用 kerberos 身份認証代理服務
      # WITHOUT_RESCUE=1 #不建立求援工具包;與單用戶模式無關,這是一些用靜態庫連接生成的系統程序,可獨立運行,不依賴於其它組件,存放於 /rescue 目錄下
      ####################如下爲系統調試相關組件#################################
      # WITHOUT_LLDB=1 #LLDB 是一種較新的多語言調試器,功能比 GDB 豐冨
      # WITHOUT_KERNEL_SYMBOLS=1 #不建立用於內核調試的符號文件
      # WITHOUT_DEBUG_FILES=1 #不安裝調試文件
      # WITHOUT_PROFILE=1 #不編譯性能評估模塊
      # WITHOUT_TESTS=1 #不安裝系統測試組件,包括 dtrace 的相關模塊;Test Suite 主要用於開發調式及對系統組件功能是否正常的按期測試,須要安裝 devel/kyua
      # WITHOUT_DTRACE_TESTS=1 #不安裝 dtrace 測試組件
      # WITHOUT_CTF=1 #若是不使用 Dtrace 能夠不安裝 ctf 組件
      # WITHOUT_ASSERT_DEBUG=1 #不編譯程序中用於調試目的 assert micro (斷言宏)
  • /etc/make.conf
  • #參數賦值不加引號,字符串以空格分割,布爾(t/f)及數字型參數值可不添加空格
    # =,指定所有標誌
    # +=,在已有默認標誌之上,追加標誌
    # ?= 若標誌還沒有設置,則設置
    
    COPTFLAGS?= -O2 -pipe #內核優化參數(C opt flags)
    CPUTYPE= haswell #若爲本機編譯,可設置爲 native
    CFLAGS?= -O2 -pipe -march=${CPUTYPE} #C 優化參數,影響全局
    
    INSTALL?= -C #軟件包安裝參數,儘量避免沒必要要的文件更新
    KERNCONF= MyKernel # 內核配置文件名稱
    
    MODULES_OVERRIDE= ipfw zfs opensolaris ext2fs #僅編譯指定的模塊,即白名單
    # WITHOUT_MODULES= linux :指定不編譯的模塊,即黑名單;一般不與 MODULES_OVERRIDE 共存
    # NO_MODULES=1 #編譯內核時不一樣時編譯模塊
    MTREE_FOLLOWS_SYMLINKS
    = -L # 「mtree」 將對符號連接文件自己的狀態變化進行跟蹤 # FETCH_CMD= wget #指定下載工具,默認是系統自帶的 fetch PORTSDIR= /usr/ports #指定 ports 目錄樹的位置 WRKDIRPREFIX= ... #指定編譯時的臨時工做目錄 DISTDIR= /usr/ports/distfiles #源碼存放目錄 LOCALBASE= /usr/local #已安裝軟件包的位置,用於查詢並解決依賴關係 PREFIX= #軟件包安裝目錄,一般與 LOCALBASE 相同 PORT_DBDIR= /var/db/ports #指定用於存儲軟件包 OPTIONS(編譯選項) 的目錄 # XFCE
    VIDEO_DRIVER
    =intel

    # 全局啓用的功能模塊
    OPTIONS_SET+= CPU_OPTS THREADS MANPAGES GSSAPI_NONE LZ4
    # 全局屏蔽的功能模塊
    OPTIONS_UNSET+= X11 FONTCONFIG NLS EXTRAS SUID LLDB ZSH BASH EXAMPLES COOKIES CUPS DOCS GNOME GTK3 KDE4 PULSEAUDIO JAVA BABEL
  • freebsd-update IDS
  • #IDS : Intrusion Detection System(入侵監測系統)
    #用於比較當前系統的 ports (應用程序)、系統庫、配置文件等與官方系統初始狀態的差別,與 mtree 比較當前系統兩具時間點的狀態差別同樣,只能做爲一種輔助性安全措施
    
    freebsd-update IDS >> outfile.ids #與官方系統初始文件的 HASH 值不一樣的文件將被列出 
相關文章
相關標籤/搜索