SELinux管理與配置

1.1 SElinux概述html

SELinux(Security-Enhanced Linux) 是美國國家安全局(NAS)對於強制訪問控制的實現,在這種訪問控制體系的限制下,進程只能訪問那些在他的任務中所須要文件。大部分使用 SELinux 的人使用的都是SELinux就緒的發行版,例如 Fedora、Red Hat Enterprise Linux (RHEL)、Debian 或 Gentoo。它們都是在內核中啓用SELinux 的,而且提供一個可定製的安全策略,還提供不少用戶層的庫和工具,它們均可以使用 SELinux 的功能。java

1.1.1 SElinux特色mysql

1.MAClinux

對訪問的控制完全化,對全部的文件、目錄、端口的訪問都是基於策略設定的,可由管理員時行設定。web

2.RBACsql

對於用戶只賦予最小權限。用戶被劃分紅了一些role(角色),即便是root用戶,若是不具備sysadm_r角色的話,也不是執行相關的管理。哪裏role能夠執行哪些domain,也是能夠修改的。apache

3.安全上下文安全

當啓動selinux的時候,全部文件與對象都有安全上下文。進程的安全上下文是域,安全上下文由用戶:角色:類型表示。bash

(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在做怪,如今記錄下來,之後繼續完善
一、臨時禁用SELinux:
root@server# setenforce 0
    
這樣重啓服務器以後,仍是會啓動SELinux,
二、永久禁用:
打開服務器上的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

 

轉自:http://blog.csdn.net/huangbiao86/article/details/6641893

相關文章
相關標籤/搜索