初步了解 selinux

来源:互联网 发布:ubuntu 谷歌输入法 编辑:程序博客网 时间:2024/06/08 03:03

1.简介:

SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是基于内核级的系统安全防护,是 Linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到。若要访问文件 , 你必须具有普通访问权限和 SELINUX 访问权限。因此 , 即使以超级用户身份 root 运行进程 , 根据进程以及文件或资源的 SELinux 安全性上下文可能拒绝访问文件或资源限 ) 标签。

2.SELINUX的优点

SELinux系统比起通常的Linux系统来,安全性能要高的多,它通过对于用户,进程权限的最小化,即使受到攻击,进程或者用户权限被夺去,也不会对整个系统造成重大影响。
接下来我来介绍SELinux的一些特点。
对访问的控制彻底化
特点1:MAC(Mandatory Access Control)―――对访问的控制彻底化
对于所有的文件,目录,端口这类的资源的访问,都可以是基于策略设定的,这些策略是由管理员定制的、一般用户是没有权限更改的。
对于进程只赋予最小的权限
特点2:TE (Type Enforcement)――― 对于进程只赋予最小的权限
Te概念在 SELinux里非常的重要。它的特点是对所有的文件都赋予一个叫type的文件类型标签,对于所有的进程也赋予各自的一个叫 domain的 标签。Domain标签能够执行的操作也是由access vector在策略里定好的。
我们熟悉的apache服务器,httpd进程只能在httpd_t 里运行,这个httpd_t 的domain能执行的操作,比如能读网页内容文件赋予httpd_sys_content_t,密码文件赋予shadow_t,TCP的80端口赋予 http_port_t等等。如果在access vector里我们不允许 http_t来对http_port_t进行操作的话,Apache启动都启动不了。反过来说,我们只允许80端口,只允许读取被标为 httpd_sys_content_t的文件,httpd_t就不能用别的端口,也不能更改那些被标为httpd_sys_content_t的文件(read only)。
防止权限升级
特点3:domain迁移 ―― 防止权限升级
在用户环境里运行点对点下载软件azureus,你当前的domain是fu_t,但是,你考虑到安全问题,你打算让他在azureus_t里运行,你要是在terminal里用命令启动azureus的话,它的进程的domain就会默认继承你实行的shell的fu_t。
有了domain迁移的话,我们就可以让azureus在我们指定的azureus_t里运行,在安全上面,这种做法更可取,它不会影响到你的fu_t。
下面是domain迁移指示的例子:
domain_auto_trans(fu_t,azureus_exec_t,azureus_t)
意思就是,当在 fu_t domain里,实行了 被标为 azureus_exec_t的文件时,domain 从fu_t迁移到 azureus_t。下面是Apache启动的迁移图。注意了,因为从哪一个domain能迁移到httpd_t是在策略里定好了,所以要是我们手动 (/etc/init.d/httpd start)启动apache的话,可能仍然留在sysadm_t里,这样就不能完成正确的迁移。要用run_init命令来手动启动。
对于用户只赋予最小的权限
特点4:RBAC(role base access control) ――――― 对于用户只赋予最小的权限
对于用户来说,被划分成一些ROLE,即使是ROOT用户,你要是不在sysadm_r里,也还是不能实行sysadm_t管理操作的。因为,那些ROLE可以执行那些domain也是在策略里设定的。ROLE也是可以迁移的,但是也只能按策略规定的迁移。

3.查看以及更改selinux 的模式

查看selinux模式:
命令:getenforce


在开启selinux的情况下 设置selinux 的模式
命令:setenforcing 0  设置为警告模式
          setenforcing 1  设置为强制模式


更改selinux 的开机状态:
修改文件:vim /etc/sysconfig/selinux 
可以修改为 SELINUX=disabled  来关闭selinux ,修改文件后重启内核才能生效。
SELINUX=enforcing           开启,强制模式
SELINUX=Permissive        开启,警告模式
SELINUX=disabled            关闭selinux




4.安全上下文

简介安全上下文:

所有的操作系统访问控制都是基于与主体和客体相关的访问控制属性的。在SELinux中,访问控制属性杯称作安全上下文。所有的客体(文件,进程间通信,通信管道,套接字,网络主机等)和主体(进程)有一个和他们相关的单一安全上下文。一个安全上下文有三个元素:用户,角色和类型标识符。

在标准Linux中,主体的进程访问属性是通过进程结构体提供的在linux内核中所有进程的真实有效的用户ID和组ID。这些属性被内核所保护着,并且经过一些列的控制方式来设置。包括登录进程和setuid程序。对于客体来说,文件的索引节点包含着一系列的访问模式位和文件的用户ID和组ID,前者是基于三个读/写/可执行位的集合来实现控制访问,这三个分别代表文件拥有者,文件组和其他任何人。后者决定了文件的所有者和组来决定对于一个给定的访问尝试应该使用哪一个位集合。

在SELinux中,访问控制属性他基本上就是安全上下文。所有的客体和主体有一个相关的安全上下文。标准Linux使用进程的用户/组ID,文件访问模式位和文件用户/组ID来同意或者是拒绝访问,SELinux使用进程和客体的安全上下文来进行访问控制。更具体的说,由于SELinux的主要访问控制特征是TE,即类型强制策略,安全上下文中的类型标识符被用来决定访问。

SELinux是在标准Linux之上添加的类型强制机制。也就是说标准Linux和SELinux访问控制都必须满足才能访问客体。所以,例如,我们有SELinux对于文件的一个写权限,但是没有标准linux的写权限,我们依然不能想文件中写入数据。

查看安全上下文:

命令 ls -Z


修改安全上下文:(重启selinux 后会失效)

临时修改

chcon -t 安全上下文    文件

例如:chcon -t public_content_t /mnt -R

 例如在使用vsftpd 服务的时候

我们将匿名用户默认登陆的目录改为 /danger

先查看目录/danger 的安全上下文 :为 default


然后我们用匿名用户的登陆ftp, 没有看见目录下的东西


然后我们修改/danger 的安全上下文,然后我们再登陆ftp就可以看见/danger 下面的文件



永久修改安全上下文:

semanage fcontext -l   列出所有的安全上下文

semanage fcontext -a -t public_content_t '文件路径(/.*)?'

semanage -FvvF /目录/    重新加载立即生效


5.管理selinux布尔值

SELinux 布尔值是更改 SELinux 策略行为的开关。SELinux 布尔值是可以启用或禁用的规则。安全管理员可以使用 SELinux 布尔值来调整策略 


getsebool -a | grep 服务名称      #查看布尔值

setsebool P 功能bool值 on|off    #开启或关闭服务

设置ftp 可以再家目录里执行动作


然后我们用本地用户登陆,就可以上传文件了




原创粉丝点击