Selinux初试及httpd常规权限控制

Selinux初试及httpd常规权限控制

1、DAC(自主存取控制)

依据程序运行时的身份决定权限,是大部分操作系统的权限存取控制方式。也就是依据文件的own,group,other/r,w,x权限进行限制。Root有最高权限无法限制。r,w,x权限划分太粗糙。无法针对不同的进程实现限制。

2、MAC(强制存取控制)

依据条件决定是否有存取权限。可以规范个别细致的项目进行存取控制,提供完整的彻底化规范限制。可以对文件,目录,网络,套接字等进行规范,所有动作必须先得到DAC授权,然后得到MAC授权才可以存取。

3、TE(类型强制)

所有操作系统访问控制都是以关联的客体和主体的某种类型的访问控制属性为基础的。在SELinux中,访问控制属性叫做安全上下文。所有客体(文件、进程间通讯通道、套接字、网络主机等)和主体(进程)都有与其关联的安全上下文,一个安全上下文由三部分组成:用户、角色和类型标识符。

4、Selinux对一些命令做了修改.

ls -Z

ps -Zaux

id -Z

例如:[root@localhost ~]# id -Z

root:system_r:unconfined_t:SystemLow-SystemHigh

在SELinux中,访问控制属性总是安全上下文三人组形式,所有客体和主体都有一个关联的安全上下文,因为SELinux的主要访问控制特性是类型强制,安全上下文中的类型标识符决定了访问权。如上例中unconfined_t决定访问权限。

5、安全上下文

安全上下文是一个简单的、一致的访问控制属性,在SELinux中,类型标识符是安全上下文的主要组成部分,由于历史原因,一个进程的类型通常被称为一个域(domain),"域"和"域类型"意思都是一个.

6、类型

安全上下文中的用户和角色标识符除了对强制有一点约束之外对类型强制访问控制策略没什么影响,对于进程,用户和角色标识符显得更有意义,因为它们用于控制类型和用户标识符的联合体,这样就会Linux用户账号关联起来;然而,对于客体,用户和角色标识符几乎很少使用,为了规范管理,客体的角色常常是object_r,客体的用户常常是创建客体的进程的用户标识符,它们在访问控制上没什么作用。

用一个例子来解释以上概念:

假如我们设定

1.httpd这个进程使用httpd_t这个域类型运行.

2.将httpd进程使用的端口标记为httpd_port_t类型.

3.将网页目录标记为httpd_sys_content_t类型.

4.限制以httpd_t域运行的httpd程序只能监听httpd_port_t类型的端口,并限制此域的进程只能存取标记为httpd_sys_content_t的网页文件。

7、httpd常规使用参考

上述只是简单的概念,便于理解,下面以httpd为例,做实际操作说明。

    1)httpd启动时需要使用端口80、81、443等,需要开通权限

# 查看当前httpd的端口权限

[root@test /]# 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

# 通常默认情况下80、443端口已经打开,现在需要添加对81端口的支持,使用以下命令

[root@test /]# semanage port -a -t http_port_t -p tcp 81

# 删除该端口

[root@test /]# semanage port -d -t http_port_t -p tcp 81

    2)由于开启ssl需要使用到服务器证书,证书文件存放在特定的目录下(例如:/myweb/ssl),由于目录权限问题导致启动失败。

错误提示:SSLCertificateFile: file '/myweb/ssl/server.crt' does not exist or is empty

# 修改目录权限,使httpd进程(域)有权限访问证书相关的配置文件(注意:由于目录存在多层,需要对每层目录的权限进行设置,-R表示目录及其子目录、文件)

# 默认情况下httpd的安装路径/etc/httpd/的权限就是httpd_config_t

chcon -R -t httpd_config_t /myweb/ssl/

chcon -t httpd_config_t /myweb/

    3)网站访问目录权限设置(httpd进程要求其访问的文件权限为httpd_sys_content_t)

# httpd默认安装的DocumentRoot指向的目录是/var/www/html,其权限默认已经设置为httpd_sys_content_t

# 如果修改DocumentRoot或设置了特定的Directory,则需要修改对应目录权限

# 例如:

chcon -t httpd_sys_content_t /myweb/www/

    4)网站使用到第三方模块

chcon -t httpd_modules_t /your/module/xxx.so

    5)如果需要启动第三方程序,则需要修改程序权限为httpd_exec_t

# 例如,在httpd中加入了modsecurity,安装路径在/etc/httpd/mlogc/

# 修改可执行程序/etc/httpd/mlogc/mlogc权限

chcon -t httpd_exec_t /etc/httpd/mlogc/mlogc

猜你喜欢

转载自fedora.iteye.com/blog/1947705