教你用SELinux來保護(hù)你的Apache
你的Web服務(wù)器確實(shí)有可能遭受攻擊,但是SELinux可以用來確保你的網(wǎng)站不用承受真正的傷害。
你可以運(yùn)用SELinux類型來創(chuàng)建一個確切定義:一個服務(wù)可以做什么和它在哪里完成要做的事情。默認(rèn)情況下,httpd_sys_content類型被設(shè)為/var/www,它規(guī)定httpd進(jìn)程可以在該目錄中工作。如果攻擊者破壞了Apache Web服務(wù)器并嘗試在別處寫入,就像紅帽和Fedora以及CentOS等相似Linux版本的默認(rèn)/tmp,你需要知道你正在處理什么。如果你配置Apache來為/data目錄中的內(nèi)容服務(wù),SELinux也會默認(rèn)地防止這種情況。
由于這些默認(rèn)設(shè)置可能造成復(fù)雜的情況,很多Linux管理員關(guān)閉SELinux。雖然關(guān)閉SELinux的確讓你的服務(wù)器提供服務(wù)時更容易,但是它還是增加了安全風(fēng)險(xiǎn)。
為Apache管理SELinux設(shè)置
為Apache等服務(wù)管理SELinux設(shè)置并不難。問題是并沒有簡單的圖形工具可以讓你快速安裝。但只要用三條命令,你就可以配置它。
為了在你想讓服務(wù)訪問到的目錄上設(shè)置文件類型,你首先必須決定要使用的文件系統(tǒng)類型。要這么做,只需在服務(wù)使用的默認(rèn)目錄上輸入ls –ldZ。
對于Apache,你會使用ls –ldZ /var/www。你會注意到在這種情況下,–Z選項(xiàng)給出了額外的文件屬性,而–t選項(xiàng)才是最關(guān)鍵的一個。這個進(jìn)程規(guī)定現(xiàn)有的文件系統(tǒng)類型,這個系統(tǒng)類型是Apache設(shè)置的(httpd_sys_content_t)。這也是你需要按照新文件根設(shè)置的文件類型。
你可以用兩條命令設(shè)置你的內(nèi)容形式:用chcon你可以做一次暫時的變更,它在重啟后消失;用followed by緊跟著的semanage,你可以做永久的變更。
semanage命令似乎有些復(fù)雜,但它實(shí)際上非常簡單,因?yàn)槟阒恍枰淖兡阆胍玫念愋秃湍繕?biāo)目錄。在下面的例子中,你只需要改變兩個參數(shù)。
semanage fcontext -a -t httpd_sys_content_t /web(/.*)/?
在運(yùn)用semanage設(shè)置默認(rèn)文件類型之后,運(yùn)用restorecon命令來確保它得到應(yīng)用了。在上面的例子中,針對目錄/web的文件類型被變更來允許到那個目錄上服務(wù)器文件的Apache,運(yùn)行以下命令來應(yīng)用該變更:
restorecon -R -v /web
在這一點(diǎn)上,Apache將能服務(wù)于新的非默認(rèn)文件根目錄上的文件。
為SELinux管理布爾值
你需要管理的SELinux的另一個方面是SELinux布爾值。這些都是開啟或關(guān)閉某些功能的二進(jìn)制值。布爾值可以在多種服務(wù)中獲得。運(yùn)用getsebool –a命令來概觀整個現(xiàn)有的布爾值。該命令通常會將你能應(yīng)用的設(shè)置列成一個長長的列表。
要為你想配置的服務(wù)找到所有布爾值,通過grep傳輸所有g(shù)etsebool –a的輸出。舉例來說,運(yùn)用getsebool –a | grep http來找到所有與行http匹配的布爾值。即使你并不是對所有布爾值都有明確認(rèn)識,你通常還是可以通過觀察它們的名字和它們可能做的事情查明白。
使用getsebool -a來找出哪個SELinux可以用來修改服務(wù)行為:
[root@bia Desktop]# getsebool -a | grep http allow_httpd_anon_write --> off allow_httpd_mod_auth_ntlm_winbind --> off allow_httpd_mod_auth_pam --> off allow_httpd_sys_script_anon_write --> off httpd_builtin_scripting --> on httpd_can_check_spam --> off httpd_can_network_connect --> off httpd_can_network_connect_cobbler --> off httpd_can_network_connect_db --> off httpd_can_network_relay --> off httpd_can_sendmail --> off httpd_dbus_avahi --> on httpd_enable_cgi --> on httpd_enable_ftp_server --> off httpd_enable_homedirs --> off httpd_execmem --> off httpd_read_user_content --> off httpd_setrlimit --> off httpd_ssi_exec --> off httpd_tmp_exec --> off httpd_tty_comm --> on httpd_unified --> on httpd_use_cifs --> off httpd_use_gpg --> off httpd_use_nfs --> off
學(xué)會了你想用哪個布爾值后,運(yùn)用setsebool -P來應(yīng)用它們。如果你想允許Apache運(yùn)用nfs,在上面運(yùn)用setsebool -P http_use_nfs。想要得到所有可用布爾值的完整列表,咨詢一下httpd_selinux頁面,這個頁面解釋了Apache特有的文件標(biāo)簽和布爾值。
關(guān)鍵詞:SELinux,Apache
閱讀本文后您有什么感想? 已有 人給出評價(jià)!
- 0
- 0
- 0
- 0
- 0
- 0