一、SELinux

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

为什么NSA选择Linux呢?

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

在了解selinux之间,我们需要知道DAC和CS的概念,它们是linux系统本身的安全机制。

DAC:自主访问控制

每一个用户为了能够实现和其他用户共享文件,在使用ACL之前,只能通过改变这个文件其他用户的权限,但是这中方法给系统安全带来了无穷的隐患。

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

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

所有才又了MAC强制访问控制的概念

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选项永久有效

二、实现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

Linux中的SELinux与chcon以及Samba实现【转】的更多相关文章

  1. linux中的selinux到底是什么

    一文彻底明白linux中的selinux到底是什么 2018年06月29日 14:17:30 yanjun821126 阅读数 58877 标签: SElinux 更多 个人分类: Linux   一 ...

  2. 一文彻底明白linux中的selinux到底是什么

    https://www.phpyuan.com/235739.html 一.前言 安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内 ...

  3. Linux中的SELinux详解--16

    SELinux 宽容模式(permissive) 强制模式(enforcing) 关闭(disabled)  几种模式之间的转换 在CentOS6.2 中安装intel 的c++和fortran 的编 ...

  4. LINUX中错误 SELinux is disabled

    解决: setenforce: SELinux is disabled 那么说明selinux已经被彻底的关闭了 如果需要重新开启selinux,请按下面步骤: vi /etc/selinux/con ...

  5. Linux中samba服务器的搭建

    使用的vmware12虚拟机安装的centos6.8和物理机上的windows10,实现在windows10 上访问CentOs上的samba服务. 一.先查看系统中是否安装有samba服务相关的软件 ...

  6. linux中Samba服务器的配置

    Samba简介 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件 ...

  7. Redhat Enterprise Linux中如何关闭SELinux?

    转自http://www.cnitblog.com/lywaml/archive/2005/06/21/468.html 红帽企业 Linux 4 包括了一个 SELinux 的实现.SELinux ...

  8. Linux中架构中的备份服务器搭建(rsync)

    本期内容概要 Linux中的备份方式 架构中备份服务器搭建(rsync) 内容详细 1.备份方式 1. cp : 本机复制(只能作用在本机) 2. scp : 远程复制 两种模式: 推 : 本地上传到 ...

  9. linux中rsync备份文件

    linux中rsync备份文件 备份文件的方式 备份方式: cp : 本机复制 scp: 远程复制 推(本地上传到远程服务器): scp 1.txt root@ip:[路径] [root@m01 ~] ...

随机推荐

  1. c++ 浅谈 new 的使用

    实例用法: 创建对象: class U_Ptr smart; U_Ptr* ptr = new U_Ptr(); class U_Ptr smart(new U_Ptr(p)); int *p = n ...

  2. 蓝桥杯 算法训练 ALGO-114 黑白无常

    算法训练 黑白无常   时间限制:1.0s   内存限制:256.0MB 问题描述 某寝室的同学们在学术完之后准备玩一个游戏:游戏是这样的,每个人头上都被贴了一张白色或者黑色的纸,现在每个人都会说一句 ...

  3. juc线程池原理(四): 线程池状态介绍

    <Thread之一:线程生命周期及五种状态> <juc线程池原理(四): 线程池状态介绍> 线程有5种状态:新建状态,就绪状态,运行状态,阻塞状态,死亡状态.线程池也有5种状态 ...

  4. MongoDB 4.X搭建

    一.MongoDB4.X搭建 1.下载mongdb安装包,在官网上找到对应的版本,我的是centos7 找到上面的连接,通过命令行: 2.将下载的mongodb-linux-x86_64-4.0.0. ...

  5. USB设备驱动总结

    现象:把USB设备接到PC        (韦老师总结) 1. 右下角弹出"发现android phone" 2. 跳出一个对话框,提示你安装驱动程序 问1. 既然还没有" ...

  6. VMware虚拟机上网络连接模式bridged(桥接模式)

    VMware虚拟机上网络连接模式bridged(桥接模式)的实质就是虚拟机本身利用主机的网卡对外直接作为一个真实的物理主机存在. 也就是理论上此时的虚拟机和主机没什么关系,只是和主机公用了一块网卡,其 ...

  7. C Primer Plus学习笔记(十)- 字符串和字符串函数

    getchar() 和 putchar() getchar() 函数不带任何参数,它从输入队列中返回下一个字符 下面的语句读取下一个字符输入,并把该字符的值赋给变量 ch ch =getchar(); ...

  8. java - 只输出中文,(不包含标点)

    String a ="12dss显示,‘:()中文只"; StringBuffer b = new StringBuffer(); for(int i = 0;i<a.len ...

  9. MySQL高可用MHA实战

    MySQL高可用架构MHA介绍 简介: MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职 ...

  10. Hibernate 实体对象三种状态 :自由,持久,游离

    实体对象的状态及转化: 有了上面关于Hibernate缓存的知识,我们再来介绍实体对象的状态就非常容易理解了. A:自由态对象: 当我们通过Java的new关键字来生成一个实体对象时,这时这个实体对象 ...