首先了解一下selinux,selinux是强制安全服务。
Linux 2.6.X都带有这个系统
DAC 自主的安全控制 -rw-r—r—rout rout f1 文件的所有者可以自主的控制自己的权限
Facl 文件访问控制
Mac:强制的安全控制 安全上下文
开启selinux安全控制服务
[root@localhost ~]# setup
选择第一个enforcing ,开启selinux,需要重启系统才能生效! init 6
重启系统时,系统会生成selinux需要的模块。
我们安装一个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会怎样维护安全
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
[root@localhost ~]# mkdir /web
[root@localhost ~]# echo " hello !" >/web/index.html
重启系统,就会报错。原因来自selinux的阻止。
使用getenforce命令查看selinux的安全级别,
同时使用setenforce设置级别:0为警告,1为开启
在次重启apache服务成功了
我们在次把selinux设为开启状态,寻找解决方案
[root@localhost ~]# setenforce 1
重启apache服务,再次报错了,解决方案:
查看日志:[root@localhost ~]# tail -f /var/log/messages
根据提示,我们连接到是 “安全上下文” 就是类出错了
查看一些apache能够正常启动时的 进程和index.heml的类
[root@localhost ~]# ps auxZ |grep httpd //查看进程的类是httpd
[root@localhost ~]# ll -Z /var/www/html/index.html //查看index.html的类是httpd
再查看apache不能正常启动时的 进程和index.html的类
[root@localhost ~]# ll -Z /web/index.html
//类域进程不一致,所以进程无法控制文件,需要修改新站点的类,就可以了。
使用chcon这个命令来修改 /web目录的类 与apache的类一致
[root@localhost ~]# chcon -R -t httpd_sys_content_t /web
在次重启apache服务成功了
客户端测试正常
这次我们增加apache的监控端口为800,看看如何设置selinux
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
重启apache服务,失败了
查找原因:
1、查看日志
[root@localhost ~]# tail -f /var/log/messages
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有提示,点击那个星星,查看提示
两种方法看到的错误一样的,这是根据日志的提示,
run sealert -l 9368e26c-cfe1-4817-9b9e-bbd33ab8120a //在命令行中运行
[root@localhost ~]# sealert -l 9368e26c-cfe1-4817-9b9e-bbd33ab8120a
提示信息如下:800端口,selinux不能认可,
查看selinux对于httpd服务支持的端口
[root@localhost ~]# semanage port -l |grep http
使用semanage命令增加给selinux增加一个端口800
[root@localhost ~]# semanage port -a -t http_port_t -p tcp 800
此时重启apache服务成功了
测试也通过了。
有很多服务在使用时总是会出现很多状况,我们可以通过调节selinux的控制开关,来通过selinux来使用。
Selinux策略的开关,查看对各项服务的详细设置,限制是off 关闭限制是on
1、命令行getsebool –a //我们查看关于ftp的开关,
总之各有各的优点!