初识SELinux

一、一些概念

二、SELinux状态

三、相关运用

四、相关命令

 

一、一些概念

 

1、Linux安全访问模型

DAC(Discretionary Access Control):自主访问控制

 

2、SELinux安全访问机制

SELinux是一种基于 <域-类型> 模型(domain-type)的强制访问控制(MAC:Mandatory Access Control)安全系统


 

二、SELinux状态

 

1、SELinux状态

(1)、Disable,禁用

(2)、Permissive,不真正实施SELinux功能,仅将违反策略的行为记录进/var/log/audit/audit.log;另策SELinux策略缓存目录/selinux/avc/

(3)、enforcing,强制实施SELinux

 

2、查看SELinux开启状态

[root@localhost ~]# getenforce
Permissive

或者

[root@localhost ~]# sestatus    #路径为/usr/sbin/sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   permissive
Mode from config file:          permissive
Policy version:                 24
Policy from config file:        targeted

3、设置SELinux状态

(1)、临时修改SELinux状态,立即生效,重启后恢复为配置文件中设定

[root@localhost ~]# setenforce 1    #设置为Enforcing状态
[root@localhost ~]# getenforce
Enforcing
[root@localhost ~]# setenforce 0    #设置为Permissive状态
[root@localhost ~]# getenforce
Permissive

 

(2)、修改配置文件/etc/selinux/config或/etc/syslconfig/selinux,重启后生效,且永久有效

# 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=permissive    #可修改为disabled,permissive,enforcing
# SELINUXTYPE= type of policy in use. Possible values are:
#       targeted - Only targeted network daemons are protected.
#       strict - Full SELinux protection.
SELINUXTYPE=targeted    #此项使用targeted,基本不用strict

 

三、相关运用

 

1、文件、进程的SELinux安全属性

(1)、查看文件的SELinux安全属性

[root@localhost ~]# cd ~    #进到家目录
[root@localhost ~]# ll –Z    #查看文件安全上下文
-rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 downloads
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 install.log
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 install.log.syslog

以上信息中,有一段system_u:object_r:admin_home_t,分别是SELinux的用户、组、类型

system_u:User identity为system

object_r:Role为objuect

admin_home_t:Type为admin_home  

(2)、查看进程的SELinux安全属性

[root@localhost ~]# ps auxZ    #-Z选项,查看SELinux安全属性
LABEL                           USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
system_u:system_r:init_t:s0     root         1  0.0  0.1  19232  1492 ?        Ss   03:36   0:01 /sbin/init
system_u:system_r:kernel_t:s0   root         2  0.0  0.0      0     0 ?        S    03:36   0:00 [kthreadd]
system_u:system_r:kernel_t:s0   root         3  0.0  0.0      0     0 ?        S    03:36   0:00 [migration/0]

 

2、修改文件SELinux安全属性

有时需要修改文件的SELinux安全属性,对文件进行访问控制,例如,当SELinux开启时,httpd网站根目录中(此时我们自己新建目录,创建首页文件)的首页文件index.html,如果其Type类型与httpd进程的不同,则该页面会访问不了,将其Type修改为同一Type,即可解决问题

(1)、创建网站目录、首页文件

[root@testclient1 html]# mkdir /www/htdocs -pv
mkdir: created directory `/www‘
mkdir: created directory `/www/htdocs‘
[root@testclient1 html]# vim /www/htdocs/index.html

首页文件内容如下

<h1>SELinux Test</h1>

 

(2)、修改httpd主配置文件,删除欢迎页面配置文件,由于测试机httpd是用yum源安装,其配置文件路径/etc/httpd/conf/httpd.conf,欢迎页面文件路径/etc/httpd/conf.d/welcome.conf

 

a、配置

删除欢迎页面配置文件,修改httpd主配置文件

[root@testclient1 www]# cd /etc/httpd/conf.d/
[root@testclient1 conf.d]# rm -rf welcome.conf 
[root@testclient1 conf.d]# vim /etc/httpd/conf/httpd.conf

将默认路径修改为以下内容

DocumentRoot "/www/htdocs"
<Directory "/www/htdocs">

重启httpd服务,打开SELinux

[root@testclient1 ~]# service httpd start 
[root@testclient1 html]# setenforce 1

此时浏览器访问页面,会有如下提示

技术分享

 

b、原因,httpd进程和页面文件的SELinux的安全属性,Type不一致

[root@testclient1 htdocs]# ps auxZ | grep httpd
unconfined_u:system_r:httpd_t:s0 root     1516  0.0  0.3 175700  3644 ?        Ss   13:49   0:00 /usr/sbin/httpd
unconfined_u:system_r:httpd_t:s0 apache   1518  0.0  0.2 175836  3024 ?        S    13:49   0:00 /usr/sbin/httpd
unconfined_u:system_r:httpd_t:s0 apache   1519  0.0  0.2 175700  2404 ?        S    13:49   0:00 /usr/sbin/httpd
unconfined_u:system_r:httpd_t:s0 apache   1520  0.0  0.2 175836  3008 ?        S    13:49   0:00 /usr/sbin/httpd
unconfined_u:system_r:httpd_t:s0 apache   1521  0.0  0.2 175700  2404 ?        S    13:49   0:00 /usr/sbin/httpd
unconfined_u:system_r:httpd_t:s0 apache   1522  0.0  0.2 175700  2580 ?        S    13:49   0:00 /usr/sbin/httpd
unconfined_u:system_r:httpd_t:s0 apache   1523  0.0  0.2 175700  2580 ?        S    13:49   0:00 /usr/sbin/httpd
unconfined_u:system_r:httpd_t:s0 apache   1524  0.0  0.2 175700  2576 ?        S    13:49   0:00 /usr/sbin/httpd
unconfined_u:system_r:httpd_t:s0 apache   1525  0.0  0.2 175700  2404 ?        S    13:49   0:00 /usr/sbin/httpd
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 root 1527 0.0  0.0 103244 856 pts/0 S+ 13:52   0:00 grep httpd
[root@testclient1 htdocs]# ll -Z
-rw-r--r--. root root unconfined_u:object_r:default_t:s0 index.html

 

c、解决方法---->授权,将index.html的SELinux的Type改为httpd

命令

[root@testclient1 htdocs]# setenforce 0    #需暂时设置为Permissive状态
[root@testclient1 htdocs]# chcon -t httpd_t index.html    #-t指定Type 
[root@testclient1 htdocs]# setenforce 1    #开启

再次用浏览器访问,此时可以正常浏览页面

技术分享

 

3、服务sebool值

以vsftpd服务为例,vsftpd也是用yum源安装

 

(1)、安装好vsftpd,lftp,编辑/etc/vsftpd/vsftpd.conf,启用下面两项

anon_upload_enable=YES
anon_mkdir_write_enable=YES

(2)、cd到/var/ftp/,修改匿名用户ftp对pub文件夹的权限

setfacl -m u:ftp:rwx pub/

(3)、重启vsftpd服务后,使用lftp登录服务器,上传一个文件,此时确认SELinux状态为Enforcing,提示553,更改SELinux状态为Permissive后,又可以上传文件

[root@testclient1 ftp]# lftp 127.0.0.1
lftp 127.0.0.1:~> cd pub/
lftp 127.0.0.1:/pub> lcd /www/htdocs/
lcd ok, local cwd=/www/htdocs
lftp 127.0.0.1:/pub> put index.html 
put: Access failed: 553 Could not create file. (index.html)

 

(4)、原因,ftp服务的sebool值,通过命令我们可以看到服务相关sebool控制是关闭的

[root@testclient1 ftp]# getsebool -a | grep ftp
allow_ftpd_anon_write --> off
allow_ftpd_full_access --> off
allow_ftpd_use_cifs --> off
allow_ftpd_use_nfs --> off
ftp_home_dir --> off
ftpd_connect_db --> off
ftpd_use_fusefs --> off
ftpd_use_passive_mode --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_use_cifs --> off
tftp_use_nfs --> off

 

解决方法,使用如下命令后,即可获得权限上传:

setsebool -P allow_ftpd_full_access on

 

 

四、相关命令


详细使用方法查看man手册

 

chcon:修改文件安全属性

    -t:指定Type

    -R:递归修改,修改目录属性时,将一并修改目录中文件的属性

    --reference:以某个文件为参考修改目标文件

restorecon:恢复文件默认安全属性

[root@testclient1 htdocs]# restorecon index.html 
[root@testclient1 htdocs]# ll -Z    #之前我们修改过文件的Type
-rw-r--r--. root root unconfined_u:object_r:default_t:s0 index.html    #现在恢复默认

 

getsebool:列出所有selinux bool数值清单列表与内容

 

setsebool:修改selinux bool数值清单内容

-P:该选项使命令修改结果永久有效,不加-P则重启后恢复默认配置



本文出自 “Arvin Lau” 博客,请务必保留此出处http://64314491.blog.51cto.com/2784219/1653881

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。