SELinux简单配置

  1. 云栖社区>
  2. 博客>
  3. 正文

SELinux简单配置

余二五 2017-11-17 19:19:00 浏览720
展开阅读全文

       SELinux简单配置

SELinux(Secrity-Enhanced Linux,安全增强式Linux)是一种强制存取控制的实现,它的作法是以最小权限原则为基础提供一些更强、更安全的强制存取控制架构来与内核的主要子系统共同动作。

SELinux等级有三个:

                  Enforcing:  强制的,如果违反则直接阻止

                  Permissive: 在违反规则时只警告,但是不阻止

                  Disables:表示  SELinux不启用

在启动SELinux时要重新启动系统才能使用。

 

SELinux可以通过不同的方式进行启动与关闭,也可以使它暂时的关闭与开启

         永久关闭方法:1>setupàFirewall configuration-SELinux 自己选择打开关闭

                      2>使用命令:[root@localhost ~]# system-config-securitylevel 也可以选择

        暂时关闭方法:setenforce 1   :暂时关闭SELinux

                      setenforce 0   :开启SELinux Permissive

        简单查看SELinux的状态:

                                getenforce 

     SELinux中访问控制属性就叫安全上下文,所有的客体(如文件,进程间通信)和主体(进程)都有与其并联的安全上下文,一个安全上下文由用户、角色、和类型标识符3个部分组成,如下命令可以看到文件的安全上下文属性      

    

SELlinux中安全上下文中的用户和角色标识符除了对强制有一点约束之外对类型强制访问控制策略没有任何影响。我们看一个小例子来说明一下类型标识符的限制。

示例1    httpSELinux应用

    [root@localhost www]# cd /mnt/cdrom/Server/

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

warning: httpd-2.2.3-31.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186

Preparing...               ################################### [100%]

    1:httpd                ################################### [100%]

   现在我们可以正常的启动http服务

   [root@localhost ~]# service httpd start

Starting httpd:                                            [  OK  ]

但是我们如果修改一下http默认的主目录,会出现怎么样的情况呢!

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

<Directory "/var/www/html">   修改为  <Directory "/html">

创建目录

[root@localhost ~]# mkdir /html

这时候我们再来重新启动一次

[root@localhost ~]# service httpd restart

Stopping httpd:                                            [  OK  ]

Starting httpd: httpd: Syntax error on line 306 of /etc/httpd/conf/httpd.conf: /etc/httpd/conf/httpd.conf:306: <Directory> was not closed.

                                                           [FAILED]

 

可以看到系统会出现错误,这个情况就属于类型标识符的使用

查看一下/var/www/html的目录标识符

  [root@localhost ~]# ll -dZ /var/www/html

drwxr-xr-x  root root system_u:object_r:httpd_sys_content_t /var/www/html

再查看一下/html的目录标识符

[root@localhost ~]# ll -dZ /html

drwxr-xr-x  root root root:object_r:default_t          /html      

可以看出/var/www/html的目录标识符属于httpd域,而/html则属于default_t,httpd_t域运行的httpd程序只能监听httpd_port-t类型的端口,并限制此域的进程只能存取标记为httpd_sys_content_t的网页文件,所以httpd服务不能正常启动

但是并不是开启了SELinux就不能够改变主目录的位置,我们可以把/html目录修改为httpd_t的域,可以使用chcon命令来更改,我们把/html的域更改为httpd_t的域

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

[root@localhost ~]# ll -dZ /html

drwxr-xr-x  root root root:object_r:httpd_sys_content_t /html 

现在我们再次启动一次http服务

[root@localhost ~]# service httpd start

Starting httpd:                                            [  OK  ]

启动成功!!!!!!! 

有时候我们又想改变http服务的端口,那么应该怎么办,可以直接启动吗,我们可以尝试着启动一次

把服务器端口更改为800

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

Listen 80  改为:  Listen 800  

先安装一个调试工具

[root@localhost Server]# yum install setroubleshoot

启动setroubleshoot服务

[root@localhost Server]# service setroubleshoot start

Starting setroubleshootd:                                  [  OK  ]

 启动http服务器

[root@localhost ~]# service httpd restart

Stopping httpd:                                            [  OK  ]

Starting httpd: (13)Permission denied: make_sock: could not bind to address [::]:800

(13)Permission denied: make_sock: could not bind to address 0.0.0.0:800

no listening sockets available, shutting down

Unable to open logs                                         [FAILED]

这次直接提示了:不能绑定本机的800端口,也可以查看日志

[root@localhost Server]# tail  /var/log/messages   可以看到错误提示

Dec 27 00:51:56 localhost setroubleshoot: SELinux is preventing tpvmgp (cupsd_t) "execute_no_trans" to /usr/lib/vmware-tools/bin32/appLoader (lib_t). For complete SELinux messages. run sealert -l 383d449b-4b8c-49aa-b7f0-f19bb5499555

并且让运行代码查看清楚的错误信息:sealert -l 383d449b-4b8c-49aa-b7f0-f19bb5499555,我们可以自行查看其详细信息。

现在提示是不能绑定800端口,那是因为SELinuxhttpd的端口固定了几个默认的端口

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

http_cache_port_t              tcp      3128, 8080, 8118, 11211, 10001-10010

http_cache_port_t              udp      3130, 11211

http_port_t                    tcp      80, 443, 488, 8008, 8009, 8443

pegasus_http_port_t            tcp      5988

pegasus_https_port_t           tcp      5989

可以看到关于http的所有端口使用情况,但是800并没有在默认使用行列中,所以系统不能绑定这个端口,也就启动不了服务。

但是我们可以通过semanage命令来把这个端口添加到http可以使用的行列中

[root@localhost ~]# semanage port -a -t http_port-t _p tcp 800

再查看一次端口使用行列

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

http_cache_port_t              tcp      3128, 8080, 8118, 11211, 10001-10010

http_cache_port_t              udp      3130, 11211

http_port_t                    tcp      800, 80, 443, 488, 8008, 8009, 8443

pegasus_http_port_t            tcp      5988

pegasus_https_port_t           tcp      5989 

现在800端口已经可以被http服务使用了,我们可以正常启动http服务了

[root@localhost ~]# service httpd start

Starting httpd:                                            [  OK  ]

服务正常启动!!!!!!!










本文转自 guodong810 51CTO博客,原文链接:http://blog.51cto.com/guodong810/1102358,如需转载请自行联系原作者

网友评论

登录后评论
0/500
评论