实验环境配置
为了更好的观察 selinux 的实验效果,在实验之前确保系统中安装 vsftpd 服务,修改配置文件 /etc/vsftpd/vsftpd.conf ,并修改 ftp 的默认发布目录的权限,确保匿名用户可以上传文件。
1. Selinux 的功能
实验现象
- 当 Selinux 未开启时
- 在 /mnt 中建立文件被移动到 /var/ftp 下可以被 vsftpd 服务访问;
- 当使用 ls -Z /var/ftp 查看文件时显示“?”;
- 匿名用户可以通过设置后上传文件;
- pa auxZ |grep vsftpd 时显示:
- root 8546 0.0 0.0 26952 408 ? Ss 10:25 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
- 当Selinux 开启:
- 匿名用户通过设置后仍然不能上传文件;
- 在 /mnt中建立文件被移动到/var/ftp 下不可以被 vsftpd 服务访问;
- 当使用 ls -Z /var/ftp 查看文件时显示 context;
- pa auxZ | grep vsftpd 时;
- selinux 的功能
- 对于文件的影响:
当 selinux 开启时,内核会对每个文件以及每个开启的程序进行标签加载;
标签内记录程序和文件的安全上下文(context) ,指定安全上下文的程序只能访问指定安全上下文的文件,否则访问不到。 - 对于程序功能的影响:
当 selinux 开启会对程序的功能加载开关,并设定此开关的状态为关闭;
当需要此功能时需要手动开启功能开关,此开关叫做 sebool。
2. Selinux 的状态及管理
- selinux的开启
对于 selinux 的开启可以通过对于配置文件 /etc/selinux/config 进行更改;
当第七行的内容为 SELINUX=disabled 时表示 selinux 关闭;
当 SELINUX=enforcing 时表示 selinux 开机设定为强制状态此状态为 selinux 开启;
当 SELINUX=permissive 时表示 selinux 开机设定为警告状态此状态为 selinux 开启;
注 : selinux 开启或关闭需要重启系统
enforcing:不符合条件一定不能被允许,并会收到警告信息;
permissive:不符合条件被允许,并会收到警告信息;
-
selinux 状态的查看
getenforce -
selinux 开启后强制和警告级别的转换
setenforce 0 ##警告
setenforce 1 ##强制
- selinux日志位置
/var/log/audit/audit.log
如图当 selinux 为 Enforcing 时表示不符合条件一定不能被允许,并会收到警告信息;此时在查看默认发布目录时,没有看到新建的文件,动作被禁止,并收到警告信息;
如图当设定 selinux 为 permissive 时,不符合条件被允许,并会收到警告信息;可以看到新建的文件可以访问,但是也收到了警告信息。
3. selinux 的安全上下文
- 查看
ls -Z ##查看文件的安全上下文
ls -Zd ##查看目录的安全上下文
ps axZ ##查看进程的安全上下文
- 修改安全上下文
临时修改
此方式更改的安全上下文在 selinux 重启后会还原
chcon -t 标签 文件|目录
chcon -t public_content_t /var/ftp/westosfile1
chcon -Rt public_content_t /westosdir #修改目录及目录中的所有子文件的安全上下文
永久修改安全上下文
如果需要特殊指定安全上下文需要修改内核安全上下文列表
semanage fcontext -l ,查看内核安全上下文列表 ;
semanage fcontext -a -t public_content_t ’ /westosdir(/.*)? ’ ,其中 (/. *)? 里面的内容,表示为已经存在的和将来要建立的设定;
restorecon -RvvF /westosdir/ ,刷新安全上下文列表;
touch /.autorelabel ,重启系统时selinux初始化文件标签开关文件;
以上的设置在开机时不会自动初始化加载标签,当 selinux 中的文件更改为 disable 之后,重启系统再更改为 enforcing 时在开机时才会加载标签;这种方法需要重启两次比较麻烦。但是当系统中 /.autorelabel 文件存在时,该文件为 selinux 的重启标识;selinux 在开机时会自动初始化标签。
4. sebool
getsebool -a ,查看当前服务的 sebool 值;
setsebool -P ftpd_anon_write on 用来更改 sebool 值,-P 表示永久的意思;
当 selinux 设置为开启时,在重启系统时,会默认设定所有的服务的 bool 值为关闭状态,此时当需要那个时,需要手动去开启 bool 的开关。
5. seport
semanage port -l | grep ssh
semanage port -a -t ssh_port_t -p tcp 1111 ##添加
semanage port -d -t ssh_port_t -p tcp 1111 ##删除
修改 ssh 服务的端口为 1111.
在 selinux 开启的状态下,如果设定 selinux 为 permissive ;当修改某一端口时,会正常的重启服务;
在 selinux 开启的状态下,如果设定 selinux 为 enforcing 时 ;当修改某一端口时,此时为强制状态,重启服务会失败;
可以用命令 semanage port -l | grep ssh 来查某一服务 selinux 允许的端口信息;
输入命令 semanage port -a -t ssh_port_t -p tcp 1111 来为 ssh 服务添加 1111 端口;
当添加 selinux 中允许的端口时,此时再重启服务便不会有问题;
当不需要某一端口时,输入命令 semanage port -d -t ssh_port_t -p tcp 1111 来删除 selinux 中允许的端口 1111 ,此时再重启服务又会有问题。
6. setrouble
- /var/log/audit/audit.log ,selinux 警告信息;
- /var/log/messages ,selinux 问题解决方案,系统日志;
- setroubleshoot-server ,此软件功能是采集警告信息并分析得到解决方案存放到 message 中
输入命令 > /var/log/audit/audit.log 和 > /var/log/messages 来分别清空两个存放日志的文件信息;当在访问 ftp 服务时,没有看到新建的文件,此时可以对于日志信息进行查看;/var/log/audit/audit.log 文件中只会有警告信息;
而 /var/log/messages 会有 selinux 问题解决方案;
根据文件的提示,来输入命令 restorecon -FvvR /var/ftp 时,再次访问 ftp 时,便可以看到新建的文件已经可以被访问;
以上的解决方案时因为系统中安装了 setroubleshoot-server 服务,该服务可以采集警告信息并把分析得到解决方案存放到 message 日志中;
当我们在卸载该服务之后,清空日志,新建文件,继续访问 ftp 服务,此时只有 /var/log/audit/audit.log 文件中只会有警告信息;而 /var/log/messages 文件中便没有信息,因为系统无法提供 selinux 的解决方案。