全面分析RHCE7(紅帽認證工程師)考試題目之 ----SELinux篇

Linux 安全保護模式html

DAC,自主訪問控制python

MAC,強制訪問控制mysql


SELinux linux

一套強化Linux安全的MAC擴展模塊sql

美國國家安全局主導開發apache


SELinux的運做機制vim

集成Linux內核(2.6及以上)安全

操做系統提供可定製的策略,管理工具網絡

[root@test ~]# cat /etc/redhat-release socket

Red Hat Enterprise Linux Server release 7.2 (Maipo)

[root@test ~]# uname -r

3.10.0-327.el7.x86_64

[root@test ~]# rpm -qa | grep -i selinux

selinux-policy-3.13.1-60.el7.noarch

libselinux-2.2.2-6.el7.x86_64

selinux-policy-targeted-3.13.1-60.el7.noarch

libselinux-utils-2.2.2-6.el7.x86_64

libselinux-python-2.2.2-6.el7.x86_64

查看當前SELinux的狀態

[root@test ~]# sestatus 

SELinux status:                 enabled

SELinuxfs mount:                /sys/fs/selinux

SELinux root directory:         /etc/selinux

Loaded policy name:             targeted

Current mode:                   permissive

Mode from config file:          enforcing

Policy MLS status:              enabled

Policy deny_unknown status:     allowed

Max kernel policy version:      28

[root@test ~]# ls /etc/selinux/

[root@test ~]# ls /sys/fs/selinux/


[root@test ~]# setenforce 0|1  #0:permissive 1:enforcing

[root@test ~]# getenforce  #查看當前SELinux狀態


[root@test ~]# vim /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 - No SELinux policy is loaded.#禁用

SELINUX=enforcing

# SELINUXTYPE= can take one of three two values:

#     targeted - Targeted processes are protected,

#     minimum - Modification of targeted policy. Only selected processes are protected. 

#     mls - Multi Level Security protection.  #提供多層次,全面的安全防禦策略

SELINUXTYPE=targeted#推薦,僅保護最多見/關鍵的網絡服務,其餘不限制


SELinux策略設置

一,安全上下文

進程  ps aux -Z

目錄  ls -dZ 目錄名

文件  ls -lZ 文件名

[root@test ~]# ls -lZ /etc/passwd

-rw-r--r--. root root system_u:object_r:passwd_file_t:s0 /etc/passwd

[root@test ~]# ls -dZ /var/www/html/

drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/

[root@test ~]# ls -dZ /var/lib/mysql/

drwxr-x--x. mysql mysql system_u:object_r:mysqld_db_t:s0 /var/lib/mysql/

[root@test ~]# ps aux -Z | grep httpd

system_u:system_r:httpd_t:s0    root      5965  0.1  0.4 226128  5052 ?        Ss   22:33   0:00 /usr/sbin/httpd -DFOREGROUND

system_u:system_r:httpd_t:s0    apache    5966  0.0  0.3 228212  3144 ?        S    22:33   0:00 /usr/sbin/httpd -DFOREGROUND


安全上下文的組成

用戶:角色:訪問類型:選項


常見訪問類型

bin_t #二進制執行文件

etc_t#系統配置文件

fsadm_exec_t#文件系統管理

admin_home_t#管理員帳戶的宿主目錄

user_home_t#普通用戶的宿主目錄

httpd_sys_content_t#httpd網站內容


SELinux啓用後通常的操做規律

新建文件或新建目錄 會繼承父目錄的安全上下文

[root@test ~]# touch /root/1.txt

[root@test ~]# ls -dZ /root/

dr-xr-x---. root root system_u:object_r:admin_home_t:s0 /root/

[root@test ~]# ls -lZ /root/1.txt 

-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 /root/1.txt


拷貝時繼承目標目錄的安全上下文

[root@test ~]# cp /root/1.txt  /var/www/html/

[root@test ~]# ls -lZ /var/www/html/1.txt 

-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/1.txt

移動時保留源文件的安全上下文

[root@test ~]# rm -rf /var/www/html/1.txt 

[root@test ~]# mv /root/1.txt  /var/www/html/

[root@test ~]# ls -lZ /var/www/html/1.txt 

-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 /var/www/html/1.txt


修改安全上下文

chcon  修改安全上下文

選項:-t:指定訪問類型

-u,-r:分別用來指定用戶,角色

-R:遞歸修改

[root@test ~]# ls -lZ /var/www/html/1.txt 

-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 /var/www/html/1.txt

[root@test ~]# chcon -t httpd_sys_content_t /var/www/html/1.txt 

[root@test ~]# ls -lZ /var/www/html/1.txt 

-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/1.txt


restorecon  重置安全上下文

— 恢復爲所在位置的默認上下文屬性

-R:遞歸恢復

[root@test ~]# touch /root/2.txt

[root@test ~]# mv /root/2.txt  /var/www/html/

[root@test ~]# ls -lZ /var/www/html/2.txt 

-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 /var/www/html/2.txt

[root@test ~]# restorecon /var/www/html/2.txt 

[root@test ~]# ls -lZ /var/www/html/2.txt 

-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/2.txt


二.SELinux布爾值:(功能開關)

getsebool 查看

-a 可列出全部布爾值

setsebool 設置

-P 永久更改,重啓仍然有效


啓用SELinux日誌程序

[root@test ~]# rpm -qa | grep shoot

setroubleshoot-plugins-3.0.59-1.el7.noarch

setroubleshoot-3.2.24-1.1.el7.x86_64

setroubleshoot-server-3.2.24-1.1.el7.x86_64



練習:啓用SELinux,容許本機的ftp服務,容許匿名用戶上傳和下在文件

[root@test ~]# yum -y install vsftpd

[root@test ~]# mkdir /var/ftp/sharedir

[root@test ~]# chmod o+w /var/ftp/sharedir/

[root@test ~]# cp /etc/hosts /var/ftp/sharedir/

[root@test ~]# vim /etc/vsftpd/vsftpd.conf 

29 anon_upload_enable=YES

[root@test ~]# systemctl restart vsftpd

[root@test ~]# getsebool -a | grep ftp

[root@test ~]# setsebool -P ftpd_full_access=on

[root@test ~]# setsebool -P ftpd_anon_write=on


[root@ftptest ~]# yum -y install ftp.x86_64

[root@ftptest ~]# ftp 192.168.4.12

Connected to 192.168.4.12 (192.168.4.12).

220 (vsFTPd 3.0.2)

Name (192.168.4.12:root): ftp

Password:

ftp> cd sharedir

ftp> lcd /root#設定本地接受目錄位置

ftp> put test.txt#上傳本地文件

ftp> get hosts#下在文件



練習 啓用SELinux,修改本機網站服務監聽的端口8090

[root@test ~]# sed -i '42s/80/8090/' /etc/httpd/conf/httpd.conf 

[root@test ~]# grep -n 8090 /etc/httpd/conf/httpd.conf

42:Listen 8090

[root@test ~]# systemctl restart httpd

Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.


[root@test ~]# grep -i "setroubleshoot" /var/log/messages | tail -1

Jan  3 01:43:44 test setroubleshoot: SELinux is preventing /usr/sbin/httpd from name_bind access on the tcp_socket port 8090. For complete SELinux messages. run sealert -l b044047d-64e3-425b-aa88-50ffb248f814

[root@test12 ~]# sealert -l b044047d-64e3-425b-aa88-50ffb248f814#運行日誌文件提供的解決方案 在其中尋找解決辦法

...

If you want to allow /usr/sbin/httpd to bind to network port 8090

Then you need to modify the port type.

Do

# semanage port -a -t PORT_TYPE -p tcp 8090

   其中 PORT_TYPE 是如下之一:http_cache_port_t, http_port_t, jboss_management_port_t, jboss_messaging_port_t, ntop_port_t, puppet_port_t。

...

[root@test ~]# semanage port -a -t http_port_t  -p tcp 8090

[root@test ~]# systemctl restart httpd

[root@test ~]# netstat -pantu | grep httpd

tcp6       0      0 :::8090                 :::*                    LISTEN      9668/httpd 


RHCE 的考試中有一道題目是

    配置SELinux

    確保您的兩個虛擬機的SELinux處於強制啓用模式 

    咱們須要作的是在兩臺虛擬機器上執行以下操做:

        # setenforce 1                            #配置當前SELinux狀態爲  enforcing (強制啓動) 

        # getenforce                               #查看當前SELinux狀態

        Enforcing

        # vim /etc/selinux/config         #修改配置文件 配置爲 enforcing (強制啓動) 

        # sed -n "7p" /etc/selinux/config

        SELINUX=enforcing


RHCE 的考試中還有兩道題目是會涉及道SELinux

    Samba共享

    Samba共享的SELinux開關【getsebool  -a】

    # setsebool  -P  samba_export_all_rw=on

    Web服務開放非標準端口

    # semanage  port  -a  -t  http_port_t  -p tcp 8909

    

    可能遇到的問題:

    執行semanage或setsebool時可能失敗或死機

    緣由:內存不足

    解決辦法:

    將虛擬機關機,而後再從新開機,從新設置

    或者,添加1G交換空間後再從新設置

    具體配置方法 請看 http://www.javashuo.com/article/p-udigmthe-ky.html

相關文章
相關標籤/搜索