首先了解一下selinux,selinux是强制安全服务。

Linux 2.6.X都带有这个系统

DAC 自主的安全控制 -rw-r—r—rout rout f1 文件的所有者可以自主的控制自己的权限

Facl 文件访问控制

Mac:强制的安全控制 安全上下文

 

开启selinux安全控制服务

[root@localhost ~]# setup

selinux与NIS的应用_上下文

selinux与NIS的应用_blank_02

选择第一个enforcing ,开启selinux,需要重启系统才能生效! init 6

重启系统时,系统会生成selinux需要的模块。

selinux与NIS的应用_安全_03

我们安装一个apache服务,来测试使用selinux

[root@localhost ~]# rpm -ivh /mnt/cdrom/Server/httpd-2.2.3-31.el5.i386.rpm

[root@localhost ~]# cd /var/www/html/ //进入默认站点做一个简单的网页测试。

[root@localhost html]# echo " hello! " >index.html

需要启动httpd服务

[root@localhost html]# service httpd start

客户机访问apache站点:

selinux与NIS的应用_上下文_04

现在我们修改站点主目录,来看看selinux会怎样维护安全

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf

selinux与NIS的应用_target_05

[root@localhost ~]# mkdir /web

[root@localhost ~]# echo " hello !" >/web/index.html

重启系统,就会报错。原因来自selinux的阻止。

selinux与NIS的应用_安全_06

使用getenforce命令查看selinux的安全级别,

同时使用setenforce设置级别:0为警告,1为开启

selinux与NIS的应用_的_07

在次重启apache服务成功了

selinux与NIS的应用_安全_08

我们在次把selinux设为开启状态,寻找解决方案

[root@localhost ~]# setenforce 1

重启apache服务,再次报错了,解决方案:

查看日志:[root@localhost ~]# tail -f /var/log/messages

selinux与NIS的应用_安全_09

根据提示,我们连接到是 “安全上下文” 就是类出错了

查看一些apache能够正常启动时的 进程和index.heml的类

[root@localhost ~]# ps auxZ |grep httpd //查看进程的类是httpd

selinux与NIS的应用_target_10

[root@localhost ~]# ll -Z /var/www/html/index.html //查看index.html的类是httpd

selinux与NIS的应用_安全_11

再查看apache不能正常启动时的 进程和index.html的类

[root@localhost ~]# ll -Z /web/index.html

//类域进程不一致,所以进程无法控制文件,需要修改新站点的类,就可以了。

selinux与NIS的应用_上下文_12

使用chcon这个命令来修改 /web目录的类 与apache的类一致

[root@localhost ~]# chcon -R -t httpd_sys_content_t /web

selinux与NIS的应用_的_13

在次重启apache服务成功了

selinux与NIS的应用_blank_14

客户端测试正常

selinux与NIS的应用_安全_15

这次我们增加apache的监控端口为800,看看如何设置selinux

[root@localhost ~]# vim /etc/httpd/conf/httpd.conf

selinux与NIS的应用_的_16

重启apache服务,失败了

selinux与NIS的应用_安全_17

查找原因:

1、查看日志

[root@localhost ~]# tail -f /var/log/messages

selinux与NIS的应用_上下文_18

Aug 30 04:17:17 localhost setroubleshoot: SELinux is preventing httpd (httpd_t) "name_bind" to <Unknown> (hi_reserved_port_t). For complete SELinux messages. run sealert -l 9368e26c-cfe1-4817-9b9e-bbd33ab8120a

大致的意思是 name_bind 就是监听的端口出事了

2、Linux在桌面环境下Selinux有提示,点击那个星星,查看提示

selinux与NIS的应用_blank_19

selinux与NIS的应用_target_20

两种方法看到的错误一样的,这是根据日志的提示,

run sealert -l 9368e26c-cfe1-4817-9b9e-bbd33ab8120a //在命令行中运行

[root@localhost ~]# sealert -l 9368e26c-cfe1-4817-9b9e-bbd33ab8120a

提示信息如下:800端口,selinux不能认可,

selinux与NIS的应用_blank_21

查看selinux对于httpd服务支持的端口

[root@localhost ~]# semanage port -l |grep http

selinux与NIS的应用_target_22

使用semanage命令增加给selinux增加一个端口800

[root@localhost ~]# semanage port -a -t http_port_t -p tcp 800

此时重启apache服务成功了

selinux与NIS的应用_上下文_23

测试也通过了。

selinux与NIS的应用_的_24

有很多服务在使用时总是会出现很多状况,我们可以通过调节selinux的控制开关,来通过selinux来使用。

Selinux策略的开关,查看对各项服务的详细设置,限制是off 关闭限制是on

1、命令行getsebool –a //我们查看关于ftp的开关,

selinux与NIS的应用_blank_25

2 、图形界面selinux与NIS的应用_blank_26

selinux与NIS的应用_上下文_27

总之各有各的优点!