基于linux下的selinux的管理与控制

#################1.什么是selinux#######################################

SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。

selinux:内核级加强型防火墙,影响程序的访问文件,影响程序的服务程序功能,影响服务所使用的资源。 

selinux影响程序的访问文件是通过安全上下文来控制的,影响服务程序的功能是通过sebool值来控制的。selinux开启后会关闭系统认为所有不安全的功能,并组织所有认为不不安全的操作 .

################2.selinux状态控制####################################################

(1)查看selinux状态

命令:getenforce                                             #查询结果有3种状态 
1、enforcing                                                    #强制模式,拒绝不被警告。
2、disabled                                                     #关闭模式

3、permissive                                                #selinux有效,即是违法策略,依旧可以继续操作,但是会有警告。

注意:当selinux状态下。可以查看警告信息:cat /var/log/audit/audit.log

(2)更改selinux状态

/etc/sysconfig/selinux       ##selinux状态控制文件

vim /etc/sysconfig/selinux #文件编辑 
reboot #重启 
测试:

[root@localhost ~]# getenforce
Disabled
[root@localhost ~]#vim /etc/sysconfig/selinux  #修改selinux=Enforcing
[root@localhost ~]#reboot  #重启
[root@localhost ~]# getenforce  

Enforcing注意:设置保存完后,需重启才能生效。permissive模式和enforce模式切换不要重启。 (3)selinux临时状态设定

setenforce 0    ##警告模式设定(重启后恢复)

setenforce 1    ##强制模式设定(重启后恢复)

测试:

[root@localhost ~]# setenforce 0
[root@localhost ~]# getenforce
Permissive
[root@localhost ~]# setenforce 1
[root@localhost ~]# getenforce
Enforcing
强制状态下看不到文件,但在警告状态下可以看到文件eg:

#################3.selinux安全上下文管理##############################################################

做selinux安全上下文时首先需要开启vsftpd,关闭firewalld

[root@localhost ~]# systemctl restart vsftpd
[root@localhost ~]# systemctl enable vsftpd
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
rm '/etc/systemd/system/basic.target.wants/firewalld.service'
rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
(1)临时修改安全上下文

当安全上下文匹配时访问允许,若不匹配时则不被允许;特定的文件被特定的程序访问

(例如:ftpd_t 只能访问public_content_t的文件) 
移动:不改变文件的属性和权限,重命名的过程;

复制:改变文件的属性,新建的过程

   touch /mnt/westos  创建文件
   mv /mnt/westos /var/ftp  移动到/var/ftp
   ls -Z   查看上下文
   semanage fcontext -l | grep /var/ftp  查看安全上下文
   chcon -t public_content_t westos2  更改安全上下文的类型

第一步:开启ftp服务关闭防火墙,移动文件后查看/var/ftp目录。

第二步:在强制模式下,查看不到移动过去的westos1。查看/var/ftp的安全上下文

第三步:查看/var/ftp所有的安全上下文,然后将westos1更改为public_content_t安全上下文,再次查看时,

可以看到westos1文件

注意:将/etc/sysconfig/selinux改为disable后reboot重启,重启后再改为enforcing再次reboot重启,

表示将selinux重启一次。再次查看临时改的文件安全上下文就没有了。

(2)永久修改安全上下文

mkdir /westos

touch /westos/westosfile

vim /etc/vsftpd/vsftpd.conf

anon_root=/westos

systemctl restart vsftpd l

ftp 172.25.254.228 不能查看家目录文件

第一步:建立目录,编写匿名权限。


第二步:重启配置文件,匿名登录查看不到建立的目录,这时查看目录的目标上下文是什么

第三步:查看/var/ftp的源上下文是什么,并且查看默认/westos安全上下文列表

第四步:添加永久安全上下文为public_content_t,并刷新重启,看到效果。



注意:当seliunx出错时,执行touch /.autorelabel,在根底下建立.autorelabel文件

(相当于selinux 自动初始化),

然后重启系统,selinux恢复。

##########################4.selinux布尔值#############################################

setsebool -P ftp_home_dir on 打开服务开关(-P 永久,为了使系统更安全)

lftp 172.25.254.228 -u student

put /etc/passwd 上传失败

setsebool -a | grep ftp

setsebool -P ftp_home_dir on

lftp 172.25.254.228 -u student 上传成功

第一步:切换到student下,下载文件,提示553的报错(权限过小)

第二步:查看ftp的布尔值情况,并且修改布尔值策略改为开启

            

第三步:开启布尔值策略后再次下载,看到结果

   

##############################5.监控selinux冲突#######################################

当新建文件|目录时,在浏览器查看ftp://ip,查看不到新建文件、目录,并且产生日志 
/var/log/messages #查看报错后,程序提供解决方案 
/var/log/audit/audit.log #查看报错信息 
其中提供解决方案的不是系统而是一个软件程序,但此工具不安全,只是解决当前不能访问的问题;

查找安装包:rpm -qa | grep setrouble ;如果删除此工具,在日志/var/log/messages下是不会提供方案,

但是/var/log/audit/audit.log中可以看到日志 。

[root@localhost ~]# cd /var/ftp
[root@localhost ftp]# rm -fr *
[root@localhost ftp]# vim /etc/vsftpd/vsftpd.conf #关闭用户家目录修改
             注释#anon_root=/westos
[root@localhost ftp]# systemctl restart vsftpd
[root@localhost ftp]# touch /mnt/westos
[root@localhost ftp]# mv /mnt/westos /var/ftp
[root@localhost ftp]# > /var/ftp/messages
网页浏览:   ftp://172.25.254.228        #浏览器测试:看不到文件westos,并产生日志
[root@localhost ftp]# cat /var/log/audit/audit.log    ##查看日志
[root@localhost ftp]# cat /var/log/messages    
              解决方案:restorecon -v '$FIX_TARGET_PATH' ##日志内容过多,这里只显示解决方案这一行
[root@localhost ftp]# restorecon -v /var/ftp/* ##根据解决方案解决冲突

网页浏览:   ftp://172.25.254.228    ##可以看到westos文件



setroubleshoot是查看SElinux日志报错的命令

[root@localhost ftp]# rpm -qa | grep setrouble  ##查找排错工具安装包
[root@localhost ftp]# yum remove setroubleshoot-server-3.2.17-2.el7.x86_64  ##卸载
[root@localhost ftp]# > /var/log/audit/audit.log
[root@localhost ftp]# > /var/ftp/messages       ##清空日志
[root@localhost ftp]# cat /var/log/audit/audit.log      ##查看效果没有出错提示
[root@localhost ftp]# cat /var/log/messages    
在浏览器中刷新查看日志
[root@localhost ftp]# cat /var/log/audit/audit.log    ##查看为空
[root@localhost ftp]# cat /var/log/messages     ##没有出错工具提示
[root@localhost ftp]# yum install setroubleshoot-server -y   ##安装排错包
[root@localhost ftp]# > /var/log/audit/audit.log
[root@localhost ftp]# > /var/ftp/messages         ##清空日志
在浏览器中刷新再次查看日志
[root@localhost ftp]# cat /var/log/messages    ##有排错提示

[root@localhost ftp]# cat /var/log/audit/audit.log   ##可以查看到日志



######################################6.自定义设置端口#############################################

第一步:更改端口信息后,不能将httpd重启,因为新添加的端口不在默认端口里面所以重启失败

第二步:将selinux改为警告模式可以重启httpd,查看selinux允许的http端口

第三步:添加6666端口到selinux允许端口中,并将selinux改为强制模式,

再次重启,没有报错说明添加端口成功。


阅读更多
个人分类: 运维 linux
上一篇linux下vsftp服务
下一篇基于linux下的系统排错
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭