SElinux配置與管理

餘二五發表於2017-11-15

1.1 SElinux概述

SELinux(Security-Enhanced Linux) 是美國國家安全域性(NAS)對於強制訪問控 制的實現,在這種訪問控制體系的限制下,程式只能訪問那些在他的任務中所需要檔案。大部分使用 SELinux 的人使用的都是SELinux就緒的發行版,例如 Fedora、Red Hat Enterprise Linux (RHEL)、Debian 或 Gentoo。它們都是在核心中啟用SELinux 的,並且提供一個可定製的安全策略,還提供很多使用者層的庫和工具,它們都可以使用 SELinux 的功能。

1.1.1 SElinux特點

1.MAC

對訪問的控制徹底化,對所有的檔案、目錄、埠的訪問都是基於策略設定的,可由管理員時行設定。

2.RBAC

對於使用者只賦予最小許可權。使用者被劃分成了一些role(角色),即使是root使用者,如果不具有sysadm_r角色的話,也不是執行相關的管理。哪裡role可以執行哪些domain,也是可以修改的。

3.安全上下文

當啟動selinux的時候,所有檔案與物件都有安全上下文。程式的安全上下文是,安全上下文由使用者:角色:型別表示。

(1)系統根據pam子系統中的pam_selinux.so模組設定登入者執行程式的安全上下文

(2)rpm包安裝會根據rpm包內記錄來生成安全上下文,

(3)如果是手工他建的,會根據policy中規定來設定安全上下文,

(4)如果是cp,會重新生成安全上下文。

(5)如果是mv,安全上下文不變。

1.1.2 安全上下文格式

安全上下文由user:role:type三部分組成,下面分別說明其作用:

1.user identity:類似linux系統中的UID,提供身份識別,安全上下文中的一部分。

三種常見的user:

user_u-:   普通使用者登入系統後預設;

system_u-:開機過程中系統程式的預設;

root-:    root登入後預設;

在targeted policy中users不是很重要;

在strict policy中比較重要,的有預設的selinuxusers都以 “_u”結尾,root除外。

2.role

檔案與目錄的role,通常是object_r;

程式的role,通常是system_r;

使用者的role,targetedpolicy為system_r;

strict policy為sysadm_r,staff_r,user_r

使用者的role,類似於系統中的GID,不同的角色具備不同的許可權;使用者可以具備多個role;但是同一時間內只能使用一role;

role是RBAC的基礎;

3.type

type:用來將主體與客體劃分為不同的組,組每個主體和系統中的客體定義了一個型別;為程式執行提供最低的許可權環境。

當一個型別與執行的程式關聯時,該type也稱為domain,也叫安全上下文。

域或安全上下文是一個程式允許操作的列表,決字一個程式可以對哪種型別進行操作。

1.1.3 SElinux配置檔案

vi/etc/selinux/config

# This filecontrols the state of SELinux on the system.

# SELINUX= cantake 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

#SELINUX=disabled

# SELINUXTYPE=type of policy in use. Possible values are:

# targeted -Only targeted network daemons are protected.

# strict -Full SELinux protection.

SELINUXTYPE=targeted

#SELINUX有「disabled」「permissive」,「enforcing」3種選擇。

1.模式的設定

enforcing:強制模式,只要selinux不允許,就無法執行

permissive:警告模式,將該事件記錄下來,依然允許執行

disabled:關閉selinux;停用,啟用需要重啟計算機。

 

2.策略的設定

targeted:保護常見的網路服務,是selinux的預設值;

stric:提供RBAC的policy,具備完整的保護功能,保護網路服務,一般指令及應用程式。

策略改變後,需要重新啟動計算機。

也可以通過命令來修改相關的具體的策略值,也就是修改安全上下文,來提高策略的靈活性。

 

3.策略的位置

/etc/selinux/<策略名>/policy/

 

1.2 SElinux命令介紹

1.2.1 查詢SElinux狀態命令

1.查詢selinux狀態

[root@redhat~]# sestatus

SELinux status:                 enabled

SELinuxfsmount:                /selinux

Currentmode:                   enforcing

Mode fromconfig file:          enforcing

Policyversion:                 21

Policy fromconfig file:        targeted

 

2.查詢selinux啟用狀態

[root@redhat~]# selinuxenabled

[root@redhat~]# echo $?

0

如果為-256為非啟用狀態。

1.2.2 切換SElinux型別

1.切換成警告模式

[root@redhat~]# setenforce 0或setenforce permissive

[root@redhat~]# sestatus

SELinuxstatus:                 enabled

SELinuxfsmount:                /selinux

Currentmode:                   permissive

Mode fromconfig file:          enforcing

Policyversion:                 21

Policy fromconfig file:        targeted

[root@redhat~]# getenforce

Permissive

 

2.切換成強制模式

[root@redhat~]# setenforce 1

[root@redhat~]# getenforce

Enforcing

注:使用setenforce切換enforcing與permissive模式不需要重啟計算機。

1.2.3 檢查安全上下文

1.檢查帳號的安全上下文

[root@redhat~]# id -Z

root:system_r:unconfined_t:SystemLow-SystemHigh

 

2.檢查程式的安全上下文

[root@redhathome]# ps -Z

LABEL                             PIDTTY          TIME CMD

root:system_r:unconfined_t:SystemLow-SystemHigh2383 pts/0 00:00:00 bash

root:system_r:unconfined_t:SystemLow-SystemHigh2536 pts/0 00:00:00 ps

 

3.檢查檔案與目錄的安全上下文

[root@redhathome]# ls -Z

drwx——  tom  tom  system_u:object_r:user_home_dir_ttom

1.2.4 修改檔案/目錄安全上下文與策略

1.chcon命令

chcon -u[user]  物件

      -r[role]

      -t[type]

      -R遞迴

示例:

chcon -R -tsamba_share_t /tmp/abc

注:安全上下文的簡單理解說明,受到selinux保護的程式只能訪問標識為自己只夠訪問的安全上下文的檔案與目錄。

例如:上面解釋為使用smb程式能夠訪問/tmp/abc目錄而設定的安全上下文。

 

2.getsebool命令

獲取本機selinux策略值,也稱為bool值。

getsebool-a  命令同sestatus -b

[root@redhatfiles]# getsebool -a

NetworkManager_disable_trans–> off

allow_cvs_read_shadow–> off

allow_daemons_dump_core–> on

allow_daemons_use_tty–> off

allow_execheap–> off

allow_execmem–> on

allow_execmod–> off

allow_execstack–> on

allow_ftpd_anon_write–> off  

allow_ftpd_full_access–> off

httpd_disable_trans–> off   

 

說明:selinux的設定一般通過兩個部分完成的,一個是安全上下文,另一個是策略,策略值是對安全上下文的補充。

 

3.setsebool命令

setsebool -Pallow_ftpd_anon_write=1

-P 是永久性設定,否則重啟之後又恢復預設值。

示例:

[root@redhatfiles]# setsebool -P allow_ftpd_anon_write=1

[root@redhatfiles]# getsebool allow_ftpd_anon_write

allow_ftpd_anon_write–> on

說明:如果僅僅是安全上下文中設定了vsftpd程式對某一個目錄的訪問,配置檔案中也允許可寫,但是selinux中策略中不允許可寫,仍然不可寫。所以基於selinux保護的服務中,安全性要高於很多。

 

1.3 SElinux應用

selinux的設定分為兩個部分,修改安全上下文以及策略,下面收集了一些應用的安全上下文,供配置時使用,對於策略的設定,應根據服務應用的特點來修改相應的策略值。

1.3.1 SElinux與samba

1.samba共享的檔案必須用正確的selinux安全上下文標記

chcon -R -t samba_share_t /tmp/abc

如果共享/home/abc,需要設定整個主目錄的安全上下文。

chcon -R -r samba_share_t /home

2.修改策略(只對主目錄的策略的修改)

setsebool -P samba_enable_home_dirs=1

setsebool -P allow_smbd_anon_write=1

getsebool 檢視

samba_enable_home_dirs –>on

allow_smbd_anon_write –> on

 

1.3.2 SElinux與nfs

selinux對nfs的限制好像不是很嚴格,預設狀態下,不對nfs的安全上下文進行標記,而且在預設狀態的策略下,nfs的目標策略允許nfs_export_all_ro

nfs_export_all_ro

nfs_export_all_rw值為0

所以說預設是允許訪問的。

但是如果共享的是/home/abc的話,需要開啟相關策略對home的訪問。

setsebool -Puse_nfs_home_dirs boolean 1

getsebooluse_nfs_home_dirs

 

1.3.3 SElinux與ftp

1.如果ftp為匿名使用者共享目錄的話,應修改安全上下文。

chcon -R -t public_content_t /var/ftp

chcon -R -t public_content_rw_t /var/ftp/incoming

 

2.策略的設定

setsebool -P allow_ftpd_anon_write =1

getsebool allow_ftpd_anon_write

allow_ftpd_anon_write–> on

 

1.3.4 SElinux與http

apache的主目錄如果修改為其它位置,selinux就會限制客戶的訪問。

1.修改安全上下文:

chcon -R -t httpd_sys_content_t /home/html

由於網頁都需要進行匿名訪問,所以要允許匿名訪問。

2.修改策略:

setsebool -P allow_ftpd_anon_write = 1

setsebool -P allow_httpd_anon_write = 1

setsebool -P allow_<協議名>_anon_write =1

關閉selinux對httpd的保護

httpd_disable_trans=0

 

1.3.5 SElinux與公共目錄共享

如果ftp,samba,web都訪問共享目錄的話,該檔案的安全上下文應為:

public_content_t

public_content_rw_t

其它各服務的策略的bool值,應根據具體情況做相應的修改。

 

1.3.6 SElinux配置總結

以上內容的selinux的配置實驗還需要進行相關驗證,以便在實際環境中能夠直接應用,相關的內容還需要繼續補充。

對於多於牛毛的策略,可以用過濾還檢視一個服務相當開啟哪些策略。

 

——————————————————————————

SELinux主要配製檔案

SELinux主要配製檔案位於/etc/selinux/下。在網路中的伺服器,建議開啟SELinx,以提高系統的安全性。我這裡通過命令方式來改變SELinx的安全策略,就不在對SELinux的配製檔案做具體說明。

SELinux常用的命令

 ls –Z |ps –Z | id –Z

分別用於檢視檔案(夾)、程式和使用者的SELinx屬性。最常用的是ls -Z

  sestatus

檢視當前SELinux的執行狀態

  setenforce

在SELinux為啟動模式下,用此命令可以暫時停用SELinux

  getsebool

檢視當前Policy(策略)的布林值

  setsebool

設定Policy的布林值,以啟用或停用某項Policy

   chcon

改變檔案或資料夾的content標記

SELinux實用案例

SELinux對Apache的保護

新安裝的wordpress位於/vogins/share/wordpress下,按照系統的預設策略,/vogins,/vogins/share的SELinux屬性為file_t,而這是不允許httpd程式直接訪問的。為此,需要做如下高調整:

1) 改變/vogins,/vogins/share的SELinux屬性

Shell>chcon –t var_t /vogins

Shell>chcon –t var_t /vogins/share

2) 改變wrodpress目錄的SELinux屬性

Shell>chcon –R –t httpd_sys_content_t wordpress

3) 允許apache程式訪問mysql

setsebool -Phttpd_can_network_connect=1

4) 關於Apache裡虛擬主機的配製就裡就不多說,重新啟動apache,就可以正常訪問wordpress

Shell>/etc/init.d/httpd start

注意:如果出現不能訪問的情況,請檢視/var/log/messages裡的日誌。一般來說,按照提示就可以解決了。

 

LINUX 中SELINUX 的禁用方式

經網上檢視資料,發現是SELinux在作怪,現在記錄下來,以後繼續完善

1、臨時禁用SELinux:

root@server# setenforce 0

    

這樣重啟伺服器之後,還是會啟動SELinux,

2、永久禁用:
開啟伺服器上的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=enforcing 改為:SELINUX=disable  禁用SeLinux

本文轉自 chengxuyonghu 51CTO部落格,原文連結:http://blog.51cto.com/6226001001/1638194,如需轉載請自行聯絡原作者


相關文章