隨筆 - 175  文章 - 202  trackbacks - 0
          <2011年12月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          第一個Blog,記錄哈哈的生活

          常用鏈接

          留言簿(16)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          Java links

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          @import url(http://www.aygfsteel.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); 問題:
              1. centos 5.5 通過 yum 安裝 mysql,啟動,一切正常。但是,修改 my.cnf 中的 datadir 到自定義目錄,并初始化好數據庫,使用原來的 mysql 文件就無法啟動了。
              2. 通過 heartbeat 啟動 mysql 遇到同樣的問題。

          解決:
              修改 /etc/selinux/config 文件中的  SELINUX=disabled,就可以運行了。

          過程:
              定位問題的過程中,發現,只要 copy 出來的 mysql 腳本,就可以執行,原來的依然不可以。或者 mysql 數據庫文件放到 /var/lib/mysql 下,就可以,其它位置,就不行。
              猜測,文件屬性有什么不一樣的?通過 ls -l 看權限,和 lsattr 看屬性,都一模一樣。
              但,知道原因后,使用 ls -Z 可以看到 selinux 相關的屬性,這些文件是不一樣的。
              
          原因:
              不太清楚原因,但肯定的是,selinux 相關屬性影響的,有空仔細看看相關文檔。

          下面這篇寫得不錯:

          http://www.linux.gov.cn/netweb/selinux.htm

          SELinux簡介

          SELinux全稱是Security Enhanced Linux,由美國國家安全部(National Security Agency)領導開發的GPL項目,它擁有一個靈活而強制性的訪問控制結構,旨在提高Linux系統的安全性,提供強健的安全保證,可防御未知攻擊,據稱相當于B1級的軍事安全性能。比MS NT所謂的C2等高得多。

          應用SELinux后,可以減輕惡意攻擊或惡意軟件帶來的災難,并提供對機密性和完整性有很高要求的信息很高的安全保障。 SELinux vs Linux 普通Linux安全和傳統Unix系統一樣,基于自主存取控制方法,即DAC,只要符合規定的權限,如規定的所有者和文件屬性等,就可存取資源。在傳統的安全機制下,一些通過setuid/setgid的程序就產生了嚴重安全隱患,甚至一些錯誤的配置就可引發巨大的漏洞,被輕易攻擊。

          而SELinux則基于強制存取控制方法,即MAC,透過強制性的安全策略,應用程序或用戶必須同時符合DAC及對應SELinux的MAC才能進行正常操作,否則都將遭到拒絕或失敗,而這些問題將不會影響其他正常運作的程序和應用,并保持它們的安全系統結構。

          SELinux的相關配置文件

          SELinux的配置相關文件都在/etc/selinux下,其中/etc/selinux/targeted目錄里就包含了策略的詳細配置和context定義,以下是主要文件及功用:

          /etc/selinux/targeted/contexts/*_context 默認的context設置 
          /etc/selinux/targeted/contexts/files/* 精確的context類型劃分 
          /etc/selinux/targeted/policy/* 策略文件

          Apache under SELinux

          Apache under SELinux - 讓Apache跑得順起來!
          對于剛使用Redhat Enterprise Linux 4 或Fedora Core 2以上/CentOS 4的用戶,一定會為Apache經常無法正常運轉,報以"Permission denied"等錯誤而大為不解,甚至大為惱火。
          其實這是因為這些系統里激活了SELinux,而用戶的apache配置與SELinux的配置策略有抵觸產生的,只有通過適當調整,使apache的配置和訪問符合策略才能正常使用。
          現在下面來分析一下SELinux中有關httpd(apache)的context定義(略有刪節)

          /home/[^/]+/((www)|(web)|(public_html))(/.+)? system_u:object_r:httpd_user_content_t
          /var/www(/.*)? system_u:object_r:httpd_sys_content_t
          /var/www/cgi-bin(/.*)? system_u:object_r:httpd_sys_script_exec_t
          /usr/lib/cgi-bin(/.*)? system_u:object_r:httpd_sys_script_exec_t
          /var/www/perl(/.*)? system_u:object_r:httpd_sys_script_exec_t
          /var/www/icons(/.*)? system_u:object_r:httpd_sys_content_t
          /var/cache/httpd(/.*)? system_u:object_r:httpd_cache_t
          /etc/vhosts -- system_u:object_r:httpd_config_t
          /usr/sbin/httpd -- system_u:object_r:httpd_exec_t
          /usr/sbin/apache(2)? -- system_u:object_r:httpd_exec_t
          /usr/sbin/suexec -- system_u:object_r:httpd_suexec_exec_t
          /var/log/httpd(/.*)? system_u:object_r:httpd_log_t
          /var/log/apache(2)?(/.*)? system_u:object_r:httpd_log_t
          /var/log/cgiwrap\.log.* -- system_u:object_r:httpd_log_t
          /var/cache/ssl.*\.sem -- system_u:object_r:httpd_cache_t
          /var/cache/mod_ssl(/.*)? system_u:object_r:httpd_cache_t
          /var/run/apache(2)?\.pid.* -- system_u:object_r:httpd_var_run_t
          /var/lib/httpd(/.*)? system_u:object_r:httpd_var_lib_t
          /var/lib/php/session(/.*)? system_u:object_r:httpd_var_run_t
          /etc/apache-ssl(2)?(/.*)? system_u:object_r:httpd_config_t
          /usr/lib/apache-ssl(/.*)? -- system_u:object_r:httpd_exec_t
          /usr/sbin/apache-ssl(2)? -- system_u:object_r:httpd_exec_t
          /var/log/apache-ssl(2)?(/.*)? system_u:object_r:httpd_log_t
          /var/run/apache-ssl(2)?\.pid.* -- system_u:object_r:httpd_var_run_t
          /var/run/gcache_port -s system_u:object_r:httpd_var_run_t
          /var/lib/squirrelmail/prefs(/.*)? system_u:object_r:httpd_squirrelmail_t
          /usr/bin/htsslpass -- system_u:object_r:httpd_helper_exec_t
          /usr/share/htdig(/.*)? system_u:object_r:httpd_sys_content_t
          /var/lib/htdig(/.*)? system_u:object_r:httpd_sys_content_t

          針對上述的內容,可以對如下的幾個常見問題進行簡單處理:

          1.phpmyadmin在非默認/var/www/html目錄下無法運轉

          通常類似的情況都是在配置了虛擬主機時,訪問/phpmyadmin等提示403訪問拒絕,日志里也提示Permission denied,這是因為phpmyadmin防止的目錄及文件本身屬性不符合context要求。
          假設phpmyadmin放在/web目錄下,那么執行:
          chcon -R -t httpd_user_content_t /web
          則會令/web及其下所有子目錄/文件,包括phpmyadmin文件都獲得了httpd_user_content_t的屬性,如果其傳統的Unix屬性對httpd來說是可讀的話,再重新訪問一下就應該可以了。

          2./home目錄下的虛擬主機無法運轉

          與問題1也是類似的,不過根據上文中context的定義,/home目錄下必須是用戶的$HOME/www或public_html或web目錄才是 httpd_user_content_t類型,因此建議將要作為web頁面的內容放置在用戶的$HOME/www或web或public_html里,并確保其屬性是httpd_user_content_t,使用如下命令查看:
          ls -Z /home/abc/
          drwxr-xr-x abc abc user_u:object_r:user_home_dir_t tmp
          drwxrwxr-x abc abc user_u:object_r:httpd_user_content www
          如不是,則可通過chcon來逐級目錄及文件更改,直至最后能訪問:
          chcon -R -t httpd_user_content_t /home/abc/web
          chcon -t user_home_dir_t /home/abc

          3.CGI程序無法運行

          如果cgi程序放在/var/www/cgi-bin/里也無法執行,遇到403或500錯誤的話,可以檢查cgi程序的屬性,按SELinux contexts文件里定義的,/var/www/cgi-bin/里必須是httpd_sys_script_exec_t 屬性。通過ls -Z查看,如果不是則通過如下命令更改:
          chcon -t httpd_sys_script_exec_t /var/www/cgi-bin/*.cgi
          如果是虛擬主機里的cgi,則參考問題2使之能正常使用普通的功能后,再通過chcon設置cgi文件的context為httpd_sys_script_exec_t即可。

          4.Setuid/gid 程序無法運行

          例如早期的SqWebMail及qmailadmin等,需要setuid/gid的支持,但在SELinux下這將受到嚴格限制。第一種方法是比較徹底的辦法,能保留系統的安全性,通過:
          audit2allow -l -i /var/log/messages
          將SELinux拒絕的信息轉換為相應的policy allow指令,將這些指令添加到SELinux policy 的src里相應的配置文件,重新生成policy并加載。但這樣做相對比較麻煩。
          另一個方法最簡單,但將使apache得不到保護。首先確定SELinux 類型是targeted的:
          cat /etc/selinux/config|grep SELINUXTYPE
          然后,使apache脫離SELinux保護:
          setsebool -P httpd_disable_trans 1
          然后重啟動apache:
          /etc/init.d/httpd restart
          這樣所有apache強制的檢查都失效,需要setuid/gid的程序可以正常使用。但這樣帶來了增加漏洞的危險,對于迫切需要運行而又很急的情況,本方法是一個最大限度減少系統安全缺失的最后辦法。對于取消SELinux 未必是一個好方法。

          SElinux的幾個相關命令

          一.

          ps -Z
          ls -Z
          id -Z

          例:
          [root@ljj cgi-bin]# ls -Z
          -rwxrwxrwx root root root:object_r:httpd_sys_script_exec_t a.cgi
          -rw-r--r-- root root root:object_r:httpd_sys_script_exec_t a.txt

          二. chcon

          修改文件的屬性 fild1:fild2:fild3

          chcon -u fild1 file
          chcon -l fild2 file
          chcon -t fild3 file

          例:
          chcon -u root file1

          三.getsebool

          獲取se相關的bool值
          例:
          [root@ljj cgi-bin]# getsebool -a | grep httpd
          httpd_builtin_scripting --> inactive
          httpd_disable_trans --> active
          httpd_enable_cgi --> active
          httpd_enable_homedirs --> active
          httpd_ssi_exec --> active
          httpd_tty_comm --> inactive
          httpd_unified --> inactive

          得到了一些與httpd相關的bool值,配置httpd.conf中的user_dir時,要保證這里的httpd_enable_homedirs是 active的,還要保證:

          chcon -R -t httpd_sys_content_t ~user/public_html;

          • httpd與selinux之間的關系更多詳見:man httpd_selinux

          四. togglesebool

          給se的相關bool值取反
          例:
          togglesebool httpd_enable_homedirs


          posted on 2011-12-22 18:41 哈哈的日子 閱讀(608) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 昌都县| 台中市| 南召县| 镇巴县| 安化县| 鄂托克旗| 虹口区| 洛隆县| 乌什县| 乌拉特前旗| 湾仔区| 霍山县| 昌图县| 饶河县| 微山县| 亳州市| 泗洪县| 启东市| 清徐县| 秀山| 肇庆市| 乳山市| 霍林郭勒市| 祁门县| 镇沅| 德州市| 鹤庆县| 赣榆县| 兴仁县| 海兴县| 兰溪市| 湘乡市| 托里县| 来安县| 定日县| 格尔木市| 鸡东县| 五台县| 乌审旗| 象山县| 双鸭山市|