- 1 信息安全简介
- 1.1 信息安全发展史
- 1.2 信息安全等级保护
- 2 安全 OS
- 2.1 UNIX 系统安全
- 2.1.1 设置健壮的密码
- 2.1.2 删除所有的特殊账户
- 2.1.3 关闭不需要的服务
- 2.1.4 远程登陆管理
- 2.1.5 限制 IP 访问
- 2.1.6 日志监控
- 2.2 Linux 系统安全
- Linux 安全设置手册
- Linux 服务器安全加固
- Linux 防火墙
- SELinux
- SSH 免密登陆
- 2.3 Windows 系统安全
- Windows 常见安全隐患
- 防火墙-Microsoft Defender
- 本章参考
- 3 访问控制技术
- 3.1 基于角色的访问控制 RBAC
- 基于 RBAC 的延展-用户组(租户)
- 示例 1:Python Django 后台管理
- 示例 2:Python flask_appbuilder 后台管理
- 3.2 认证
- 3.2.1 认证机制
- 3.2.2 OpenID
- 3.2.3 LDAP
- 3.2.4 Kerberos
- 3.2.5 数字签名
- 3.2.6 基于证书的认证
- 3.3 授权
- 3.3.1 OAuth
- 3.4 HTTPS
- 3.4.1 HTTPS 原理
- 3.4.2 证书
- 3.4.3 自签名证书
- 本节参考
- 案例
- 天网 MAZE 的信用卡机制
- S3 认证机制
- 云盘认证机制
- 双因子认证
- 扫码登陆
- 单点登陆 SSO
- 本章参考
- 4 安全编程
- 4.1 内存管理
- 4.2 安全编程实践
- 4.2.1 使用断言进行防止错误
- 4.3 语言相关的安全编码
- 4.3.1 net 中使用安全函数
- 4.3.2 PHP 代码执行漏洞
- 4.4 源码保护
- Java 源码保护
- python 源码保护
- 本章参考
- 5 安全算法
- 6 安全架构
- 云安全
- 云安全事件案例
- 云计算带来的安全挑战
- 应用:安全云/云查杀
- 业界案例
- 华为的安全白皮书
- 参考资料
- 附录
- 安全相关法律法规
- 个人信息安全
- 云安全标准与组织
- 国际
- 国内
SELinux
安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。
SELinux 主要由美国国家安全局开发。2.6 及以上版本的 Linux 内核都已经集成了 SELinux 模块。
SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。SELinux 比普通的 Linux 内核提供了更高的安全性,理论上说,在系统因为未知漏洞溢出的时候,普通用户是不可能得到超级用户的权限了。
Fedora Core 3 在安装时默认激活 SELinux。
# 获取 selinux 状态: enable/Enforcing 为开启,disabled/Permissive 为关闭
$ getenforce
Enforcing
# 临时开启,关闭: 0 时关闭,其它值开启,重启失效。 永久生效要修改/etc/selinux/config,并且重启机器 reboot
$ setenforce 0
# Current mode 是当前防火墙工作模式
$ /usr/sbin/sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: disabled
Policy MLS status: enabled
Policy deny_unknown status: allowed
Memory protection checking: actual (secure)
Max kernel policy version: 31
SELinux 概念:
- 主体(Subject):等同于进程。
- 对象(Object):被主体访问的资源。可以是文件、目录、端口、设备等。
- 政策和规则(Policy & Rule):一套政策里面有多个规则。部分规则可以按照需求启用或禁用。规则是模块化、可扩展的。政策可以在
/etc/selinux/config
中设定。
SELinux 有三种 工作模式 ,分别是:
- enforcing:强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中。
- permissive:宽容模式。违反 SELinux 规则的行为只会记录到日志中。一般为调试用。
- disabled:关闭 SELinux。
违规日志 : /var/log/audit/audit.log
配置文件 : /etc/selinux/config
( 软链接指向 /etc/sysconfig/selinux
,可设置工作模式 SELINUX,政策 SELINUXTYPE)
[root@ecs-a5e2 ~]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled # 永久关闭
# SELINUXTYPE= can take one of these three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
相关命令
# 查看 selinux 的某类进程允许的端口。似乎与 firewalld 的功能有点雷同,但又不太一样。
semanage port -l
# 分析违规日志
sealert -a /var/log/audit/audit.log
SELinux 中的 Apache 和 MySQL 设定
因为 SELinux 安全性的提高,导致我们在使用时,会发生一些我们以前从没遇到的问题。
前两天我在使用 Fedora Core 3 搭建 PHP+MySQL 的 WebServer 时就遇到了一些问题。现在整理一下,如果您也遇到同样的问题,那么,看过这篇文章,就应该可以轻而易举的解决了。
1、Apache - Document root must be a directory 问题。
有可能和这个问题并发的问题还有 403 Forbidden 禁止访问的问题。
现象描述:
不使用系统默认的 /var/www/html
作为系统的 Document Root,自己新建一个目录后修改 /etc/httpd/conf/httpd.conf
中的配置,然后重起 Apache 的 Daemon,发现 Apache 无法起动,系统报错:
Document root must be a directory
但是,我们设置的 DocumentRoot 的确是一个目录,而且 apache 用户具有可读权限。
另一种情况:新建一个虚拟目录或文件后,无法访问,显示 Forbidden, 403 Error,但文件或目录有可读权限。
问题产生的原因:一开始我想来想去想不出为什么,但是给我感觉是权限的问题,用传统的 Linux 的思维方式来看,权限绝对没有问题。但是仔细一想,SELinux 是不是会有其他安全的设定?
查看 /var/log/messages
文件,发现有类似以下内容的这样一段:
Dec 24 17:54:59 hostname kernel: audit(1098222899.827:0): avc: \
denied { getattr } for pid=19029 exe=/usr/sbin/httpd \
path=/var/www/html/about.html dev=dm-0 ino=373900 \
scontext=root:system_r:httpd_t tcontext=user_ubject_r:user_home_t \
tclass=file
嘿嘿,问题找到了,果然是 SELinux 的新特性搞的鬼。我把目录或文件设成了 user_home_t 类型,因此 apache 的进程没有权限,无法访问。针对 Apache 的进程所使用的 SELinux target policy 规定了 apache 的进程只能访问 httpd_sys_content_t 类型的目录或文件。
解决办法:
很简单,把目录或文件的策略类型改成 httpd_sys_content_t 就可以了
使用 root 用户
$ chcon -t httpd_sys_content_t 目录名或文件名
然后可以用 ls -laZ
命令查看文件目录的策略类型。
2、Mysql - Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)
刚搞定 Apache,mySQL 又出问题了。
问题现象:
本机用 mysql 命令可以正常登录数据库并正常操作。但是在 php 写的页面中,不管怎样,连接 mySQL 数据库时,都会报如下错误:
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)
问题原因:
查看 mysql.sock
文件,存在并且任何人都可读可写。发现 avc message (/var/log/messages)
中同样有策略错误的记录。
用 ps -efZ|grep mysql
命令检查 mysql 的进程,发现 mySQL 使用了 unconfined_t 这个未定义策略类型在运行,而 mysql.sock 以及 mysqld 文件的策 略类型都是 var_lib_t。很明显,这应该是个 Fedora Core 3 的 BUG,SELinux target policy 的 BUG,redhat 并没有为 mySQL 制定正确的 target policy。
解决办法:到 redhat 的 bugzilla 系统上搜索,果然找到了这个 BUG。
Bug #: 138421
https://bugzilla.redhat.com/bugzill...g.cgi?id=138421
在这个页面找到新的 target policy 的补丁安装即可
补丁下载页面: ftp://people.redhat.com/dwalsh/SELinux/FC3 ,你也可以从本文的附件中下载
只要下载 selinux-policy-targeted-1.17.30-2.23
以上的版本就能正常使用 mySQL 了。
如果你原来的系统安装了 selinux-policy-targeted-source (源代码),那么你也必需下载 source 的 rpm 文件,并首先升级这个包,因为两个包有依赖关系。
补丁安装办法:
#step1: 使用 root 用户
#step2: 先升级新的 target-policy-source (如果你之前安装了这个包的话)
rpm -Uvh selinux-policy-targeted-sources-1.17.30-2.61.noarch.rpm
step3: 升级新的 target-policy
rpm -Uvh selinux-policy-targeted-1.17.30-2.61.noarch.rpm
step4: 更新 mysql 相关的 target policy
rpm -q -l mysql-server | restorecon -R -v -f -
rpm -q -l mysql | restorecon -R -v -f -
step5 重起 mysql 的服务
service mysqld restart
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论