SELinux简单介绍(转)
来源:互联网 发布:mac鼠标移动速度 编辑:程序博客网 时间:2024/06/06 06:38
SELinux简单介绍(转)
1. 为什么要使用SELinux
先举一个简单的例子
比如我们先查看一个在本机上ssh private key文件的permission
# ls -l ~leonard/.ssh
-rw------- 1 leonard leonard 1743 Jun 30 14:02 id_rsa
我们会发现这个文件除了root用户,只有leonard用户可以对它进行读写操作。那么假设现在leonard用户打开了一个firefox浏览器
# ps -ef|grep firefox
leonard 5868 5863 1 11:08 ? 00:02:14 /home/leonard/Apps/firefox/firefox-bin
那么我们可以看到,由于firefox拥有了leonard的权限,那么它就可以浏览并修改leonard用户的ssh key. 如果一个黑客入侵了这个firefox,那么leonard用户的ssh key就可以很容易地被盗走。
那么这里就产生了一个问题:运行一个firefox浏览器,其实根本不需要让它有权限可以查看用户的私人信息。一个应用程序应该只在他特定的使用范围内拥 有权限。但是在linux系统下,如果用户运行了一个程序,那么这个程序就拥有了和这个用户相同的权限(甚至可以是更高的权限,如果程序被setuid or setgid的话),如此一来本来属于这个用户的其他资源都可以被这个程序所享用,由此就会产生一系列的安全问题。
上面这个例子我取自于Daniel Walsh所写的 "Managing Red Hat Enterprise Linux 5". 他是SELinux的首席工程师,而SELinux正是用来解决诸如此类的安全问题
2. 什么是SELinux
SELinux (Security-Enhanced Linux) 是一种Mandatory Access Control (MAC) 的应用。先不忙解释它,让我们先来看看Linux本身的安全标准
Linux本身的安全标准称之为:Discretionary Access Control (DAC)
在DAC的标准之下,Linux下resource(file, device...)的安全性完全取决于它所属的用户,用户组以及他们所设定的permission,由此就产生了下面这些问题
1. 用户执行的程序可以拥有所有属于这个用户其他资源的权限
2. 程序可以修改用户文件的permission (如evolution可以将用户的邮件修改成world readable)
3. 只有root和普通用户之分。过于简单的安全设计,以至于任何以root运行的程序遭到入侵时,整个系统将被攻破
4. Kernel无法区分你是用户还是程序,所以不同类别的security不能够得以实施
那么SELinux的Mandatory Access Control是怎么解决这些问题的呢
1. SELinux给file, resource(device etc.), user, process等增加了另一层的属性:称之为Security Context
2. SELinux的security context里面包括了: Type Enforcement, Role-Based Access Control 以及 Multi-Level Security (MLS) 三种不同的access control
3. 应用这些新属性的目的在于SELinux可以将程序限制在它仅需要控制的范围之内,从而最大限度的保护了user space
4. 使用SELinux可以一定程度降低root用户的权限。比如即使以root所运行的程序被侵犯以后,它也不可以获取对于用户空间资源的操控
如果说运用到实际中的话。那么比如当许多应用软件被发现漏洞以后,发行商和自由社区通常需要一段时间来给程序打补丁。那么使用了SELinux之后我们就可以保护我们的系统在这段时间内不会被次类攻击所侵犯
3. 如何关闭SELinux
为什么要先讲如何关闭呢?因为搜索了一下,这个看来是问的最多的问题。的确如果你确实不需要或者还没有掌握SELinux的话,它会给你服务器的日常工作带来麻烦。所以下面我就来讲讲几种关闭SELinux的方法
3.1 无须重起而暂时关闭SELinux
以root用户运行以下命令
# setenforce 0
这条命令的作用是把SELinux暂时设定成Permissive模式(关于Permissive Mode在以下会有介绍)
如果要恢复运行SELinux则可以运行
# setenforce 1
这条命令会把SELinux设定成Enforcing模式
3.2 把SELinux永久设定为Permissive模式
这里需要讲一下Permissive和Enforcing模式的区别。 SELinux有三种模式:Enforcing, Permissive and Disable.
Enforcing模式就是应用SELinux所设定的Policy, 所有违反Policy的规则(Rules)都会被SELinux拒绝
Permissive和Enforcing的区别就在于它还是会遵循SELinux的Policy,但是对于违反规则的操作只会予以记录而并不会拒绝操作
Disable 顾名思义就是完全禁用SELinux
如果要永久设定为Permissive模式,我们就要修改SELinux的配置文件 /etc/sysconfig/selinux (在RHEL5下这是一个symbolic link to /etc/selinux/conf)
# 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 - SELinux is fully disabled.
SELINUX=enforcing
# SELINUXTYPE= type of policy in use. Possible values are:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted
修改SELINUX=permissive,然后重新启动就可以了
还有一种设置为Permissive的方法就是在boot loader里设置kernel parameter. 下面以grub为例
修改 /boot/grub/grub.conf, 写入enforcing=0
title Red Hat Enterprise Linux Server (2.6.18-8.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-8.el5 ro root=/dev/VolGroup00/LogVol00 enforcing=0
initrd /initrd-2.6.18-8.el5.img
注意设定kernel parameter会override配置文件的设置,所以如果bootloader里是enforcing=0,而设置文件里是 SELINUX=enforcing的话,那么重起以后SELinux还是会在Permissive模式下运行
建议如果在测试SELinux时遇到问题应该先把它设定为Permissive模式。等你确定需要永久关闭SELinux功能才把它设置成disable
3.3. 永久关闭SELinux
如果你确定需要永久关闭SELinux,那么就应该把它设置成disable模式
修改 /etc/sysconfig/selinux
SELINUX=disable
然后重新启动
或者也可以在boot loader里设置 selinux=0
title Red Hat Enterprise Linux Server (2.6.18-8.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-8.el5 ro root=/dev/VolGroup00/LogVol00 selinux=0
initrd /initrd-2.6.18-8.el5.img
4. SELinux需要注意的几点
1. SELinux和其他的linux安全工具一样是用来辅助和增强linux的安全性,而不是用来代替原有的linux的安全设置。所以如果遇到 permission deny的情况下,应该首先检查是不是遵守了Linux本身的安全设置,然后再来检查它是否违反了SELinux所设定的规则
2. SELinux是基于kernel的安全系统。所以有些时候在改变了它的有关设置时需要重起系统才可以产生效果
3. SELinux对于deny的规则没有任何的设置。也就是说凡是不符合规则的操作将全部被deny
4. 在SELinux的Permissive模式下,kernel 只会记录第一次违犯规则的情况。而在Enforcing模式下每一次违反规则的情况都会被记录下来
5. SELinux的参考资料
1. NSA的SELinux官方主页: http://www.nsa.gov/selinux/
2. Fedora Project的SELinux主页: http://fedoraproject.org/wiki/SELinux
3. Dennis Walsh的live journal: http://danwalsh.livejournal.com/
先举一个简单的例子
比如我们先查看一个在本机上ssh private key文件的permission
# ls -l ~leonard/.ssh
-rw------- 1 leonard leonard 1743 Jun 30 14:02 id_rsa
我们会发现这个文件除了root用户,只有leonard用户可以对它进行读写操作。那么假设现在leonard用户打开了一个firefox浏览器
# ps -ef|grep firefox
leonard 5868 5863 1 11:08 ? 00:02:14 /home/leonard/Apps/firefox/firefox-bin
那么我们可以看到,由于firefox拥有了leonard的权限,那么它就可以浏览并修改leonard用户的ssh key. 如果一个黑客入侵了这个firefox,那么leonard用户的ssh key就可以很容易地被盗走。
那么这里就产生了一个问题:运行一个firefox浏览器,其实根本不需要让它有权限可以查看用户的私人信息。一个应用程序应该只在他特定的使用范围内拥 有权限。但是在linux系统下,如果用户运行了一个程序,那么这个程序就拥有了和这个用户相同的权限(甚至可以是更高的权限,如果程序被setuid or setgid的话),如此一来本来属于这个用户的其他资源都可以被这个程序所享用,由此就会产生一系列的安全问题。
上面这个例子我取自于Daniel Walsh所写的 "Managing Red Hat Enterprise Linux 5". 他是SELinux的首席工程师,而SELinux正是用来解决诸如此类的安全问题
2. 什么是SELinux
SELinux (Security-Enhanced Linux) 是一种Mandatory Access Control (MAC) 的应用。先不忙解释它,让我们先来看看Linux本身的安全标准
Linux本身的安全标准称之为:Discretionary Access Control (DAC)
在DAC的标准之下,Linux下resource(file, device...)的安全性完全取决于它所属的用户,用户组以及他们所设定的permission,由此就产生了下面这些问题
1. 用户执行的程序可以拥有所有属于这个用户其他资源的权限
2. 程序可以修改用户文件的permission (如evolution可以将用户的邮件修改成world readable)
3. 只有root和普通用户之分。过于简单的安全设计,以至于任何以root运行的程序遭到入侵时,整个系统将被攻破
4. Kernel无法区分你是用户还是程序,所以不同类别的security不能够得以实施
那么SELinux的Mandatory Access Control是怎么解决这些问题的呢
1. SELinux给file, resource(device etc.), user, process等增加了另一层的属性:称之为Security Context
2. SELinux的security context里面包括了: Type Enforcement, Role-Based Access Control 以及 Multi-Level Security (MLS) 三种不同的access control
3. 应用这些新属性的目的在于SELinux可以将程序限制在它仅需要控制的范围之内,从而最大限度的保护了user space
4. 使用SELinux可以一定程度降低root用户的权限。比如即使以root所运行的程序被侵犯以后,它也不可以获取对于用户空间资源的操控
如果说运用到实际中的话。那么比如当许多应用软件被发现漏洞以后,发行商和自由社区通常需要一段时间来给程序打补丁。那么使用了SELinux之后我们就可以保护我们的系统在这段时间内不会被次类攻击所侵犯
3. 如何关闭SELinux
为什么要先讲如何关闭呢?因为搜索了一下,这个看来是问的最多的问题。的确如果你确实不需要或者还没有掌握SELinux的话,它会给你服务器的日常工作带来麻烦。所以下面我就来讲讲几种关闭SELinux的方法
3.1 无须重起而暂时关闭SELinux
以root用户运行以下命令
# setenforce 0
这条命令的作用是把SELinux暂时设定成Permissive模式(关于Permissive Mode在以下会有介绍)
如果要恢复运行SELinux则可以运行
# setenforce 1
这条命令会把SELinux设定成Enforcing模式
3.2 把SELinux永久设定为Permissive模式
这里需要讲一下Permissive和Enforcing模式的区别。 SELinux有三种模式:Enforcing, Permissive and Disable.
Enforcing模式就是应用SELinux所设定的Policy, 所有违反Policy的规则(Rules)都会被SELinux拒绝
Permissive和Enforcing的区别就在于它还是会遵循SELinux的Policy,但是对于违反规则的操作只会予以记录而并不会拒绝操作
Disable 顾名思义就是完全禁用SELinux
如果要永久设定为Permissive模式,我们就要修改SELinux的配置文件 /etc/sysconfig/selinux (在RHEL5下这是一个symbolic link to /etc/selinux/conf)
# 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 - SELinux is fully disabled.
SELINUX=enforcing
# SELINUXTYPE= type of policy in use. Possible values are:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted
修改SELINUX=permissive,然后重新启动就可以了
还有一种设置为Permissive的方法就是在boot loader里设置kernel parameter. 下面以grub为例
修改 /boot/grub/grub.conf, 写入enforcing=0
title Red Hat Enterprise Linux Server (2.6.18-8.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-8.el5 ro root=/dev/VolGroup00/LogVol00 enforcing=0
initrd /initrd-2.6.18-8.el5.img
注意设定kernel parameter会override配置文件的设置,所以如果bootloader里是enforcing=0,而设置文件里是 SELINUX=enforcing的话,那么重起以后SELinux还是会在Permissive模式下运行
建议如果在测试SELinux时遇到问题应该先把它设定为Permissive模式。等你确定需要永久关闭SELinux功能才把它设置成disable
3.3. 永久关闭SELinux
如果你确定需要永久关闭SELinux,那么就应该把它设置成disable模式
修改 /etc/sysconfig/selinux
SELINUX=disable
然后重新启动
或者也可以在boot loader里设置 selinux=0
title Red Hat Enterprise Linux Server (2.6.18-8.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-8.el5 ro root=/dev/VolGroup00/LogVol00 selinux=0
initrd /initrd-2.6.18-8.el5.img
4. SELinux需要注意的几点
1. SELinux和其他的linux安全工具一样是用来辅助和增强linux的安全性,而不是用来代替原有的linux的安全设置。所以如果遇到 permission deny的情况下,应该首先检查是不是遵守了Linux本身的安全设置,然后再来检查它是否违反了SELinux所设定的规则
2. SELinux是基于kernel的安全系统。所以有些时候在改变了它的有关设置时需要重起系统才可以产生效果
3. SELinux对于deny的规则没有任何的设置。也就是说凡是不符合规则的操作将全部被deny
4. 在SELinux的Permissive模式下,kernel 只会记录第一次违犯规则的情况。而在Enforcing模式下每一次违反规则的情况都会被记录下来
5. SELinux的参考资料
1. NSA的SELinux官方主页: http://www.nsa.gov/selinux/
2. Fedora Project的SELinux主页: http://fedoraproject.org/wiki/SELinux
3. Dennis Walsh的live journal: http://danwalsh.livejournal.com/
0 0
- SELinux简单介绍(转)
- SELinux 介绍[转]
- SELinux介绍
- selinux介绍
- SELinux-介绍
- SELinux介绍
- SELinux 介绍
- SELinux 介绍
- SELinux的介绍
- SELinux/SEAndroid -- 基础知识介绍
- Android SELinux相关介绍
- Blog19@linux介绍selinux
- SELinux简单学习
- SELinux简单学习
- CentOS简单管理SELINUX
- 关于FC核心下selinux的介绍
- selinux
- SELinux
- 64位Ubuntu 12.04 安装mysql-workbench
- Python 基础01—Hello World
- Apache Commons-logging使用实例
- java 常用的for循环写法 -----网上摘录
- Django 数据库QuerySet操作
- SELinux简单介绍(转)
- Deep Learning源代码收集-持续更新…
- mysql 省级数据库,市级数据库。
- 如何自建appender扩展Log4j框架
- 黑马程序员_001_面向对象的特性
- Exception in thread main java.lang.Error Unresolved compilation problem
- 如何判断H264的帧为I帧
- 一些国外大学免费硕博全文数据库以及部分期刊全文
- svn移迁:linux之间svn迁移备份