如何使用semanage和避免禁用SELinux?
譯文【51CTO.com快譯】SELinux頗具挑戰(zhàn)性;當(dāng)這個(gè)安全層阻止您的應(yīng)用程序或服務(wù)時(shí),您的第一個(gè)反應(yīng)往往是將其設(shè)成“禁用”或“允許”。在安全至關(guān)重要的當(dāng)下,您無(wú)法進(jìn)行這種更改,否則您的整個(gè)系統(tǒng)或網(wǎng)絡(luò)安全堪憂(yōu)。您不想那樣。
為何不使用可助您一臂之力的工具?這款工具就是semanage,它是SELinux策略管理工具。借助semanage,您可以調(diào)整文件上下文、端口上下文和布爾值,這將有助于您確保系統(tǒng)可使用,又不必禁用安全系統(tǒng)。
本文將介紹以下命令:
- semanage boolean
- semanage fcontext
- semanage port
知道這些命令后,您應(yīng)該能夠在Linux系統(tǒng)上更好地使用SELinux。
您需要什么?
運(yùn)行中的Linux實(shí)例(使用SELinux)
擁有sudo特權(quán)的用戶(hù)
如何使用semanage boolean?
使用semanage boolean,您可以啟用和禁用允許規(guī)則集,因而可以為不同的用例允許不同的規(guī)則集。假設(shè)您有一臺(tái)Web服務(wù)器,必須允許讀取用戶(hù)內(nèi)容,比如來(lái)自主目錄的數(shù)據(jù)。SELinux默認(rèn)情況下不允許這么做。使用semanage boolean命令,您可以啟用該功能。
您可以使用semanage boolean命令,通過(guò)以下命令列出所有可用的HTTP相關(guān)策略:
- sudo semanage boolean -l | grep httpd
您將看到幾項(xiàng)條目,比如:
- httpd_read_user_content (off , off) Allow httpd to read user content
每份列表含有布爾值的名稱(chēng)、布爾值的當(dāng)前和持久狀態(tài)以及布爾值描述。如上所示,httpd_read_user_content布爾值設(shè)為off。我們?nèi)绾螁⒂盟?很簡(jiǎn)單:
- sudo semanage boolean -m --on httpd_read_user_content
使用-m選項(xiàng),我們指示SELinux使用后面的選項(xiàng)(--on)來(lái)修改記錄(本例中是httpd_read_user_context)。
就是這樣。您已完成了設(shè)置,SELinux將允許Web服務(wù)器讀取用戶(hù)內(nèi)容。
如果想要列出所有布爾值,看看您還可以做些什么,執(zhí)行以下命令:
- sudo semanage boolean -l
如何使用semanage fcontext?
semanage fcontext命令用于管理文件上下文定義,這包含額外信息(比如SELinux用戶(hù)、角色、類(lèi)型和級(jí)別),以做出訪問(wèn)控制決策。文件上下文是管理員在SELinux上面臨的最大問(wèn)題之一。您可能已經(jīng)創(chuàng)建了一個(gè)新目錄來(lái)容納SSH主機(jī)密鑰,但是如果沒(méi)有正確的文件上下文,SELinux不會(huì)允許通過(guò)SSH訪問(wèn)該目錄。
您可以執(zhí)行什么操作?
可以使用semanage fcontext更改新目錄的文件上下文。
與boolean一樣,fcontext也有可以使用的策略。想查看可用策略的完整列表,請(qǐng)執(zhí)行以下命令:
- sudo semanage fcontext -l
如果想列出所有與SSH守護(hù)程序有關(guān)的策略,請(qǐng)執(zhí)行以下命令:
- sudo semanage fcontext -l | grep sshd
在該列表中,您將看到以下條目:
- /etc/ssh/primes regular file system_u:object_r:sshd_key_t:s0
- /etc/ssh/ssh_host.*_key regular file system_u:object_r:sshd_key_t:s0
- /etc/ssh/ssh_host.*_key\.pub regular file system_u:object_r:sshd_key_t:s0
假設(shè)您要將SSH主機(jī)密鑰放在/data/keys中。創(chuàng)建目錄,將所有鍵移動(dòng)到新主目錄中,并更改sshd_config文件以匹配新映射。嘗試使用SSH時(shí),它會(huì)失敗。為什么?因?yàn)?data/keys沒(méi)有正確的fcontext。可以使用以下兩個(gè)命令解決該問(wèn)題:
- sudo semanage fcontext -a -t sshd_key_t '/data/keys/*.*'
- sudo restorecon -r /data/keys
我們使用semanage fcontxt創(chuàng)建新策略之后,必須使用restorecon命令對(duì)新文件設(shè)置安全上下文。正則表達(dá)式*.*獲取目錄中的所有文件。
如何使用semanage port?
您可能猜到了,semanage port讓您可以在自定義端口上運(yùn)行服務(wù)。如果您嘗試在自定義端口上運(yùn)行服務(wù),該服務(wù)會(huì)失敗。假設(shè)您想在非標(biāo)準(zhǔn)端口上運(yùn)行SSH守護(hù)程序。如果您僅為此配置sshd_config,會(huì)發(fā)現(xiàn)SELinux將阻止您獲得訪問(wèn)權(quán)限,因?yàn)镾ELinux不知道您已進(jìn)行了此更改。
如果想把SSH端口更改為2112:
- semanage port -a -t ssh_port_t -p tcp 2112
然后就要使用以下命令將端口添加到防火墻:
- sudo firewall-cmd --add-port=2112/tcp --permanent
- sudo firewall-cmd --reload
至此,您終于可以使用非標(biāo)準(zhǔn)端口,通過(guò)SSH訪問(wèn)支持SELinux的服務(wù)器。
想列出所有可用的端口策略,請(qǐng)執(zhí)行以下命令:
- sudo semanage port –l
結(jié)論
SELinux是一種功能很強(qiáng)大的工具,擅長(zhǎng)保護(hù)Linux服務(wù)器免受不必要的更改。這種功能帶來(lái)了一定程度的復(fù)雜性。熟悉上述三個(gè)命令,可使管理工作變得更輕松,而不是禁用SELinux或?qū)⑵湓O(shè)置為“許可”模式。
原文標(biāo)題:How to use semanage and avoid disabling SELinux,作者:Jack Wallen
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】