Linux中的SELinux与chcon以及Samba实现【转】

1、SELinuxhtml

SElinux的前身是NSA(美国国家安全局)发起的一个项目。它的目的是将系统加固到能够达到军方级别。linux

为何NSA选择Linux呢?apache

在目前市面上大多数操做系统都是商用闭源的,只有Linux是开源的,这样修改并加入这项功能就方便许多,并且没有版权纠纷。因此,如今selinux就成为了Linux内核的一部分。vim

在了解selinux之间,咱们须要知道DAC和CS的概念,它们是linux系统自己的安全机制。安全

DAC:自主访问控制服务器

每个用户为了可以实现和其余用户共享文件,在使用ACL以前,只能经过改变这个文件其余用户的权限,可是这中方法给系统安全带来了无穷的隐患。网络

CS(安全上下文):取决于发起用户的权限和文本自己的权限 测试

CS+DAC给系统的安全机制带来了漏洞,事想apache用户能够查看/etc/passwd,若是它有写权限,就可能被利用进而就修改passwd文件,危害系统安全。网站

全部才又了MAC强制访问控制的概念ui

MAC: Mandatory Access Control  强制访问控制,它是selinux实现访问控制的基础

还经过httpd服务来讲明它的原理:

SELINUX经过type enforce (TE)强制类型策略将httpd的工做目录定义在一个特定的目录/var/www用户若是在定义其余目录,将不容许访问,从而实现mac的强制访问控制。

selinux是怎么工做的

它经过operation (操做)的主和宾打一个“标签”,在一个“类型”里只能由特定的目录或用户执行。这样能够限定一个进程的执行范围只能在一个“沙箱”(sandbox)内了(最小权限法则)

###operation: 读,写,执行,等。实际上是一个主谓宾的结构 Subject Operation Object

###最小权限法则:例如定义Sbjiect httpd   的目录/var/www 为public_content_t类型,这样,httpd只能访问有这个特定类型的文件或目录,这些文件就叫沙箱“sendbox”

使用selinx,必须精心设计一套访问法则

给不一样的进程打上不一样的“域”,给不一样的目录打上不一样的”类型“经过定义“类型”和“域”的对应规则,来实现。selinx须要域和标签的对应关系,一对一对应     。可是系统上有上千个进程,实现起来很麻烦,因此通常状况下,并非用selinx做为安全防范。                  

selinux的实现机制有两种

strict:       任何进程都受selinux的控制,通常不用,太难设定

targeted:   红帽开发,指定选定的进程来受SELINUX,这种机制使得selinx更加容易受到控制 

policy: 规则组合起来就叫策略

规则一般是以二进制文件存在的(编辑完转换成二进制),这样能够下降系统资源占用

ll /etc/selinxu/policy

MLS  muiti level scurity

 


selinxu把一些规则里面能够方便控制的功能设定为on或者off,这些都成为布尔类型

getsebool -a   能够显示这些布尔型的内容

fcontext 规定目录属于哪一个进程的范围

启动使用selinux

1.启用selinux

1.vim /etc/sysconfig/selinux 
2.SELINUX=enforcing      #任何进程都受selinux控制 
3.                                     permissive    #仍然受控制,可是进程进入了别的目录会记录到日志 
4.                                     disable           #干净完全的关闭 
5.setenforce 
6.genenforce 
2.显示标签

1.ls -Z           显示文件的标签 
2.                   一共五段     角色:selinux里另外定义的用户 
3.                                                          object_r: 有点相似于组 
4.                                                          user_home_t: 域或者类型(最重要)经过改变它能够控制访问。类型强制的机制就是经过它实现的 
5.ps -Z          显示进程的标签 
6.全部显示unconfined_t都表示不受selinux控制 
7.ps auxZ | grep httpd 
8.ls -dZ 
在不一样的目录创建的文件类型是不同的,归不一样的进程管理。

3.改变一个类型的标签

1.chcon     chage contex  改变上下文 
2.chcon -t    改类型,指定为特定类型 
3.                -u    
4.                -R   递归修改,能够改变目录下全部目录 
5.                      --reference=   以某个文件的标签为参照改变成同样的标签 
6.chcon -R --reference=/var/www/html /www 
7.chcon -t default_t /www/index.html 
4.恢复默认安全上下文及修改

1.restorecon 
2.                   -R                   递归 
3.                   -F                                           强制 
4.                   -v                                           显示详细信息    
5.restorecon -R -v -F /www             # 显示/www目录的详细CS信息                      
6.semange 
7.                   -d                  删除 
8.                   -m                 修改 
9.                   -r 
10.                  -a                   附加 
11.                   -t                    类型 
12.  

6.开启布尔类型

1.getsebool -a  | grep httpd                   #查看某个对应的布尔类型的值 
2.setsebool httpd_enable_cgi=on          # 加上-p选项永久有效 

 

2、实现samba来测试selinux控制

 1.添加tools文件夹

1.vim /etc/samba/smb.conf 
2.[tools] 
3.       path = /share                        #没有的话事前建立一个 
4.       public = yes  5.        write list = @mygrp                 #只容许mygrp组具备建立文件的权限 
6.       browseable = yes 
7.service smb start 
2.添加用户gentoo,并设置samba密码,容许器登录samba服务器在tools下建立文件

1.</pre><pre class="cpp" name="code">groupadd mygrp 
2.useradd gentoo -g mygrp 
3.[root@station32 var]# smbpasswd -a gentoo 
4.New SMB password: 
5.Retype new SMB password:  6.Added user gentoo. 
7.smbclient -L 192.168.0.32 -U gentoo          # 查看samba服务器的内容 
3.咱们查看下/shared目录的CS,而且开启selinux

1.ls -dZ /share/ 
2.drwxrwxr-x root mygrp root:object_r:default_t          /share/ 
3.setenforce 1 
4.开启selinux后,再使用smbclient命令就会报错,咱们看下配置文件里面有这样一行 # To set a label use the following: chcon-t samba_share_t /path ,因此咱们必须把/shared文件夹的CS修改后才能正常使用samba

1.chcon -t samba_share_t  /share 

 


 

5.咱们关闭samba里关于访问家目录的布尔类型

1.setsebool samba_enable_home_dirs off  
这个时候使用win网络邻居,以用户gentoo登录后,就不能进入gentoo家目录了

 


6.咱们将它开启就又能访问了,命令以下:

1.setsebool samba_enable_home_dirs on 

本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文连接:http://www.linuxidc.com/Linux/2011-09/42783.htm

相关文章
相关标签/搜索