selinux功能
首先我来查看我们系统的selinux状态,因为之前作vsftp实验,所以selinux是设置为disable关闭了,可以用命令:getenforce ,去查看
seliux关闭状态: 在/mnt/中建立文件文件
-Z查看文件的安全上下文,可以看到是“?”,并且去查看vsftpd程序发现程序前面的安全上下文也是空
安全上下文为空文件被移动到ftp默认发布目录中可以被访问
ftp程序安全上下文为空 用户可以上传文件
编配配置文件更改selinux的状态:vim /etc/sysconfig/selinux
enforcing表示开启,改完后reboot重启,当selinux开启以上功能操作均失败
重启时系统会重新加载安全上下文,以上功能操作均失败
在selinux重启后,新建的文件都文件的安全上下文,即使移动文件,安全上下文也是存在的
可以看到再去匿名访问,testfile1文件是看不到,因为他们的安全设定是不同的
用命令getsebool -a | grep ftp 查看selinux对ftp 的限制
当selinux开启会对服务本身相对不安全的功能加载开关sebool并且设定开关为关闭状态以保
证服务安全性
当需要此功能时需要超级用户手动调节
selinux状态
状态类型:
Disabled | 关闭 |
enforcing | 强制 |
permissive | 警告 |
setenforce 0/1 :0表示警告模式 1表示强制模式
当设置为警告模式时,我们就可以查看到文件,但是系统日志会给出警告信息
selinux开关:
编辑配置文件:vim /etc/sysconfig/selinux
SELINUX=[selinux的状态]:3种状态去写入,写完后要重启系统才可以
安全上下文
安全上下文的临时更改
命令:
更改文件: chcon -t 安全上下文类型 文件名
更改目录: chcon -R 安全上下文类型 目录名
更改后,ftp就可以访问到了
注意:这里设置的为什么说是临时呢,因为在selinux状态重新设置关闭再开启,我们更改的安全上下文就会还原到之前的
安全上下文永久更改设定
如果要让安全上下文永久生效那就需要更改内核配置
- 创建目录,更改本地用户登录家目录
[root@rhel8-work ~]# mkdir -p /testuser/testfile
编辑写入配置: vim /etc/vsftpd/vsftpd.conf ,锁定登录的家目录为/testuser
local_root=/testuser
- selinux状态为enforcing,用户登录lftp服务进去看不到家目录下的文件
因为安全上下文不匹配,可以查看/var/ftp的安全上下文来和/testuser做对比
查看出/var/ftp的为public_content_t,而/testuser/为default_t,所以无法看到 - 内核安全上下文查看 semanage
根据查看/var/ftp是可以看到列表信息。而/testuser是没有任何信息 - 修改安全上下文命令
[root@rhel8-work ~]# semanage fcontext -a -t 安全上下文 目录名'(/.*)?'
[root@rhel8-work ~]# restorecon -RvvF 目录名
(/.*)? 表示目录中将要出现的内容,因为这样修改的内容是不会直接生效的所以还需要“restorecon -RvvF”刷新安全上下文。
完成后我们就可以看到重新设置安全上下文的文件是可以被看到的,并且新建的文件也会继承目录更改后的安全上下文
sebool
SEBOOL:selinux 对服务功能能添加的开关
可以通过命令来查看程序的selinux的限制:getsebool -a | grep ftp
查看ftp的功能开关
查看到的第一条ftpd_anon_write --> off ,ftp的默认的selinux限制是不允许匿名用户可写,如果我们想要在selinux功能开启的状态下允许匿名用户可写,可以用到sebool功能,
命令:setsebool -P ftpd_anon_write=1\on ,表示永久开启此匿名用户写的功能,1和on都可以,参数-P表示永久开启,不加-P是临时的,
更改后,在vsftp配置文件里确认匿名用户可写配置开启,使用 lftp 命令测试,
注意在这里我要注意的原本的/var/ftp/put目录的安全上下文是public_content_t,只是可以访问,但是不可以读写,所以在上面的实验前我们需要去更改安全上下文使它变为public_content_rw_t,
保证这个前提后,再去测试lftp可写的功能就没有影响了
setrouble
在使用selinux时,产生的日志会被采集到/var/log/audit/audit.log,而不是/var/log/messenges,
我们建立在/mnt下一个文件,mv到/var/ftp里,lftp访问时因为安全上下文不同是看不到这个文件,selinux就会出现报错信息,而这些信息会被采集到/var/log/audit/audit.log 里,
在linux系统种有一个程序setroubleshoot,可以帮我们去分析报错信息,并为我们提供解决方案
- 安装 setroubleshoot 服务
- 使用setroubleshoot服务
命令sealert -a 日志路径 ,表示分析日志并提供解决方案
使用后等待分析过程,完后下面会有解决方案
我们来尝试提供的解决方案
可以看到问题被解决了