SElinux

SElinux介绍

(1)SElinux是Security Enhanced Linux的缩写,安全强化的linux,设计的目标是避免资源的误用。SElinux是通过MAC(强制访问控制)的方式来控制进程,其控制的主体是进程,目标是该进程能否读取的文件资源。
MAC针对特定的进程和特定的文件资源进行权限控制。
(2)SElinux是在进行程序,文件等权限设置依据的一个内核模块。由于启动网络服务的也是程序,因此SElinux也是能够控制网络服务能否访问系统资源的。
(3)SElinux在运行中进程能否访问文件资源,重点在于策略内的规则以及实际的安全上下文。进程通过SElinux策略内的规则后,与文件资源的安全上下文进行比较,比较通过则可以访问文件资源,反之则访问失败。

1.对selinux状态进行管理

内核级别的加强防火墙 selinux 三种状态:
强制enforcing,
警告permissive,
关闭disabled。
disabled关闭状态, enforcing,permissive开启状态

  • getenforce 可以查看selinux状态;
  • 设置selinux状态为 permissive或者enforcing:
    setenforce 0 selinux=permissive警告状态(只是警告,仍可以执行)
    setenforce 1 selinux= enforcing 强制状态(不可以)
    临时的!!重启后变为配置文件中的设置;
    永久更改要在配置文件 /etc/sysconfig/selinux中更改,reboot重启系统。

2.安全上下文

进程与文件系统的安全上下文必须一致才能顺利访问。
安全上下文的组成:

Identify:role:type
身份识别:角色:类型

(1)identify
主要有以下三种:
root:表示root的帐号身份
system_u:表示系统进程方面的表示
user_u:表示一般用户帐号的身份
(2)角色
通过角色可判断数据属于程序,文件资源还是代表用户。
object_r:代表的是文件或目录等文件资源
system_r:代表的是进程,一般用户也会被指定为system_r
(3)类型
一个主题进程能不能访问文件资源与类型字段有关。domain与type搭配才能顺利读取文件资源。
type:在文件资源上称为类型
domain:在主题程序上成为域。
查看安全上下文:

ls -Z ##查看目录或文件的安全上下文

临时修改安全上下文:

chcon
-R #连同该目录下的子目录也一同修改
-t #指定安全上下文字段,如:http_sys_content_t
-r #指定角色:如:system_r
-u #后面接身份识别,如:system_u

restorecon #使用默认的安全上下文来还原
restorecon -RVVF #刷新安全上下文,临时修改刷新后不生效
R表示递归,vv表示多个文件显示过程,F表示指向刷新

在这里插入图片描述

永久修改安全上下文:

 semanage #安全上下文的查询与修改
 fcontext #主要用于安全上下文
 semanage fcontext -a ##添加
 -m 修改
 -d 删除
 -1 查询默认安全上下文设置
 semanege fcontext -a -t public_content_rw_t '/haha(/.*)?' #永久修改
 restorecon -RvvF /haha #刷新后生效

3.selinux带来的影响

1.对文件的影响

针对安全上下文;与程序的安全上下文相匹配,即程序标签ftp_t能识别安全上下文为public_content_t的文件,只能访问特定标签的文件

2.服务本身功能的影响

(如用户能否上传文件),关闭一些认为不安全的服务功能

 lftp 172.25.254.140 -u student
 put /etc/passwd 
 不能上传文件

测试:
查看selinux状态:
selinux为强制状态;
若不是开启状态,vim /etc/sysconfig/selinux
修改 selinux=enforcing
修改完配置文件后,reboot

在这里插入图片描述

test 文件移动到 /var/ftp 下,
查看安全上下文,test的安全上下文为 admin_home_t;
lftp(文本形式浏览器) ip(172.25.254.140)
进入到ftp服务器的匿名用户默认发布目录:/var/ftp/
登陆不上是因为服务没打开;
systemctl start vsftpd 打开服务;
重新登陆ftp服务器;
发现 test 文件看不到(不一样的安全上下文不能在lftp服务中看到,ftp_t程序不能识别)。
在这里插入图片描述
我这里使用的 7.3版本系统,ftpd_home_dir 默认是打开的,用户直接可以上传文件;

在这里插入图片描述

4.SElinux功能的设定

解决强制状态下不能上传文件

在selinux为enforcing状态下本地用户不能上传文件,更改开关:

getsebool -a | grep ftp

getsebool -a 查看所有开关

setsebool -P ftp_home_dir on/1

-P表示永久permanent,修改布尔值(0(off)/1(on))

lftp 172.25.254.140 -u student

put /etc/passwd 

上传文件(可以啦)

测试:
7.3版本系统,ftpd_home_dir 默认是打开的,用户直接可以上传文件;

在这里插入图片描述

7.0版本的系统需要打开ftp_home_dir;
在这里插入图片描述

setsebool -P ftp_home_dir 1|on

修改匿名用户发布目录

创建目录 mkdir /var/ftpdir
在该目录下创建文件 touch /var/ftpdir/file{1..3}
配置文件中将刚创建的目录修改为发布目录:

vim /etc/vsftpd/vsftpd.conf 
  anon_root=/var/ftpdir
systemctl restart vsftpd

在这里插入图片描述
在这里插入图片描述
问题:
登陆到ftp服务器后,发布目录下看不到文件。
解决:

临时修改安全上下文

在这里插入图片描述

ls -Zd /var/ftpdir/ 

查看 /var/ftpdir/ 安全上下文

chcon -t public_content_t /var/ftpdir/ -R

-R第归修改;-t 指定安全上下文类型
/var/ftpdir/安全上下文类型修改为可以被识别的ftp_t程序识别的public_content_t
在这里插入图片描述
lftp 172.25.254.140
可以看到!
但是重启内核之后,修改过的安全上下文又变为原来的类型。

重启前:
此时selinux为enforcing状态,
分别查看 /var/ftp/var/ftpdir 目录的安全上下文,均为public_content_t;
在这里插入图片描述

重启内核(disable,重启使生效,enforcing,重启使生效)
vim /etc/sysconfig/selinux/ 
修改 selinux=disabled
reboot

重启后再次编辑配置文件,打开selinux,重启使修改生效:

vim /etc/sysconfig/selinux 
修改selinux=enforcing
reboot 

此时在查看 /var/ftp/var/ftpdir 目录的安全上下文:

/var/ftpdir/
安全上下文变回原来了
在这里插入图片描述

永久修改安全上下文

semanage fcontext -l | grep /var/ftpdir 

查看selinux对/var/ftpdir目录的安全上下文的管理记录
-l 查看 -a 添加

semanage fcontext -l | grep /var/ftp

由下图可知,系统对 /var/ftp 有返回信息,对我们自己创建的 /var/ftpdir 没有记录。
在这里插入图片描述

semanage fcontext -a -t public_content_t "/var/ftpdir(/.*)?" 

更改 ftpdir(/.*)?表示ftpdir下的所有目录或文件
?是特殊字符,所以需要加引号

semanage fcontext -l | grep /var/ftpdir 

有返回信息,表示selinux已经对 /var/ftpdir 有记录安全上下文设置;
ls -Zd /var/ftpdir
安全上下文没有改变,需要刷新

restorecon /var/ftpdir

刷新,改变了
在这里插入图片描述

匿名用户在selinux=enforcing状态下上传文件

vim /etc/vsftpd/vsftpd.conf
anon_upload_enable=yes
systemctl restart vsftpd

chmod 775 /var/ftp/pub
chgrp ftp /var/ftp/pub/

chron -t public_content_rw_t /var/ftp/pub(public_content_rw_t 可读写,public_content_t,只读)

getsebool -a | grep ftp
setsebool -P ftpd_anon_write on(1)

打开匿名用户上传功能

5. setroubleshoot功能

监控selinux错误信息
报错会在日志/var/log/messages里显示。
当安装setroubleshoot-server软件时,日志中会提供解决办法。

/var/log/messages
/var/log/audit/audit.log ##清空
lftp 172.25.254.140
ls##浏览
ctrl+D##退出
cat /var/log/audit/audit.log ##日志记录,报错看不到
cat /var/log/messages##有解决方案(针对/var/log/audit/audit.log中的内容给出解决办法)

yum remove setroubleshoot-server.x86_64 ##卸载(不要卸载错)

/var/log/messages
/var/log/audit/audit.log ##清空
lftp 172.25.254.140
ls##浏览
ctrl+D##退出
cat /var/log/audit/audit.log##有日志记录,报错看不到
cat /var/log/messages##没有解决方案

yum install setroubleshoot-server.x86_64 -y ##安装

/var/log/messages
/var/log/audit/audit.log ##清空
lftp 172.25.254.140
ls##浏览
ctrl+D##退出
cat /var/log/audit/audit.log##日志记录,报错westos4看不到的问题
cat /var/log/messages##有解决方案(针对/var/log/audit/audit.log中的内容给出解决办法)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值