SElinux
SElinux简介
SELinux的全称是Security Enhanced Linux, 就是安全加强的Linux。在SELinux之前,root账号
能够任意的访问所有文档和服务;如果某个文件设为777,那么任何用户都可以访问甚至删除;这种
方式称为DAC(主动访问机制),很不安全。
DAC 自主访问控制: 用户根据自己的文件权限来决定对文件的操作,也就是依据文件的own,
group,other/r,w,x权限进行限制。Root有最高权限无法限制。r,w,x权限划分太粗糙。无
法针对不同的进程实现限制。
SELinux则是基于MAC(强制访问机制),简单的说,就是程序和访问对象上都有一个安全标签(即
selinux上下文)进行区分,只有对应的标签才能允许访问。否则即使权限是777,也是不能访问
的。
SElinux相关操作
1、Selinux状态查看与配置:
Selinux的配置文件位置:/etc/selinux/config,它还有个链接在/etc/sysconfig/selinux 两个文件作用是一样的
使用config文件来配置selinux(通过配置文件修改selinux的状态属于永久修改,要重启系统才生效)
SELINUX=enforcing
#此项定义selinux状态。
#enforcing—是强制模式系统受selinux保护。就是你违反了策略,你就无法继续操作下去
#permissive—是提示模式系统不会受到selinux保护,只是收到警告信息。permissive就是Selinux有效,但是即使你违反了策略的话它让你继续操作,但是把你的违反的内容记录下来(警告信息)
#disabled—禁用selinux。
SELINUXTYPE=targeted
#此项定义selinux使用哪个策略模块保护系统。targeted只对apache ,sendmail, bind,postgresql,nfs,cifs等网络服务保护。
以上策略配置都放置在/etc/selinux目录中,目录和策略名称相同
2、selinux相关命令查看和修改状态:(属于立即生效但临时性的)
sestatus 查询selinux工作状态
selinuxenabled检查selinux是否开启,配合echo $?.传回值是0为开启,1为关闭
getenforce查看selinux的状态
setenforce设定selinux运行状态,1开启(Enforcing),0关闭(Permissive)
安全上下文
简介
在SELinux中,访问控制属性叫做安全上下文。所有客体(文件、进程间通讯通道、套接字、网络
主机等)和主体(进程)都有与其关联的安全上下文,一个安全上下文由三部分组成:用户(u)、
角色(r)和类型(t)标识符。但我们最关注的是第三个部分,标识符。
当程序访问资源时,主体程序必须要通过selinux策略内的规则放行后,就可以与目标资源进行安
全上下文的比对,若比对失败则无法存取目标,若比对成功则可以开始存取目标,最终能否存取目
标还要与文件系统的rwx权限的设定有关。
修改安全上下文
实验前请将selinux设置为enforcing
1:在/mnt里面新建一个文件
2:mv /mnt/file /var/ftp/ (必须用mv,mv移动过去的文件的安全上下文不会改变,cp复制过去的文件安全上下文会改变为目标目录的安全上下文)
3:lftp ip
4:ls 无法看到从/mnt目录移动到/var/ftp中的文件
5:直接在/var/ftp/目录中新建一个文件,lftp ip ————> ls 可以看到直接建立的文件,因为直接建立的文件的安全上下文与目录相同
6:用 semanage fcontext -l | grep /var/ftp 或者 ls -Z 查看目录或者文件的安全上下文
7:临时修改安全上下文类型
chcon 意思是change context
-t type 类型
-R recursive 递归(特别适用于改变某个目录下所有文件的context)
-u user
-r role
我们用ls -Z /var/ftp可以看到,刚刚从/mnt目录移动过来的文件file的安全上下文和直接在/var/ftp目录下创建的file2文件的安全上下文不同,现在我们就来将file的安全上下文修改为和file2文件相同的安全上下文
chcon -t 安全上下文的类型 文件名
8:lftp ip ----> ls 修改了安全上下文的文件此时可以看到
以上的修改在selinux重启(disabled后重启在enforcing再次重启)后会还原
9:永久修改安全上下文(我们需要将安全上下文写入 semanage fcontext中)
a.创建一个目录
b.修改这个目录的安全上下文为public_content_t
3:重启selinux ####将selinux设定为disabled后重启系统,再将selinux设定为enforcing再重启系统##
4:ls -Zd 安全上下文还原
5:再次修改木录安全上下文
6:semanage fcontext -l | grep 目录 ### 查看目录安全上下文,因为没有将安全上下文写入 semanage fcontext,所以看不到
7:写入semanage fcontext: semanage fcontext -a(添加) -t(添加的类型) public_content_t ‘目录(/.*)?’
8:restorecon -FvvR /test/ 同步安全上下文
9:重启selinux查看安全上下文
给功能添加开关(SElinux)
SELinux 布尔值是更改 SELinux 策略行为的开关。 SELinux 布尔值是可以启用或禁用的规则。安全管理员可以使用 SELinux 布尔值来调整策略 , 以有选择地进行调整,许多软件包都具有 man page *_selinux(8), 其中详细说明了所使用的一些布尔值 ; man -k ‘_selinux’ 可以轻松地找到这些手册
getsebool -a | grep 服务名称
eg:getsebool -a | grep ftpd
实验:
1、本地用户登陆lftp
lftp 172.25.66.11 -u student
2、put /etc/passwd ###显示553 权限过小
3、getsebool -a | grep ftp 查看ftp的布尔值
我们需要将ftp_home_dir这一项设置为on即为打开状态
4、setsebool -P ftp_home_dir on 将ftp布尔值设为1,即打开(on)
5、接下来再做一次测试
lftp 172.25.66.11 -u student—>ls—>put /etc/passwd
排错
1:> /var/log/audit/audit.log > /var/log/message
2:touch /mnt/westos
3:mv /mnt/westos /var/ftp/
4:浏览器中输入 ftp://172.25.66.11
看不到刚刚移动过来的文件,是什么原因呢,让我们来排一下错
5:cat /var/log/audit/audit.log ###错误地方
安全上下文不同
cat /var/log/message ####改正方法
6:restorecon -v /var/ftp/* 将安全上下文同步
7:在浏览器重新查看 ## ftp://172.25.66.11
同步了westos的安全上下文之后就可以看到westos这个文件了
服务默认端口的设定
1:安装httpd
yum install httpd -y
2:vim /etc/httpd/conf/httpd.conf
第42行 设定一个端口值
3:systemctl restart httpd
此时会重启失败,将selinux设置为0(警告模式)则会重启成功
4:semanage port -l | grep http 查看端口
此时是看不到添加的端口值6666的,需要添加到配置文件
5:semanage port -a -t http_port_t -p tcp 设定的端口值 ###将要设置的端口值添加到配置文件
6:systemctl restart httpd 重启(此时selinux设置为0或者1都可以重启)