管理SELinux

管理SELinux

 

1SELinux 简介

 

SELinux全称Security Enhanced Linux,由美国国家安全局(National Security Agency)开发。

构建于kernel之上的、拥有灵活而强制性的访问控制结构,旨在提高Linux系统的安全性,提供强健的安全保证,可防御未知攻击,据称相当于B1级的军事安全性能;已经被整合到2.6kernel中;

 

 

查考百度百科中的“计算机安全级别”

 

SELinux的执行模式

enforcing强制模式,只要SELinux不允许,就无法执行;

permissive警告模式,将该事件记录,对文件系统作标记。依然允许执行;

disabled关闭SELinux

 

配置文件

# vi /etc/selinux/config

为了灵活起见通常设为:SELINUX=permissive

 

Security context

Security context,安全上下文;通俗地讲,就是基于SELinux的一种安全属性。

系统根据PAM子系统中的pam_selinux.so模块设定登录者运行程序的安全上下文;

文件,rpm包安装的会根据rpm包内记录来生成安全上下文;如果是手动创建的,会根据policy中规定的来设置安全上下文;如果是cp,是重新生成安全上下文;如果是mv,安全上下文则不变。

 

Linux系统中包括以下几种

账号上下文,进程上下文,文件(目录)上下文

查看的相关命令如下:

id �CZ 

   检查账号的安全上下文;

ps �CZ
检查进程的安全上下文;

ls �CZ

   检查文件、目录的安全上下文;

 

Context属性由四个部分组成

system_u:object_r:admin_home_t:s0

用户空间:角色:类型(域):敏感度

 

SELinux的运行机制

1.一个具有某个用户身份的进程,对系统资源FileDirectoryIPSocket等)进行访问

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

网页测试结果:

spacer.gif 

恢复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在客户机上访问自己的宿主目录

spacer.gif 

发现没有权限访问自己的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

测试客户端可以读访问

当往里面上传文件时

spacer.gif 

开启写权限

# 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中。

在浏览器中再次访问相同的网页,可以访问了。

 

 

 

 

 


你可能感兴趣的:(selinux)