1、Managing Services in FreeBSDhtml
service sshd onerestart
/* 以下爲啓動腳本的基本格式 */
#!/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 載入當前腳本中定義的參數
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"
*.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 有效,最後的 "!*" 將重置記錄對象
# 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 指源文件爲二進制格式,直接壓縮不添加備註信息
/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),則同時不能將日誌存儲到其它主機
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
[Internet address] [official hostname] [alias1] [alias2] ... 如: 10.0.0.4 myname.xxx.org myname cat monkey
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
2、The FreeBSD Booting Processnode
# 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
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
# visudo
#賦予 webadmin 組的成員操做 apache24 的權限 %webadmin ALL=(ALL) /usr/sbin/service apache24 *
#啓用日誌功能,使用 sudoreplay 工具進行管理
Defaults iolog_dir=/var/log/sudo-io/%{user}
# /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
:passwd_format=blf:\ #設置密碼加密算法爲 Blowfish :passwordtime=90d:\ #設置全部普通帳戶的密碼有效期爲 90 天 #配置完成後,執行 cap_mkdb /etc/login.conf 使之生效
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. ...
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 #檢測內容被修改的文件
# /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 的配置文件
# 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
# /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 登錄
pkg audit -F #/etc/defaults/periodic.conf daily_status_security_enable="YES" #設置此項確保天天執行,審記結果將發至 root 的郵箱
4、Storage——UFS 文件系統git
[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 工具查看設備信息
devfs_system_ruleset="localrules" #聲明規則的標識
vfs.usermount=1 #容許普通用戶掛載設備
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
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/ #指定目錄中的文件更新時,新舊文件的合併方式將提示用戶選擇,如:替換、保留或手動編輯等
版本內更新:
# 只有 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 #應用程序更新
第八步:[可選]從新編譯自定義內核
# 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
#儘量在單用戶模式下編譯 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 (斷言宏)
#參數賦值不加引號,字符串以空格分割,布爾(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
#IDS : Intrusion Detection System(入侵監測系統)
#用於比較當前系統的 ports (應用程序)、系統庫、配置文件等與官方系統初始狀態的差別,與 mtree 比較當前系統兩具時間點的狀態差別同樣,只能做爲一種輔助性安全措施
freebsd-update IDS >> outfile.ids #與官方系統初始文件的 HASH 值不一樣的文件將被列出