一、一些概念
二、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开启状态
[[email protected] ~]# getenforce Permissive
或者
[[email protected] ~]# 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状态,立即生效,重启后恢复为配置文件中设定
[[email protected] ~]# setenforce 1 #设置为Enforcing状态 [[email protected] ~]# getenforce Enforcing [[email protected] ~]# setenforce 0 #设置为Permissive状态 [[email protected] ~]# 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安全属性
[[email protected] ~]# cd ~ #进到家目录 [[email protected] ~]# 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安全属性
[[email protected] ~]# 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)、创建网站目录、首页文件
[[email protected] html]# mkdir /www/htdocs -pv mkdir: created directory `/www‘ mkdir: created directory `/www/htdocs‘ [[email protected] 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主配置文件
[[email protected] www]# cd /etc/httpd/conf.d/ [[email protected] conf.d]# rm -rf welcome.conf [[email protected] conf.d]# vim /etc/httpd/conf/httpd.conf
将默认路径修改为以下内容
DocumentRoot "/www/htdocs" <Directory "/www/htdocs">
重启httpd服务,打开SELinux
[[email protected] ~]# service httpd start [[email protected] html]# setenforce 1
此时浏览器访问页面,会有如下提示
b、原因,httpd进程和页面文件的SELinux的安全属性,Type不一致
[[email protected] 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 [[email protected] htdocs]# ll -Z -rw-r--r--. root root unconfined_u:object_r:default_t:s0 index.html
c、解决方法---->授权,将index.html的SELinux的Type改为httpd
命令
[[email protected] htdocs]# setenforce 0 #需暂时设置为Permissive状态 [[email protected] htdocs]# chcon -t httpd_t index.html #-t指定Type [[email protected] 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后,又可以上传文件
[[email protected] 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控制是关闭的
[[email protected] 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:恢复文件默认安全属性
[[email protected] htdocs]# restorecon index.html [[email protected] 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则重启后恢复默认配置