免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
SELinux 入門

幾乎可以肯定每個(gè)人都聽說過 SELinux (更準(zhǔn)確的說,嘗試關(guān)閉過),甚至某些過往的經(jīng)驗(yàn)讓您對 SELinux 產(chǎn)生了偏見。不過隨著日益增長的 0-day 安全漏洞,或許現(xiàn)在是時(shí)候去了解下這個(gè)在 Linux 內(nèi)核中已經(jīng)有8年歷史的強(qiáng)制性訪問控制系統(tǒng)(MAC)了。

SELinux 與強(qiáng)制訪問控制系統(tǒng)

SELinux 全稱 Security Enhanced Linux (安全強(qiáng)化 Linux),是 MAC (Mandatory Access Control,強(qiáng)制訪問控制系統(tǒng))的一個(gè)實(shí)現(xiàn),目的在于明確的指明某個(gè)進(jìn)程可以訪問哪些資源(文件、網(wǎng)絡(luò)端口等)。

強(qiáng)制訪問控制系統(tǒng)的用途在于增強(qiáng)系統(tǒng)抵御 0-Day 攻擊(利用尚未公開的漏洞實(shí)現(xiàn)的攻擊行為)的能力。所以它不是網(wǎng)絡(luò)防火墻或 ACL 的替代品,在用途上也不重復(fù)。

舉例來說,系統(tǒng)上的 Apache 被發(fā)現(xiàn)存在一個(gè)漏洞,使得某遠(yuǎn)程用戶可以訪問系統(tǒng)上的敏感文件(比如 /etc/passwd 來獲得系統(tǒng)已存在用戶),而修復(fù)該安全漏洞的 Apache 更新補(bǔ)丁尚未釋出。此時(shí) SELinux 可以起到彌補(bǔ)該漏洞的緩和方案。因?yàn)?/etc/passwd 不具有 Apache 的訪問標(biāo)簽,所以 Apache 對于 /etc/passwd 的訪問會(huì)被 SELinux 阻止。

相比其他強(qiáng)制性訪問控制系統(tǒng),SELinux 有如下優(yōu)勢:

  • 控制策略是可查詢而非程序不可見的。
  • 可以熱更改策略而無需重啟或者停止服務(wù)。
  • 可以從進(jìn)程初始化、繼承和程序執(zhí)行三個(gè)方面通過策略進(jìn)行控制。
  • 控制范圍覆蓋文件系統(tǒng)、目錄、文件、文件啟動(dòng)描述符、端口、消息接口和網(wǎng)絡(luò)接口。

那么 SELinux 對于系統(tǒng)性能有什么樣的影響呢?根據(jù) Phoronix 在 2009 年使用 Fedora 11 所做的橫向比較來看,開啟 SELinux 僅在少數(shù)情況下導(dǎo)致系統(tǒng)性能約 5% 的降低。

SELinux 是不是會(huì)十分影響一般桌面應(yīng)用及程序開發(fā)呢?原先是,因?yàn)?SELinux 的策略主要針對服務(wù)器環(huán)境。但隨著 SELinux 8年來的廣泛應(yīng)用,目前 SELinux 策略在一般桌面及程序開發(fā)環(huán)境下依然可以同時(shí)滿足安全性及便利性的要求。以剛剛發(fā)布的 Fedora 15 為例,筆者在搭建完整的娛樂(包含多款第三方原生 Linux 游戲及 Wine 游戲)及開發(fā)環(huán)境(Android SDK + Eclipse)過程中,只有 Wine 程序的首次運(yùn)行時(shí)受到 SELinux 默認(rèn)策略的阻攔,在圖形化的“SELinux 故障排除程序”幫助下,點(diǎn)擊一下按鈕就解決了。

了解和配置 SELinux

1. 獲取當(dāng)前 SELinux 運(yùn)行狀態(tài)

getenforce

可能返回結(jié)果有三種:Enforcing、PermissiveDisabled。Disabled 代表 SELinux 被禁用,Permissive 代表僅記錄安全警告但不阻止可疑行為,Enforcing 代表記錄警告且阻止可疑行為。

目前常見發(fā)行版中,RHEL 和 Fedora 默認(rèn)設(shè)置為 Enforcing,其余的如 openSUSE 等為 Permissive。

2. 改變 SELinux 運(yùn)行狀態(tài)

setenforce [ Enforcing | Permissive | 1 | 0 ]

該命令可以立刻改變 SELinux 運(yùn)行狀態(tài),在 Enforcing 和 Permissive 之間切換,結(jié)果保持至關(guān)機(jī)。一個(gè)典型的用途是看看到底是不是 SELinux 導(dǎo)致某個(gè)服務(wù)或者程序無法運(yùn)行。若是在 setenforce 0 之后服務(wù)或者程序依然無法運(yùn)行,那么就可以肯定不是 SELinux 導(dǎo)致的。

若是想要永久變更系統(tǒng) SELinux 運(yùn)行環(huán)境,可以通過更改配置文件 /etc/sysconfig/selinux 實(shí)現(xiàn)。注意當(dāng)從 Disabled 切換到 Permissive 或者 Enforcing 模式后需要重啟計(jì)算機(jī)并為整個(gè)文件系統(tǒng)重新創(chuàng)建安全標(biāo)簽(touch /.autorelabel && reboot)。

3. SELinux 運(yùn)行策略

配置文件 /etc/sysconfig/selinux 還包含了 SELinux 運(yùn)行策略的信息,通過改變變量 SELINUXTYPE 的值實(shí)現(xiàn),該值有兩種可能:targeted 代表僅針對預(yù)制的幾種網(wǎng)絡(luò)服務(wù)和訪問請求使用 SELinux 保護(hù),strict 代表所有網(wǎng)絡(luò)服務(wù)和訪問請求都要經(jīng)過 SELinux。

RHEL 和 Fedora 默認(rèn)設(shè)置為 targeted,包含了對幾乎所有常見網(wǎng)絡(luò)服務(wù)的 SELinux 策略配置,已經(jīng)默認(rèn)安裝并且可以無需修改直接使用。

若是想自己編輯 SELinux 策略,也提供了命令行下的策略編輯器 seedit 以及 Eclipse 下的編輯插件 eclipse-slide

4. coreutils 工具的 SELinux 模式

常見的屬于 coreutils 的工具如 ps、ls 等等,可以通過增加 Z 選項(xiàng)的方式獲知 SELinux 方面的信息。

ps auxZ | grep lldpad

system_u:system_r:initrc_t:s0 root 1000 8.9 0.0 3040 668 ? Ss 21:01 6:08 /usr/sbin/lldpad -d

ls -Z /usr/lib/xulrunner-2/libmozjs.so

-rwxr-xr-x. root root system_u:object_r:lib_t:s0 /usr/lib/xulrunner-2/libmozjs.so

以此類推,Z 選項(xiàng)可以應(yīng)用在幾乎全部 coreutils 工具里。

Apache SELinux 配置實(shí)例

1. 讓 Apache 可以訪問位于非默認(rèn)目錄下的網(wǎng)站文件

首先,用 semanage fcontext -l | grep '/var/www' 獲知默認(rèn) /var/www 目錄的 SELinux 上下文:

/var/www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0

從中可以看到 Apache 只能訪問包含 httpd_sys_content_t 標(biāo)簽的文件。

假設(shè)希望 Apache 使用 /srv/www 作為網(wǎng)站文件目錄,那么就需要給這個(gè)目錄下的文件增加 httpd_sys_content_t 標(biāo)簽,分兩步實(shí)現(xiàn)。

首先為 /srv/www 這個(gè)目錄下的文件添加默認(rèn)標(biāo)簽類型:semanage fcontext -a -t httpd_sys_content_t '/srv/www(/.*)?' 然后用新的標(biāo)簽類型標(biāo)注已有文件:restorecon -Rv /srv/www 之后 Apache 就可以使用該目錄下的文件構(gòu)建網(wǎng)站了。

其中 restorecon 在 SELinux 管理中很常見,起到恢復(fù)文件默認(rèn)標(biāo)簽的作用。比如當(dāng)從用戶主目錄下將某個(gè)文件復(fù)制到 Apache 網(wǎng)站目錄下時(shí),Apache 默認(rèn)是無法訪問,因?yàn)橛脩糁髂夸浀南碌奈募?biāo)簽是 user_home_t。此時(shí)就需要 restorecon 將其恢復(fù)為可被 Apache 訪問的 httpd_sys_content_t 類型:

restorecon reset /srv/www/foo.com/html/file.html context unconfined_u:object_r:user_home_t:s0->system_u:object_r:httpd_sys_content_t:s0

2. 讓 Apache 偵聽非標(biāo)準(zhǔn)端口

默認(rèn)情況下 Apache 只偵聽 80 和 443 兩個(gè)端口,若是直接指定其偵聽 888 端口的話,會(huì)在 service httpd restart 的時(shí)候報(bào)錯(cuò):

Starting httpd: (13)Permission denied: make_sock: could not bind to address [::]:888

(13)Permission denied: make_sock: could not bind to address 0.0.0.0:888

no listening sockets available, shutting down

Unable to open logs

這個(gè)時(shí)候,若是在桌面環(huán)境下 SELinux 故障排除工具應(yīng)該已經(jīng)彈出來報(bào)錯(cuò)了。若是在終端下,可以通過查看 /var/log/messages 日志然后用 sealert -l 加編號(hào)的方式查看,或者直接使用 sealert -b 瀏覽。無論哪種方式,內(nèi)容和以下會(huì)比較類似:

SELinux is preventing /usr/sbin/httpd from name_bind access on the tcp_socket port 888.

***** Plugin bind_ports (92.2 confidence) suggests *************************

If you want to allow /usr/sbin/httpd to bind to network port 888

Then you need to modify the port type.

Do

# semanage port -a -t PORT_TYPE -p tcp 888

`where PORT_TYPE is one of the following: ntop_port_t, http_cache_port_t, http_port_t.`

***** Plugin catchall_boolean (7.83 confidence) suggests *******************

If you want to allow system to run with NIS

Then you must tell SELinux about this by enabling the 'allow_ypbind' boolean.

Do

setsebool -P allow_ypbind 1

***** Plugin catchall (1.41 confidence) suggests ***************************

If you believe that httpd should be allowed name_bind access on the port 888 tcp_socket by default.

Then you should report this as a bug.

You can generate a local policy module to allow this access.

Do

allow this access for now by executing:

# grep httpd /var/log/audit/audit.log | audit2allow -M mypol

# semodule -i mypol.pp

可以看出 SELinux 根據(jù)三種不同情況分別給出了對應(yīng)的解決方法。在這里,第一種情況是我們想要的,于是按照其建議輸入:

semanage port -a -t http_port_t -p tcp 888

之后再次啟動(dòng) Apache 服務(wù)就不會(huì)有問題了。

這里又可以見到 semanage 這個(gè) SELinux 管理配置工具。它第一個(gè)選項(xiàng)代表要更改的類型,然后緊跟所要進(jìn)行操作。詳細(xì)內(nèi)容參考 Man 手冊

3. 允許 Apache 訪問創(chuàng)建私人網(wǎng)站

若是希望用戶可以通過在 ~/public_html/ 放置文件的方式創(chuàng)建自己的個(gè)人網(wǎng)站的話,那么需要在 Apache 策略中允許該操作執(zhí)行。使用:

setsebool httpd_enable_homedirs 1

setsebool 是用來切換由布爾值控制的 SELinux 策略的,當(dāng)前布爾值策略的狀態(tài)可以通過 getsebool 來獲知。

默認(rèn)情況下 setsebool 的設(shè)置只保留到下一次重啟之前,若是想永久生效的話,需要添加 -P 參數(shù),比如:

setsebool -P httpd_enable_homedirs 1

總結(jié)

希望通過這一個(gè)簡短的教程,掃除您對 SELinux 的誤解甚至恐懼,個(gè)人感覺它并不比 iptables 策略復(fù)雜。如果希望您的服務(wù)器能有效抵擋 0-day 攻擊時(shí),那么 SELinux 或許就是一個(gè)值得考慮的緩和方案。

致謝

本文大量參考自 Vincent Danen 發(fā)表在 TechRepublic 上的 SELinux 系列教程1,23。在此向 Vincent Danen 致敬

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Permission denied: make_sock: could not bind to address [::]:81 Apache 虛擬主機(jī)
Selinux
修改apache port
RHCSA 系列(十三):在RHEL 7 中使用SELinux 進(jìn)行強(qiáng)制訪問控制
apache 集成weblogic插件錯(cuò)誤問題
Practical SELinux: Port contexts and handling access alerts
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服