selinux

一.selinux简介

        SELinux是Security-Enhanced Linux的缩写,意思是安全强化的linux
        SELinux 主要由美国国家安全局(NSA)开发,当初开发的目的是为了避免资源的误用传统的访问控制在我们开启权限后,系统进程可以直接访问当我们对权限设置不严谨时,这种访问方式就是系统的安全漏洞
        在开启SElinux后:
1.会对进程本身部署安全上下文
2.会对文件部署安全上下文
3,会对服务使用端口进行限制
4.会对程序本身的不安全功能做限制

二.selinux的工作原理

2.1.selinux的工作方式

        ELinux 是通过 MAC 的方式来控制管理进程,它控制的主体是进程,而目标则是该进程能否读取的文件资源。

        主体( subject ):就是进程
        目标( object ):被主体访问的资源,可以是文件、目录、端口等。
        策略( policy ):由于进程与文件数量庞大,因此 SELinux 会依据某些服务来制定基本的访问安全策略。
        这些策略内还会有详细的规则( rule )来指定不同的服务开放某些资源的访问与否。目前主要的策略有:
        targeted:针对网络服务限制较多,针对本机限制较少,是默认的策略;
        strict:完整的SELinux限制,限制方面较为严格。
 

2.2.selinux的安全上下文

文件的

[root@server ~]# ls -Z
unconfined_u:object_r:admin_home_t:s0 公共  unconfined_u:object_r:admin_home_t:s0 音乐
unconfined_u:object_r:admin_home_t:s0 模板  unconfined_u:object_r:admin_home_t:s0 桌面
unconfined_u:object_r:admin_home_t:s0 视频      system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
unconfined_u:object_r:admin_home_t:s0 图片                                      ? timinglee.org.zone
unconfined_u:object_r:admin_home_t:s0 文档                                      ? zzh.conf
unconfined_u:object_r:admin_home_t:s0 下载

进程的

[root@server ~]# ps axZ | grep vsftpd
system_u:system_r:ftpd_t:s0-s0:c0.c1023 1063 ?   Ss     0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 2958 pts/1 S+   0:00 grep --color=auto vsftpd

安全上下文用冒号分为四个字段:
        Identify:role:type:
        身份标识(Identify):相当于账号方面的身份标识,主要有以下三种常见的类型:root:表示root的账号身份;system_u:表示程序方面的标识,通常就是进程; unconfined_u:代表的是一般用户账号相关的身份。
        角色(role):通过角色字段,可知道这个数据是属于程序、文件资源还是代表用户。一般角色有:object_r:代表的是文件或目录等文件资源;                                                       system_r:代表的是进程。
        类型(type):在默认的targeted策略中,Identify与role字段基本上是不重要的,重要的在于这个类型字段。而类型字段在文件与进程的定义不太相同,分别是:type:在文件资源上面称为类型。domain:在主体程序中则称为域。domain需要与type搭配,则该程序才能够顺利读取文件资源。
        最后一个字段是和MLS和MCS相关的东西,代表灵敏度,一般用s0、s1、s2来命名,数字代表灵敏度的分级。数值越大、灵敏度越高。

三.对于selinux的管理及优化


3.1.SELinux三种模式


enforcing:强制模式,代表SELinux正在运行中,开始限制domain/type。
permissive:宽容模式,代表SELinux正在运行中,不过仅会有警告信息并不会实际限制 domain/type的访问。
disabled:关闭,SELinux并没有实际运行。

3.1.1查看状态

[root@server ~]# getenforce
Enforcing

3.2.2开启与关闭服务

[root@server ~]# grubby --update-kernel ALL --args selinux=1  #开启selinux服务
[root@server ~]# grubby --update-kernel ALL --args selinux=0  #关闭selinux服务

3.2.管理上下安全文

3.2.1/临时

1.创建文件查看安全上下文

[root@server ~]# touch /mnt/file
[root@server ~]# ls
公共  模板  视频  图片  文档  下载  音乐  桌面  anaconda-ks.cfg  timinglee.org.zone  zzh.conf
[root@server ~]# cd /mnt
[root@server mnt]# ls
file
[root@server mnt]# ls -Z
unconfined_u:object_r:mnt_t:s0 file

2.临时修改的命令可以看到修改成成功了

[root@server mnt]# chcon -t public_content_t file
[root@server mnt]# ls -Z
unconfined_u:object_r:public_content_t:s0 file

3.创建文件,这个文件是selinux重启的标识文件,当此文件存在时。selinux在系统重启后会重新初始化

[root@server ~]# touch /.autorelabel

4.重启计算机,然后查看文件可以看到文件的安全上下文再次被修改了

3.2.2.永久

先查看file文件

[root@server ~]# cd /mnt
[root@server mnt]# ls
file
[root@server mnt]# ls -Z
unconfined_u:object_r:default_t:s0 file

修改文件的安全上下文

[root@server mnt]# semanage fcontext -a -t public_content_t '/mnt/file(/.*)?'
[root@server mnt]# restorecon -RvvF /mnt/file
Relabeled /mnt/file from unconfined_u:object_r:default_t:s0 to system_u:object_r:public_content_t:s0
[root@server mnt]# ls -Z
system_u:object_r:public_content_t:s0 file

重启,查看发现文件没有被更改安全上下文了

[root@server mnt]# reboot      #重启计算机

[root@server ~]# cd /mnt
[root@server mnt]# ls -Z
system_u:object_r:public_content_t:s0 file

3.3.selinux对linux服务的影响

以下都是在selinux状态为enforcing状态下进行

3.3.1.服务的功能影响

在系统selinux开启后会添加新的功能开关,,我们把这个开关叫做sebool;

查看sebool值

[root@server ~]# getsebool -a |grep ftp
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_home_dir --> off

修改

[root@server ~]# setsebool -P ftpd_anon_write on
[root@server ~]# getsebool -a |grep ftp
ftpd_anon_write --> on
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_home_dir --> off

先给目录赋权

[root@server ~]# chmod 777 /var/ftp/pub/

使用ftp上传文件功能,可以发现文件上传成功了

[root@server ~]# lftp 192.168.94.222
lftp 192.168.94.222:~> cd pub/
cd 成功, 当前目录=/pub
lftp 192.168.94.222:/pub> put /etc/inittab
490 bytes transferred
lftp 192.168.94.222:/pub> quit
3.3.2.服务的端口影响

在系统开启selinux后会规定服务的端口使用

查看服务被允许的端口

nginx端口修改后启用不了

[root@server ~]# systemctl restart nginx
Job for nginx.service failed because the control process exited with error code.
See "systemctl status nginx.service" and "journalctl -xeu nginx.service" for details.

使用查看命令可以看到nginx服务对应的端口并没有6868

[root@server ~]# semanage port -l |grep http
http_cache_port_t              tcp      8080, 8118, 8123, 10001-10010
http_cache_port_t              udp      3130
http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t            tcp      5988
pegasus_https_port_t           tcp      5989

修改端口

[root@server ~]# semanage port -a -t http_port_t -p tcp 6868
[root@server ~]# semanage port -l |grep http
http_cache_port_t              tcp      8080, 8118, 8123, 10001-10010
http_cache_port_t              udp      3130
http_port_t                    tcp      6868, 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t            tcp      5988
pegasus_https_port_t           tcp      5989

这是查看selinux的状态时enforcing的

[root@server ~]# getenforce
Enforcing

这是重新启动nginx服务就可以启动成功了

[root@server ~]# systemctl restart nginx
[root@server ~]# 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值