- 浏览: 2880355 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (1173)
- 名言警句 (5)
- 心情随笔 (50)
- 数据库 (57)
- Java基础 (241)
- J2EE框架 (91)
- 数据结构 (12)
- 程序设计 (21)
- WEB技术 (128)
- 网络日志 (12)
- IT资讯 (247)
- linux (64)
- solaris (2)
- 其它 (143)
- WebService (4)
- 日语学习 (2)
- 机器人 (5)
- Android (5)
- cgywin (3)
- Game (1)
- DWR (1)
- spring (8)
- canvas (1)
- Guava (3)
- Modbus (5)
- 测试 (6)
- mongodb (9)
- Quartz (2)
- Cron (1)
- windows (2)
- 持续集成 (1)
- bootstrap (3)
- 结对编程 (1)
- nodejs (1)
- Netty (1)
- 安全 (3)
- webstorm (2)
- sparkline (1)
- Job (1)
- git (3)
- Maven (3)
- knockout (5)
- jquery (1)
- bower (1)
- docker (1)
- confluence (4)
- wiki (1)
- GoogleMap (1)
- jekyll (10)
- ruby (2)
- npm (3)
- browserify (1)
- gulp (3)
- openwrt (1)
- discuz (3)
- 输入法 (1)
- JPA (1)
- eclipse (2)
- IntelliJ (1)
- css (1)
- 虚拟机 (1)
- 操作系统 (1)
- azkaban (2)
- scrum (1)
最新评论
-
pangxiea_:
你好, 想请问一下 Linux下 这么使用rxtxcomm 在 ...
使用Java进行串口通信 -
abababudei:
请教一下,这个您是怎么解决的:/dev/ttyS2enteri ...
Java应用程序的MODBUS通讯 -
xuniverse:
hannibal005 写道楼主,我问下 request.se ...
用javascript与java进行RSA加密与解密 -
atxkm:
找了一下午,终于找到了
gulp 拷贝文件时如何移除文件目录结构 -
kalogen:
gtczr 写道非常感谢,经过我自己的修改,已经完美实现。发出 ...
用javascript与java进行RSA加密与解密
作者:徐秉義(Albert Hsu)
SELinux(全名 Security-Enhanced Linux)其主要用意在於加強 Linux 主機安全性,尤其是應用在 Linux 作為各類型伺服器時,限制各類型 daemon(也就是服務)只能夠存取她自己該存取的檔案,遇到服務欲存取她不應存取的檔案與目錄時,此時 SELinux 就會阻擋住這些存取動作,這也就是開啟 SELinux 功能會保護 Linux Server 安全,就算是遇到程式安全性漏洞導致站台被攻擊時,所造成的損傷能夠降低許多的主因。
通常將系統調整的越安全,使用上就會越容易感受到不方便;當 SELinux 開啟就經常遇到 SELinux 把某些我們在 Linux 常用動作『卡住』,雖然可以將 SELinux 關閉來解決這類情況,但卻辜負 SELinux 保護我們主機的一番美意,較建議的方式是學習 SELinux 觀念並實際調整 SELinux 相關設定,這樣子 Linux Server 才會更加地安全。
SELinux 基礎認識
我們這次也是從預設方式安裝 RHEL5 完成後開始吧!用此方法裝好的 RHEL5 會開啟 SELinux 功能來保護 Linux 主機,我們可以使用「sestatus」指令來觀察 SELinux 運作狀態(status)如下圖。
指令執行後顯示 SELinux status(SELinux 狀態)是 enabled(啟用)且 Current mode(正在運作模式)是 enforcing(強制執行中)也就是此時 SELinux 是來真的!是會真正地擋住有可能危害主機安全的操作。
SELinux 總開關
上述提到 SELinux 狀態大致上有兩種,分別是 enabled(啟用)與 disabled(停用)這感覺像是 SELinux 的一個『總開關』,這個總開關的設定檔案位於「/etc/selinux/config」由此檔案的上半部(及其註解)不難發現「啟用」中還細分兩個:一 個是真正會阻擋的「enforcing」與僅顯示警告訊息不阻擋的「permissive」。
enabled(啟用) | disabled(停用) | |
enforcing | permissive | disabled |
啟用會阻擋 | 啟用不阻擋 顯示警告訊息 |
停用 SELinux 功能 |
溫馨提示:上述檔案的下半部 SELinux TYPE(型態)預設採用 targeted 用以保護 Linux daemon 為主。
SELinux 總開關控制方法
關於總開關的控制方法,直覺方式可以直接編輯設定檔案「/etc/selinux/config」將『SELINUX=enforcing』那一行變更並重新開機即可。若是要使用選單(menu)工具或是圖形工具設定的話也可以(改完同樣要重新開機使其生效)。
直接編輯文字檔案 | 檔名 /etc/selinux/config 檔案內容 SELINUX=... 此行 |
選單模式(menu) | system-config-securitylevel |
圖型模式(GUI) | system-config-securitylevel system-config-selinux |
system-config-securitylevel 選單模式設定畫面
system-config-securitylevel 圖形模式設定畫面
system-config-selinux 圖形模式設定畫面
還有一種關閉 SELinux 功能的方法是從 kernel 下手,此法是設定載入 kernel 時下給 kernel 參數「selinux=0」即可關閉 SELinux 功能,此時就算是 /etc/selinux/config 設定 SELinux enforcing 也是無法啟用 SELinux 功能。若以 GRUB 開機程式來說會是設定在 /boot/grub/menu.lst 檔案內 kernel 那一行(下圖為範例)
security context
SELinux 是以 linux 檔案系統權限為基礎,再加上 security context 來加強權限安全管理,我們可以用 ls 搭配 -Z 選項來觀察檔案的 security context;指令 ps 搭配 -Z 選項來觀察行程的 security context。
Linux 執行許多 daemon 像是 httpd、ftpd、smbd、nfsd…這些都是行程(process),SELinux 主要是利用檔案以及行程的 security context 來判斷以及限制行程是否有權利存取相關檔案與目錄,限制行程存取檔案的同時也就限制 daemon 所能存取的檔案或目錄,達到使 Linux 系統更加安全的主要目的。
假設遇到 SELinux 擋住了我們想要存取的資料時,直覺的方式是將 security context 調成正確使行程能夠存取檔案即可,用到的指令有二個:一個是將檔案『回存』成 SELinux 預設 context 的「restorecon」指令,另一個是『改變』檔案 context 的「chcon」指令,這兩個指令較詳細的使用方法會在後續範例中介紹。
SELinux 布林值(小開關)
先前已介紹過 SELinux 總開關的設定檔案以及設定方式與指令,接下來介紹的是在 SELinux 總開關開啟的狀態下才會有作用的 SELinux 小開關,這一系列的小開關是 SELinux 針對應用程式(尤其是 daemon)所設計出來的「布林值」,顯示及設定這方面資訊的指令恰好就與「布林」(boolean)有關,分別是觀看一系列布林值的 「getsebool」與設定修改布林值的「setsebool」,另外圖形也可以設定 SELinux 布林值介面是在「system-config-selinux」程式畫面的左邊【Boolean】選單內。
溫馨提示:筆者把這一系列布林值想成「小開關」單純只是方便記憶。
指令「getsebool -a」的畫面。
setenforce 指令
這個指令主要是用來『暫時』將當下運作的狀態(Current mode)由 enforcing 模式切換至 permissive 若是遇到短時間不想啟用 SELinux 時,這個功能會是蠻好用的。使用指令「setenforce 0」(關閉 enforcing)「setenforce 1」(開啟 enforcing),可由「sestatus」指令來觀察現在的狀態。
SELinux 相關 log
當 SELinux 有拒絕(deny)到某些檔案目錄被存取時,通知方式會在桌面的右上角有顆『金星』,點『金星』進去看就會有詳細說明,這是圖形模式情況下的通知情況,倘 若是以遠端文字模式來管理伺服器的話,因為沒有圖形來顯示金星,此時就需要去檢視系統紀錄才會比較清楚來龍去脈,通常在 /var/log/messages 最底下會有最新的 SELinux log 資訊,用 tail 指令來檢視此檔案還蠻方便的。
溫馨提示:/var/log/messages 是重要的系統紀錄檔案,許多 daemon 啟動停用正常及不正常的紀錄,都會記載在這個檔案。
附帶一提的 /etc/init.d/auditd 這個 init scripts 啟動的 auditd 寫入 /var/log/audit/audit.log 紀錄檔,也有部份的 SELinux 相關訊息;/etc/init.d/setroubleshoot 這個 SELinux trouble shoot daemon 的啟停 scripts 就是出現『金星』效果的主因。
SELinux 實戰設定範例
在幾年前架設 Linux 各類 Server 時,大概只需要注意 firewall 有沒有擋住要開啟的服務就足夠了,近年來因為越來越注重安全,所以當 SELinux 開啟時,在架設各類伺服器時就可能會發生存取失敗的現象,接下來就以幾個常見的狀況作為範例,來介紹如何設定及調校 SELinux。
ftp Server 基本配置
說到檔案存取遭到 SELinux 限制,首當其衝的 daemon 就是專司檔案上傳與下載的 ftpd。以 RHEL5 來做示範的話,就是介紹安裝 vsftpd 以及關於 SELinux 設定,在 yum 設定成功正確的情況下(請參考筆者介紹 yum Client/Server 相關設定文件),安裝、重新啟動、設定開機自動啟動 vsftpd 相信大家都不陌生,指令簡介如下:
「yum install vsftpd」安裝 vsftpd
「/etc/init.d/vsftpd restart」重新啟動 vsftpd
「chkconfig vsftpd on」設定下次開機自動啟動 vsftpd
溫馨提示:ftpd 關於防火牆設定請參考筆者 firewall 相關文件,若因簡化測試暫時先關掉防火牆也無妨。
匿名存取 ftp Server 之 SELinux 相關設定範例
RHEL5 預設值 ftp 匿名存取是開放的,除此之外使用 Unix 帳號/密碼 ftp 登入也是開放的(但是帳號密碼登入方式會被 SELinux 擋住),我們先測試匿名下載有關 SELinux 設定的部份(修改 security context 來解決),再來測試 Unix 帳號/密碼 ftp 登入有關 SELinux 設定的部份(調整 SELinux 布林值來解決)。
對於 SELinux 來說,該存取的檔案被存取,不該被存取的檔案應該要擋住,所以匿名下載的資料目錄,資料若是直接在那個目錄下產生的話,算是該被存取的可以被正常存取,至 於先在別地方(例如:使用者家目錄或 /tmp 目錄)產生的檔案或目錄,之後再搬過去的話,就應該會被阻擋住存取。
測試的部份是先「直接產生」在匿名存取目錄(也就是 ftp 帳號的家目錄)下,例如檔名 foo.txt,則可正常 ftp 存取不會被 SELinux 擋住;接著測試先在 root 的家目錄產生 foo2.txt 之後再搬至 ftp 的家目錄,後來 ftp 過來存取時,則會因為 SELinux 安全性(security context)規則而阻擋。
圖內的指令解說如下:
指令「echo test > /var/ftp/foo.txt」直接產生檔案 foo.txt(內文 test)在 ftp 家目錄 /var/ftp 下
指令「lftp localhost」文字模式 ftp 到自己這台電腦當成客戶端,測試存取 foo.txt 正常。
指令「echo test > foo2.txt」接產生檔案 foo2.txt(內文 test)在 /root 家目錄下
指令「mv foo2.txt /var/ftp」將檔案 foo2.txt 搬到 /var/ftp 下
再度使用指令「lftp localhost」這次只會看到原來的 foo.txt 看不到後來的 foo2.txt(因為 SELinux 擋住了。
這次 SELinux 阻擋存取主要是 security context 不正確所造成,由「ls -Z /var/ftp」看出 foo2.txt 與 foo.txt(以及 pub 目錄)的 security context 不同(user_home_t 那一行),解決方法是使用指令「restorecon -r /var/ftp」將 /var/ftp 目錄下的資料統統回存成預設的 security context 即可。
Unix 帳號存取 ftp Server 之 SELinux 相關設定範例
接下來測試的是 Unix 帳號用 ftp 方式登入傳輸資料,建立一個測試帳號 foo 密碼順便設定一下(或是清空也可以),接著用「lftp -u foo localhost」指令來測試 ftp 登入,發現會登入失敗 OOPS 而無法切換至使用者家目錄。
趕緊觀察 /var/log/messages 檔案的末段,會發現 SELinux 之 setroubleshoot 記載的訊息,提到可以用「sealert -l d25aea20-7088-4db1-9505-8f6dbdbe366f」指令來觀看完整紀錄。
執行上述 sealert 指令後,顯示內容相當豐富,特別注意「setsebool -P ftp_home_dir=1」那一行,意思是說請開啟 SELinux 布林值『ftp_home_dir』並設定下次開機此值生效(-P 選項)。
下圖為設定「setsebool -P ftp_home_dir=1」先前與之後使用帳號 foo 來 ftp 登入的存取情況。
http Server 之 SELinux 相關設定範例
接下來介紹 httpd 最常遇到的 SELinux 限制。與 ftpd 匿名存取的情況相當類似;直接在 DocumentRoot 下(RHEL5 預設值 /var/www/html)建立網頁文件不會被阻擋住,若是先行在個人的家目錄建立(或是在 /tmp 區建立)稍後在搬至 DocumentRoot 下的文件,就會被 SELinux 擋住。
溫馨提示:httpd 套件安裝、啟停的管理、開機自動啟動以及防火牆設定請參考筆者相關文件(下圖為精簡版範例)。
類似 ftpd 匿名測試方法,先『直接』在 /var/www/html 下產生 index.html 檔案,應該能夠正常被讀取;至於先在 /root 目錄下產生 index2.html 接著再『搬移』至 /var/www/html 下的話,存取應該會被 SELinux 擋住(也是因為 security context 不正確所造成)。
下圖為存取 index.html 與 index2.html 實際情況,圖片下方的 firefox 正常存取 http://localhost/(也就是 index.html);圖片上方的 firefox 存取 http://localhost/index2.html 被 SELinux 所阻擋,右上方立即出現金星,點擊後的解說內容有談到此情形可能的發生原因,以及解決的方法「restorecon -R -v /var/www/html」指令。
溫馨提示:restorecon 的 -R 或 -r 參數皆是 recursive 之意。
Samba Server 之 SELinux 相關設定範例
Samba 使用網路芳鄰方式存取 Linux Server 也是有可能被 SELinux 限制住。以下範例是啟用 Samba Server 讓使用者藉由帳號密碼認證來存取自己的家目錄,這個設定在 Samba 是相當常見的。
溫馨提示:samba 套件安裝、啟停的管理、開機自動啟動以及防火牆設定請參考筆者相關文件(下圖為精簡版範例)。
samba 是使用「smbpasswd」指令來建立或修改使用者 samba 密碼,在 [global] 區段 security = user 等級時,需先行建立 Unix 帳號才可以建立 samba 密碼。
例如:先使用指令「useradd foo」建立帳號 foo 後,再使用指令「smbpasswd -a foo」新增 foo 這個帳號的 samba 密碼。
溫馨提示:testparm 是一個相當好用的測試(test)samba 參數(parameter)的工具。
使用 smbclient 指令搭配 -L 與 -U 來測試存取相當方便,例如:指令「smbclient -L localhost -U foo」意思是使用帳號 foo 登入輸入正確的 smb 密碼後,列出有那些資源可以存取(主要是 foo 的家目錄資源)。
若是真的要將檔案上傳下載的話,則使用以下的格式「smbclient //主機/分享 -U 帳號」例如:指令「smbclient //localhost/foo -U foo」應該會遇到被 SELinux 擋住存取的情況,這時觀察 Server 的 /var/log/messages 後段,應該會有 SELinux 相關訊息(包括 sealert)。
下圖的 sealert 指令執行內容大致上的意思是要我們調的是 SELinux 布林值 samba_enable_home_dirs,這一次我們使用 system-config-selinux 圖形介面來做設定,與指令介面調整的結果應該是差不多的。
在 SELinux 圖形介面修改設定中,點選左邊【Boolean】選單後,右邊點開 Samba 勾選「Allow Samba to share users home directories」確定即可。
之後再次使用 smbclient 連上後,使用 mput / mget 類似 ftp 上傳下載的指令來試著傳輸資料,此時應該就不會被 SELinux 擋住了。
結語
SELinux 使得 Linux Server 變得更安全,不免帶來了些許的不方便,若您是使用 Linux 已經好一陣子以及對 Linux 瞭解已經有一段時日,不妨嘗試地將 SELinux 開起來,遇到無法存取的時候就試著調整看看,久而久之就習慣了 SELinux 開啟的環境。
遇到 SELinux 擋住了想要開放的存取時,查看的 log 檔 /var/log/messages 與 /var/log/audit/audit.log 尾端,裡面也許就會有 sealert 可以看到更詳細的 SELinux 說明,在 sealert 就會顯示調整 SELinux 布林值或是 restorecon(回存 security context)等等指令,另外 chcon 的 --reference=file 用來參照其他檔案設定 security context 的功能也是蠻有機會用到的。
本文雖然僅僅介紹的三個 SELinux 設定範例,但其實 SELinux 設定概念是類似的,簡單的說:布林值的開關應該開的要開、應該關的要關,以及 security context 要對才能正常存取。若還是受不了 SELinux 管得太嚴格的話,就使用 setenforce 0 暫時關閉後,測試看看所需的服務是否正常,確認是否為 SELinux 阻擋,使用 SELinux 還是可以相當地有彈性!
发表评论
-
linux中if -z -d什么意思?
2015-04-27 13:53 1173[ -a FILE ] 如果 FILE 存在则为真。 ... -
linux bash shell 基本知识
2015-04-23 14:01 1236以下为转载内容: $ which bash O ... -
如何处理 bash shell 变量中的斜杠(/)?
2015-02-10 12:19 3639#!/bin/bash ## Our path ... -
通过dos 命令调用git bash
2015-01-14 12:57 19011. 先安装 git windows 客户端 2. ... -
vim常用快捷键
2014-11-24 10:55 737一. 移动: h,j,k,l: ... -
win7 + cygwin + nodejs很详细的安装步骤
2014-04-12 09:23 4437win7下安装node.js详细步骤 1.下载cygwin ... -
open windows explorer in cygwin
2014-01-08 14:29 731There's a very good implementa ... -
Operator usage in bash shell
2014-01-07 15:19 974Common Bash comparisons Op ... -
call bash shell script by dos command
2014-01-07 13:50 18111. at first we have a scrip ... -
10 个很有用的高级 Git 命令
2013-08-26 19:56 908迄今,我已经使用Git很长一段时间了,考虑分享一些不管你是团 ... -
cygwin很多命令显示command not found的解决办法
2013-08-14 13:53 2752cygwin很多命令显示command not found的 ... -
linux 服务器初始基本设置
2013-07-18 17:16 968初始安全设置 登录以后,应该马上安装安全更新,这很重要,安 ... -
10个VI的常用技巧
2013-07-17 12:42 9331.打开和关闭行号 :s ... -
some useful notes for cygwin
2013-05-22 10:48 1108useful alias list: ========== ... -
Change cygwin Home location
2013-05-22 10:20 1049Directly edited the Cygwin.bat ... -
vim语法高亮
2013-05-21 18:51 1061vi配置:1.在用户目录建立.vimrc[flying_dog ... -
bash shell notes:
2013-01-29 12:04 1112#!/bin/bash config_file ... -
how to call groovy application in linux
2013-01-29 10:21 945#!/bin/bash function launc ... -
Userful shell commoand in linux
2013-01-04 16:08 1065Userful shell commoand in li ... -
awk - 10 examples to group data in a CSV or text file
2012-06-07 18:28 1819awk is very powerful when i ...
相关推荐
SELinux 手册 SELinux(Security-Enhanced Linux)是一种基于 Linux 操作系统的访问控制机制,旨在提高系统的安全性和稳定性。它通过 Mandatory Access Control(强制访问控制)机制来控制进程和文件之间的交互,以...
**SELinux:Linux安全增强系统详解** 在深入探讨SELinux之前,我们首先需要理解它的全称:Security-Enhanced Linux,即安全增强型Linux。它是一种强制访问控制(MAC)系统,由美国国家安全局(NSA)开发,旨在提高...
《SELinux详解》是一本深度解析安全增强的Linux(SELinux)操作系统的书籍,旨在帮助读者理解、编写、修改和管理SELinux策略,提升Linux系统的安全性。书中详细介绍了SELinux的作用、生效机制以及策略模块的编写,...
10. **案例研究**:可能包含针对特定场景的配置示例,如安全Web服务器或电子邮件服务器的设定。 通过阅读**SELinux详解** 和 **SELinux中文** 这两份文档,初学者可以全面了解SELinux的工作原理,并掌握实际操作中...
"SELinux中文指南" SELinux(Security-Enhanced Linux)是一种强大的 Linux 安全机制,旨在提供一个灵活、可配置的安全解决方案。本文档提供了 SELinux 的详细介绍,包括语法规则、安装、配置、用户管理等方面的...
"SELinux详解" SELinux(Security-Enhanced Linux)是一种基于 Linux 的安全增强系统,旨在提供一个安全、可靠的计算环境。在这本书中,我们将详细介绍 SELinux 的概念、架构、机制和策略语言,帮助读者理解和掌握 ...
标题“Lock SELinux forced mode.zip”暗示了这个压缩包与Linux系统的安全增强层(Security-Enhanced Linux,简称SELinux)有关,特别是涉及到强制模式(forced mode)的配置。在这个场景下,SELinux是一个内核模块...
**SELinux系统详解** 安全增强型Linux(SELinux)是一种强制访问控制(MAC)系统,它增强了Linux操作系统的安全性,防止恶意软件和攻击者通过权限提升来破坏系统。SELinux的核心在于其策略,该策略定义了系统中每个...
SELinux by example is the first complete, hands-on guide to using SELinux in production environments. Authored by three leading SELinux researchers and developers, it illuminates every facet of ...
[Packt Publishing] SELinux 系统管理手册 (英文版) [Packt Publishing] SELinux System Administration (E-Book) ☆ 图书概要:☆ A comprehensive guide to walk you through SELinux access controls ...
SELinux Notebook 是一本关于 SELinux 的开源书籍,最初由 Richard Haines创建并捐赠给 SELinux 社区。该笔记本的目标是成为有关 SELinux 的最新、最全面的书籍,涵盖 Linux 内核组件、用户空间库和工具、策略工具链...
### SELinux详解 #### SELinux概述 SELinux(Security-Enhanced Linux)是一种为Linux内核提供的强制访问控制(MAC)安全扩展。本节将详细解释SELinux的基础知识及其架构。 - **背景**:操作系统访问控制的历史和...
SELinux(Security-Enhanced Linux)是一种安全子系统,它提供对Linux内核的增强安全特性,通过强制访问控制(MAC)机制来限制进程和用户对系统资源的访问。其核心目的是在操作系统层面上提供更好的安全控制,以防止...
SELinux(Security-Enhanced Linux)是Linux操作系统中一种强制访问控制策略的实现,它为系统提供了更高级别的安全防护。在Linux系统启动时,SELinux的初始化流程扮演着至关重要的角色,确保系统的安全策略得以正确...
`The_SELinux_Notebook-4th_Edition.pdf`很可能是一本详细阐述SELinux理论与实践的第四版指南,涵盖了SELinux的基础概念、配置、策略编写和调试方法。读者可以从中了解到如何设置和管理SELinux策略,理解其工作原理...
### SELinux中文学习资料深入版 #### 操作系统中访问控制模型的演化 - **访问控制模型的概念(Reference Monitor)** 访问控制模型是计算机系统安全的基础,其核心概念之一是“参考监视器”(Reference Monitor...
在本篇文章中,我们将深入探讨如何在Linux系统中关闭SELinux服务,并且通过文本手册的形式进行详细介绍。本文将从理解SELinux的基本概念入手,逐步深入到具体的关闭步骤、配置文件详解以及可能遇到的问题与解决方案...
这些策略由管理员设定,普通用户无法修改,确保了访问的彻底控制。 2. RBAC(Role-Based Access Control):用户被分配最小权限,通过角色进行权限管理。即使root用户,如果不在特定的角色中,也无法执行特定的管理...