管理SELinux
1、SELinux 简介
l SELinux全称Security Enhanced Linux,由美国国家安全局(National Security Agency)开发。
l 构建于kernel之上的、拥有灵活而强制性的访问控制结构,旨在提高Linux系统的安全性,提供强健的安全保证,可防御未知攻击,据称相当于B1级的军事安全性能;已经被整合到2.6kernel中;
查考百度百科中的“计算机安全级别”
SELinux的执行模式
l enforcing强制模式,只要SELinux不允许,就无法执行;
l permissive警告模式,将该事件记录,对文件系统作标记。依然允许执行;
l disabled关闭SELinux;
配置文件
# vi /etc/selinux/config
为了灵活起见通常设为:SELINUX=permissive
Security context
l Security context,安全上下文;通俗地讲,就是基于SELinux的一种安全属性。
l 系统根据PAM子系统中的pam_selinux.so模块设定登录者运行程序的安全上下文;
l 文件,rpm包安装的会根据rpm包内记录来生成安全上下文;如果是手动创建的,会根据policy中规定的来设置安全上下文;如果是cp,是重新生成安全上下文;如果是mv,安全上下文则不变。
在Linux系统中包括以下几种
账号上下文,进程上下文,文件(目录)上下文
查看的相关命令如下:
l id �CZ
检查账号的安全上下文;
l ps �CZ
检查进程的安全上下文;
l ls �CZ
检查文件、目录的安全上下文;
Context属性由四个部分组成
system_u:object_r:admin_home_t:s0
用户空间:角色:类型(域):敏感度
SELinux的运行机制
1.一个具有某个用户身份的进程,对系统资源(File、Directory、IP、Socket等)进行访问。
2.安全上下文的策略决定了这个进程是否有权限访问。
SELinux管理常用命令
安装必要的SELinux的管理工具软件包
# yum -y install policycoreutils-python setools-console setools-libs setroubleshoot setroubleshoot-server
查询SELinux的工作状态
# sestatus
检查SELinux功能是否开启
# selinuxenabled
# echo $?
0为开启,1为关闭
设置SELinux的运行状态
# setenforce 1
# getenforce
SELinux系统中依靠着大量的布尔值来做控制访问的。
查看系统的布尔值
# getsebool -a
设置布尔值,比如打开FTP的被动模式
# setsebool ftpd_use_passive_mode on
# setsebool -P ftpd_use_passive_mode on #写入策略,永久生效
查看安全上下文信息(见以上三种)
显示系统中安全上下文类型
# semanage fcontext -l #可以显示出系统支持的全部类型
或者查看这个文件的内容:
/etc/selinux/targeted/contexts/files/ file_contexts
改变一个文件的上下文类型
# chcon -t net_conf_t test.html
恢复某文件所在目录默认的安全上下文类型
# restorecon -Rv .
实验一:
测试上下文安全属性对文件访问的影响
# echo "Hello World" > index.html
# ls -Z
unconfined_u:object_r:httpd_sys_content_t:s0 index.html
启动httpd,页面正常访问
# cd
# echo "Hello World" > index.html
# ls -Z
unconfined_u:object_r:admin_home_t:s0 index.html
# cp index.html /var/www/html/ #普通拷贝
# ls -Z /var/www/html/
unconfined_u:object_r:httpd_sys_content_t:s0 index.html
结论:普通拷贝文件会自动转换相应的上下文安全类型
再来
# rm -f /var/www/html/index.html
# cp -a index.html /var/www/html/
# ls -Z /var/www/html/
unconfined_u:object_r:admin_home_t:s0 index.html
网页测试结果:
恢复index.html默认安全属性
# restorecon -v index.html
restorecon reset /var/www/html/index.html context unconfined_u:object_r:admin_home_t:s0 ->unconfined_u:object_r:httpd_sys_content_t:s0
或者:
# chcon -t httpd_sys_content_t test.html
就可以在网页中正常访问了。
实验二:Samba服务的访问
启动Samba服务
# service smb start
使用Samba用户oracle在客户机上访问自己的宿主目录
发现没有权限访问自己的Home目录。
查看Samba访问相关的布尔变量
# getsebool -a | grep samba
samba_create_home_dirs --> off
samba_domain_controller --> off
samba_enable_home_dirs --> off
samba_export_all_ro --> off
samba_export_all_rw --> off
samba_portmapper --> off
samba_run_unconfined --> off
samba_share_fusefs --> off
samba_share_nfs --> off
sanlock_use_samba --> off
use_samba_home_dirs --> off
virt_use_samba --> off
修改读权限
# setsebool samba_export_all_ro on
# getsebool samba_export_all_ro
samba_export_all_ro --> on
测试客户端可以读访问
当往里面上传文件时
开启写权限
# setsebool -P samba_export_all_rw on
测试可以上传文件了
或者使用Samba配置文件中关于SELinux的配置选项,开启以下的项:
setsebool -P samba_domain_controller on
setsebool -P samba_enable_home_dirs on
setsebool -P samba_export_all_ro on
setsebool -P samba_export_all_rw on
重启Samba服务
# service smb restart
发现仍然没有相关的权限。因此,配置文件中的注释只代表着设置SELinux策略的命令,并不是配置项。
以上四行分别是跟Samba权限相关的Shell命令。
实验三:有关进程的安全类型的管理操作
查看httpd程序的安全类型
# ls -Z /usr/sbin/httpd
-rwxr-xr-x. root root system_u:object_r:httpd_exec_t:s0 /usr/sbin/httpd
注:安全类型属性中只要出现unconfined为前缀的都是非限制的,即不受SELinux策略的影响。
改变网页的安全属性
# chcon -t admin_home_t index.html
浏览器中不能访问此网页
先停掉Web服务:
# service httpd stop
改变httpd程序的安全类型
# chcon -t unconfined_exec_t /usr/sbin/httpd
# ls -Z /usr/sbin/httpd
-rwxr-xr-x. root root system_u:object_r:unconfined_exec_t:s0 /usr/sbin/httpd
重启服务
# service httpd start
查看进程的安全类型
# ps -eZ | grep httpd
unconfined_u:unconfined_r:unconfined_t:s0 4549 ? 00:00:00 httpd
unconfined_u:unconfined_r:unconfined_t:s0 4551 ? 00:00:00 httpd
unconfined_u:unconfined_r:unconfined_t:s0 4552 ? 00:00:00 httpd
unconfined_u:unconfined_r:unconfined_t:s0 4553 ? 00:00:00 httpd
unconfined_u:unconfined_r:unconfined_t:s0 4554 ? 00:00:00 httpd
unconfined_u:unconfined_r:unconfined_t:s0 4555 ? 00:00:00 httpd
unconfined_u:unconfined_r:unconfined_t:s0 4556 ? 00:00:00 httpd
unconfined_u:unconfined_r:unconfined_t:s0 4557 ? 00:00:00 httpd
unconfined_u:unconfined_r:unconfined_t:s0 4558 ? 00:00:00 httpd
可以看到httpd进程运行在非限制域unconfined_t中。
在浏览器中再次访问相同的网页,可以访问了。