一、Managing Services in FreeBSD
- 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(每月的第 10 天 00:00) 7 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 可提升性能
二、The FreeBSD Booting Process
- 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
三、Security
- 系統資源限制
- 傳統方式:/etc/login.conf(cap_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 # 級別 -1 與 0 :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=2 及 net.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 ,不允許普通用戶查看它人登陸信息
四、Storage——UFS 文件系統
- 添加硬盤
- 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 的 映射
-
-
磁盤配額
-
- 內核支持: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 信息
五、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 之后重新開始):
-
#盡可能在單用戶模式下編譯 一、刪除 /usr/obj/ 下所有舊文件 chflags -R nosimmutable /usr/obj/ rm -rf /usr/obj/* 二、編譯新的編譯器及相關工具 cd /usr/src make buildworld 三、使用 /usr/obj/ 中新生成的編譯器編譯 kernel make buildkernel 四、安裝新內核(若內核安全等級在 1 以上,則需要進行單用戶模式操作) make installkernel 五、進入單用戶模式,並重新掛載文件系統為可讀寫 mount -u / && mount -a $$ swapon -a #UFS 文件系統,-u 選項表示將已掛載的分區標記為可更改狀態,以便重新掛載 zfs set readonly=off zroot && zfs mount -a #ZFS 文件系統 六、如果 date 顯示的時間和時區不正確,執行以下命令糾正 adjkerntz -i 七、更新配置文件 mergemaster -p #remaking world 過程中,/etc 等目錄默認不會被更新,備份 /etc 之后,使用此命令合並配置文件,-p 選項指僅處理與下一步中的 installworld 相關的文件 八、安裝 /usr/obj 中新編譯出的軟件包 cd /usr/src && make installworld 九、追加新的配置文件 mergemaster -iF #-i 選項指若目標目錄中不存在同名文件,則安裝;-F 選項指若新舊文件之間的差異只有系統版本標識,則覆蓋舊文件 十、清除所有不需要的舊文件,之后 reboot make check-old && yes|make delete-old && reboot #檢查核對無誤后,傳遞 yes 無需用戶確認直接刪除 十一、重新編譯所有軟件包之后,刪除舊的庫文件 portmaster -af && make delete-old-libs
-
/etc/src.conf:全局控制除內核以外的系統軟件包構建(/usr/src 下的源碼編譯)
-
#單次不使用全局設定,可指定 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 值不同的文件將被列出