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