網站伺服器建置與管理上課補充教材
- 最新消息:
- 每週都有可能會有上機實作,要等老師檢查完畢才能夠下課!否則就不算有來上課!
- 回首頁
- 舊版進度介紹
Chapter 05:伺服器/主機的簡易安全概念與管理
- 一個封包要進入本機基本上需要通過如下圖示的相關流程才行:
- 先要通過 TCP/IP 的相關規範才能夠連線到本機的網路門口
- 要先通過防火牆的規則管制,才可以進入到本機使用本機的服務
- 能否取得服務與這個服務是否啟用與相關設定有關 (發生問題可以查登錄檔)
- 能否實際存取資料,首先要看有沒有啟動 SELinux 這個細部權限設定項目?
- 全部都放行後,最後能不能存取資料,還是跟資料檔案的權限 (rwx) 有關!
- 防火牆有沒有用?軟體升級有沒有用?設定 chmod 777 會不會出事?
- 從前一個項目的圖示來看,如果你是 WWW 伺服器,那一定就是要放行 port 80,因此,若 port 80 出問題,
那你的防火牆當然一點用處也沒有。
- 但,如果你的服務中,例如 ssh 的服務,僅放行給部份的來源 IP 位址,則此時防火牆保護危險的服務,就很有用處了!
- 一般來說,軟體如果沒有問題,或沒有加入新功能,是不會隨意升級的。因此,如果官網有公告最新的軟體升級資訊,
當然最好就是一定要升級到最新!至少能夠預防一大堆可能的系統漏洞
- 如果你的網路服務僅提供讀取的功能,那麼即使你的檔案權限放行 777 可能都還不會出事。但是如果你的這個服務設定錯誤呢?
如果你的這個服務因為漏洞所以被攻破呢?那麼你的檔案如果是 777 ,很好!那就是完全的被拿走了...
- SELinux 可以管理網路程序 (本機程序通常不管理),讓這個網路程序僅能在某些目錄內工作,而且只能進行某些行為,
因此,即使你的這個網路軟體被攻破,而且權限還是 root 時,它還是無法完整的操控你的系統!
- 伺服器本機的防護:升級到官方最新的軟體版本
- 找到最近的官網 mirror 網站,崑山校內最簡單的就是 http://ftp.ksu.edu.tw 這個網站了!
- 修改 /etc/yum.repos.d/ 這個目錄,可以的話,只加上 base 及 updates 這兩個就好,其他的沒用到暫時不用也無所謂。
- 使用 yum -y update 自動進行全系統升級
- 若有升級到核心或重要的函式庫,最好重新開機,才能使用到最新的核心與函式庫功能。
- 練習:
- 修改 /etc/yum.repos.d/*.repo 檔案,讓系統支援崑山校內的 CentOS 7 來源
- 建立一隻每天 2 點會執行的腳本,該腳本會每天持續更新系統
- 假設你需要加入某些核心功能,例如在 /proc/cmdline 加入 intel_iommu=on 要如何處理與觀察?
- 伺服器本機的防護:減少網路服務
- 如果對方想要連接到你的 port 80,但是你的 port 80 根本就沒有啟用埠口在監聽,那麼對方無論如何是無法連接到你的服務的!
所以減少網路服務是很重要的!
- 可使用 netstat -utlnp 來查詢自己本機所啟動的服務
- 可使用 nmap IP 來查詢某個 IP 有啟動的 TCP 埠口有哪些 (不可隨意攻打別人)
- 可使用 nmap -sTU IP 來查詢某個 IP 啟動的 TCP/UDP 埠口
- 可使用 nmap -sP network/netmask 來查詢整個網域有啟動的 IP 位址共有哪些
- 練習:
- 先用 netstat 檢查一下本機有啟動的網路埠口共有哪些?
- 先自己分析一下,哪些是需要的埠口?哪些是不需要的埠口?
- 透過 systemctl 關閉不要的埠口,且下次開機,這些埠口也不會啟用!
- 練習:
- 使用 nmap 搭配 icmp (-sP) 的功能,來找到你的外部網域的區網有哪些 IP 是開機著的!
- 伺服器本機的防護:透過管理 SELinux
- SELinux 的管理主體是網路服務那個『程序』,而不是『啟動該程序的身份』喔!
- 整個程序與相關的SELinux模式可由下圖來理解:
- 第一關:SELinux 的三種模式與每種模式的功能
- Disable:完整關閉不使用 SELinux,核心不會啟用 SELinux
- Enforcing:完整啟動 SELinux 的功能,會分析、管制網路程序能夠存取的目錄與檔案
- Permissive:寬容模式,事實上有啟動 SELinux 的功能,但是僅進行分析與紀錄,並不會實際抵擋網路程序的運作。
- 練習:
- 使用 getenforce 觀察目前你的系統使用哪種 SELinux 的模式?
- 使用 setenforce [0|1] 搭配 getenforce 來觀察 SELinux 的模式變化!
- 觀察 /etc/selinux/config 這個檔案的內容,看如何設定預設的 SELinux 模式。
- 觀察 /boot/grub2/grub.cfg 裡面的設定,若有 selinux=0 亦代表預設關閉 SELinux 的模式,而成為 disable 喔!
- 讀者須注意,最好不要 Disable 與其他兩種模式交互切換,因此切換成 disable 後,系統內的每個檔案的 inode
內容會被修改,可能造成無法預知的問題!
- 第二關:每種網路程序要能提供某些服務時,需要透過一些規則與政策
- 可以使用『 sestatus 』觀察目前的 SELinux 狀態
- 可以使用『 getsebool -a 』查詢現階段 SELinux 所支援的各項規則與放行否
- 可以使用『 semanage boolean --list 』查詢每個 SELinux 規則的簡易說明
- 可以使用『 setsebool -P rule=[0|1] 』修改設定檔並直接啟用某個規則
- 練習:
- 透過 semanage boolean --list 找出所有跟 FTP 有關的規則有哪些?
- 讓 FTP 可以完整的存取 (full access) 系統資訊
- 第三關:每個程序要讀取檔案,程序的安全本文與檔案的安全本文要能夠搭配
- 可以透過『 ps -Z 』觀察到每一種程序使用的安全本文為何
- 可以透過『 ls -Z 』觀察每一個檔案的安全本文為何
- 可以透過『 semanage fcontext --list 』觀察每個檔案的預設安全本文為何
- 可以透過『 chcon -t type 檔名 』修改檔案的安全本文
- 可以透過『 restorecon -Rv 目錄 』修改目錄下的檔案恢復原本的安全本文
- 可以透過觀察『 /var/log/messages 』的內容了解如何修改 SELinux 的錯誤
- 練習:
- 讓你的系統安裝 vsftpd 這個 FTP 伺服器軟體
- 啟動這個伺服器軟體
- 請打開瀏覽器,用 ftp://localhost 登入瀏覽看看
- 用 student 身份登入,簡單的方法為: ftp://student@localhost 提示視窗中輸入 stduent 的密碼
- 若無法登入,請觀察 /var/log/messages 的內容寫些什麼?
- 若依舊沒有紀錄資料,讓 SELinux 變成 permissive 後,再次登入,看看情況如何?
- 如何改善這個情況?
- 在 /root 底下建立一個檔案,內容填寫你的學號與姓名,然後將檔案移動到 /var/ftp/pub 底下,
在以匿名登入瀏覽,能否看到這個檔案?能否讀取這個檔案?為什麼?
- 如何改善上面的情況?
- 全系統的 SELinux 更新方式:
若在沒有 SELinux 的環境下更動到檔案的 inode 內容,則原本紀錄在 inode 內的 SELinux 將會被清空。
例如在基礎訓練篇裡面的關於 root 救援進入 rescue 的模式中,就是一個最基本的案例。此時你可以這樣做:
- 在離開救援模式前,使用 touch /.autorelable ,則下次重新開機後,系統會重新根據預設定義重建 SELinux
對每個檔案的安全本文!重新定義完畢會再次的重新開機就正常了
- 離開救援模式之前,將 /etc/selinux/config 修改成為 permissive 的模式,正常進入系統後,
使用 root 下達 restorecon -Rv / 來處理全系統的 SELinux 復原,之後修改 /etc/selinux/config 成為 Enforcing 再重開機。
或直接 setenforce 1 而不用重新開機也行。