http://blog.candyz.org/2006/05/06
關於 SELinux
看了很多網路上有關於 SELinux 的文章以及到書店去翻了一下有提到 SELinux 的 Linux 書籍
看完了的感覺不是很好
幾乎都沒提到什麼是 SELinux?SELinux 的運作機制是什麼?
大部份提到的解決辦法,都是 「請把 SELinux 停用」
這樣也只不過是治標而不是治本的方法
SELinux 的設定檔
* /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=enforcing
# SELINUXTYPE= type of policy in use. Possible values are:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted
若要停用 SELinux,則把 SELINUX=enforcing 改成 SELINUX=disabled 後重新開機即可
SELinux 的一些相關指令
* sestatus
查看 SELinux 是否啟用及目前狀態如何的指令
如:
1.SELinux Disabled
$ sestatus
SELinux status: disabled
2.SELinux Enabled
mode: enforcing
Policy: targeted
$ sestatus
SELinux status: disabled
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 18
Policy from config file:targeted
Policy booleans:
...skip...
httpd_builtin_scripting active
httpd_disable_trans active
httpd_enable_cgi active
httpd_enable_homedirs active
httpd_ssi_exec active
httpd_tty_comm inactive
httpd_unified active
...skip...
* system-config-securitylevel
圖形化介面的工具程式,除了可以設定防火牆(iptables)外,也可以設定 SELinux
* setenforce
在 SELinux 啟動為 enforcing 的狀況下,可以執行 「setenforce 0「 來將 SELinux 暫時停用
* getsebool and setsebool
/etc/selinux/targeted/booleans 這個檔裡面放的就是各個 Policy 的布林值,不過,在 FC5 之後,已經沒有這個檔了,你可以用
$ getsebool -a
來查看所有的 booleans 設定狀況
或是使用如:
$ setsebool -P httpd_disable_trans 1
來將 httpd_disable_trans 停用,這樣其實也就等於是停用 SELinux 對 httpd 的保護了
* chcon
傳統的 chmod 指令是用來設定檔案或目錄的權限的,而同樣的 chcon 指令則是用來設定 SELinux 對檔案或目錄的 content 標籤的
* fixfiles
fixfiles check 指令可以用來檢查檔案或目錄的 SELinux content
fixfiles restore 指令則可以用來修正(還原)檔案或目錄的 SELinux content
fixfiles relabel 則是會重新修正(還原)所有的檔案及目錄的 SELinux content
如何在 SELinux 啟動為 enforcing 的狀況下也讓 Web Server(httpd) 能正常運作?
前面提到,我們可以將 SELinux 停用(disabled) 或是執行 「setsebool -P httpd_disable_trans 1「 來停用 SELinux 對 httpd 的保護,這樣,httpd 就可以跟平常一樣的運作了
那如果我們要啟用 SELinux 且讓 httpd 也可以正常運作呢?
舉個例子來說:
[root@acer:~] pwd
/root
[root@acer:~] echo "< ? phpinfo(); ?>」 > index.php
[root@acer:~] mv index.php /var/www/html/
`index.php' -> `/var/www/html/index.php'
[root@acer:~]
在上述的指令中,我在 root 的 $HOME 目錄下產生了一個 index.php 的檔案,內容為顯示 phpinfo
然後把再把這個檔案搬移到 /var/www/html 目錄底下,然後開 browser 來瀏覽 http://localhost/index.php 這個頁面,得到的畫面卻是:
Forbidden
You don't have permission to access /index.php on this server.
Additionally, a 403 Forbidden error was encountered while trying to use an ErrorDocument to handle the request.
沒錯,無法存取,我們來看一看到底是怎麼回事:
[root@acer:~] ls -Z /var/www/html/index.php
-rw-r--r-- root root root:object_r:user_home_t /var/www/html/index.php
[root@acer:~]
[root@acer:~] ls -Z /var/www/
drwxr-xr-x root root system_u:object_r:httpd_sys_script_exec_t cgi-bin/
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t error/
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t html/
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t icons/
drwxr-xr-x root root system_u:object_r:httpd_sys_content_t manual/
因為 index.php 的 content type 為 user_home_t 而不是 httpd_sys_content_t 所以無法存取
因此,我們可以執行:
[root@acer:~] chcon -u system_u -t httpd_sys_content_t /var/www/html/index.php
[root@acer:~] ls -Z /var/www/html/index.php
-rw-r--r-- root root system_u:object_r:httpd_sys_content_t /var/www/html/index.php
請再開一次 browser (or reload),現在是不是可以正常存取 index.php 頁面了呢?
再看另一個例子:
[root@acer:~] wget http://wordpress.org/latest.tar.gz
--13:36:59-- http://wordpress.org/latest.tar.gz
=> `latest.tar.gz'
Resolving wordpress.org... 72.232.44.122
Connecting to wordpress.org|72.232.44.122|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [application/octet-stream]
[ < => ] 505,475 90.49K/s
13:37:07 (90.28 KB/s) - `latest.tar.gz' saved [505475]
[root@acer:~] tar zxf latest.tar.gz
[root@acer:~] mv wordpress /var/www/html/wp
`wordpress' -> `/var/www/html/wp'
瀏覽 http://localhost/wp/ 的結果一樣被拒絕存取,因為 content 的問題
[root@acer:~] ls -dZ /var/www/html/wp
drwxr-xr-x 1025 1011 root:object_r:user_home_t /var/www/html/wp/
同樣的,我們可以用 chone -R 指令來修正 content
[root@acer:~] chcon -R -u system_u -t httpd_sys_content_t /var/www/html/wp/
或是使用 fixfiles restore 指令也可以
[root@acer:~] fixfiles restore /var/www/html/wp/
修正過後的狀況:
[root@acer:~] ls -dZ /var/www/html/wp
drwxr-xr-x apache apache system_u:object_r:httpd_sys_content_t /var/www/html/wp/
相關參考檔案
http://linux.vbird.org/somepaper/20050801_SELinux.pdf
http://fedoraproject.org/wiki/SELinux
http://fedora.redhat.com/docs/selinux-faq/
http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/selinux-guide/
http://www.redhat.com/magazine/001nov04/features/selinux/
http://www.redhat.com/magazine/006apr05/features/selinux/
http://www.tresys.com/selinux/index.shtml
http://www.nsa.gov/selinux/
==========
[轉]:SELinux for Apache CGI
Wednesday, March 15th, 2006
http://blog.derjohng.com/category/computer/network
在 ES3(Redhat Enterprise Server 3) 以及 Fedora 3 以後的版本,預設都會開啟此套件, 許多網頁會建議,/etc/selinux/config 這個檔,SELINUX=enforcing 改成 SELINUX=disabled ,嗯,這不是好主意,因為這是完全關閉該機制。就像買了個人防護軟體,然後,將所有的安全預設值,全部關掉一樣。
主要用 chcon 這個指令將要提供服務的目錄加以設定,-R 表示 recursive dir, -t 表示要指定的類型
- chcon -R -t httpd_user_content_t <要被 cgi process 讀取的檔案目錄>
- chcon -R -t httpd_sys_script_exec_t <提供 CGI 服務的目錄>
其餘 chcon 設 httpd 的其他類型,參考這裡 。
如果設定後,覺得總是有問題,可以用下列指令回歸到原始的設定,再重新設定
- /sbin/restorecon -v -R /home
==========
[轉]: 【Aapche + PHP】如何解決(Fedora | RedHat)中Apache無法載入 libphp(4 | 5).so 模組的問題
2007-07-06 10:54
http://blog.xuite.net/tunedgr02/data/12469046
在 (Fedora | RedHat)中如果手動編譯 Apache 及 PHP 時,在 Apache 啟動時卻無法加載 libphp(4 | 5).so。
錯誤訊息:
cannot restore segment prot after reloc: Permission denied
解決方式:
1. 使用 chcon 指令改 libphp(4 | 5).so 預設的安全性政策。(建議使用)
[root@GR00 root]# ls --lcontext
[root@GR00 root]# chcon -t texrel_shlib_t /usr/local/httpd-2.2.4/modules/libphp(4|5).so
[root@GR00 root]# ls --lcontext
==========
[轉]:How-To : Install NVIDIA graphics driver
Last Update - 04 / 11 / 2007 By DarkRanger .
http://darkranger.no-ip.org/document/linux/nvidia.htm
有啟用 SELinux 的使用者必須注意 ( DR 預 設都是關閉的 ) , 要成功啟動 NVIDIA 驅動程式 , 第一個方法就是關閉它 , 而第二個方法則必須執行以下指令 .
x86 系統 :
# chcon -t texrel_shlib_t /usr/lib/xorg/modules/drivers/nvidia_drv.so
# chcon -t texrel_shlib_t /usr/lib/xorg/modules/extensions/libglx.so.1.0.9746
# chcon -t texrel_shlib_t /usr/lib/tls/libnvidia-tls.so.1
# chcon -t texrel_shlib_t /usr/lib/libGLcore.so.1.0.9746
留言列表