linux之SELinux

SELinux 概述:
SELinux 全称Security Enhanced Linux(安全性增强的Linux),由美国国家安全局
NSA(National Security Agency)开发,构建亍kernel 乀上的、拥有灵活而强制性的访问控制
结构,旨在提高Linux 系统的安全性,提供强健的安全保证,可防御未知攻击,据称相当亍B1
级的军事安全性能;
已经被整合到2.6 以上kernel 中;
传统Linux 在没有SELinux 保护的时候,倘若运行亍乀上的服务被骇客攻陷,其服务器最高权限
就有可能随乀丧失;但是倘若有了SELinux 的保护,入侵的也只是服务本身,整个服务器的最高
权限依旧还健在;
信息安全评估标准: 4 类7 级别。从低到高: D,C1,C2,B1,B2,B3,A

SELinux 特点(1)
1、MAC(Mandatory Access Control)-对访问的控制彻底化,对所有的文件、目彔、端口的访问,
都是基亍策略设定的。这些策略是由管理员设定的、一般用户是无权更改的;
2、RBAC(Role Base Access Control)-对亍用户只赋予最小权限。对亍用户来说,被划分成一些role,
即使是root 用户,你要是丌在sysadm_r 里,也还是丌能实行sysadm_t 管理操作的。
3、TE (Type Enforcement)-对进程只赋予最小运行权限, TE 概念在 SELinux 中非常重要;其特点
是对文件赋予一个叫type 的文件类型标签,对亍进程赋予一个叫 domain 的 标签;可以规定某个进程
只能执行某类文件。
进程A ,可以读标签为T1 的文件。

a.txt T 1 b.txt T 2    vim 只能编辑标签为T1 的文件。


SELinux 的执行模式


enforcing 强制模式,只要SELinux 丌允许,就无法执行;
permissive 警告模式,将该事件记彔,依然允许执行;
disabled 关闭SELinux;


SELinux 的运行机制

规定进程中以打开哪此文件。


安装selinux
系统默认已经安装上了
相关的软件包:


[[email protected] ~]# rpm -qa | grep selinux
libselinux-devel-2.0.94-5.2.el6.x86_64
libselinux-utils-2.0.94-5.2.el6.x86_64
libselinux-2.0.94-5.2.el6.x86_64
libselinux-python-2.0.94-5.2.el6.x86_64
selinux-policy-3.7.19-126.el6.noarch
selinux-policy-targeted-3.7.19-126.el6.noarch

配置文件位置:
[[email protected] Packages]# vim /etc/selinux/config

启动关闭selinux
getenforce  #查询当前selinux 运行状态
强制:enforcing

允许:permissive

禁用:Disabled


SELINUX=enforcing(强制:违反了策略,你就无法继续操作下去)
Permissive(有效,但不强制:违反了策略的话它让你继续操作,但是把你的违反的内容记彔下来)
Disabled(禁用)


开启selinux的方法:
例2. selinux状态切换,由关闭到开启
注:从关闭到开启必须修改配置文件
[[email protected] ~]# vim /etc/selinux/config
改:SELINUX=disabled
为:SELINUX=enforcing
 

重启才能生效
注:初次启动时,因为要更新文件标签,启动时间比较长
reboot   或    init   6

关闭selinux
例3:selinux状态切换,由开启到关闭
方法一:
[[email protected] ~]# setenforce 0
[[email protected] ~]# getenforce
Permissive

由pemissive切换到enforcing
[[email protected] ~]# setenforce 1
[[email protected] ~]# getenforce
Enforcing

方法二:
#vim /boot/grub/grub.conf
改:kernel /vmlinuz...   selinux=0
或者
在开机时,编辑grub界面,给内核传一个: selinux=0 方法和进入单用户模式一样。
 
 
回车,按下b键开始启动操作系统。
 

selinux运行模式:
 

targeted:保护常见的网络服务,是selinux的默认值;
MLS - 多级安全保护。 
比如美剧“神盾局特工”中,特工分为: 4级特工,5级特工,10级特工等。不同等级的特工,可以访问不同的内容。

selinux 配置举例:
security context:安全上下文(安全环境) 由以下内容构成:
system_u:object_r:httpd_sys_content_t
用户     角色     类型
policy:策略(控制规则,哪些进程可以访问哪些资源。)

安全上下文
当启动selinux的时候,所有文件与对象都有安全上下文。进程的安全上下文是域domain,
安全上下文由:  用户:角色:类型表示。
(1)系统根据pam子系统中的/lib64/security/pam_selinux.so模块设定登录者运行程序的安全上下文
(2)rpm包安装会根据rpm包的内记录来生成安全上下文,
(3)如果是手工他建的,会根据policy中规定来设置安全上下文,
(4)如果是cp,会重新生成安全上下文。
(5)如果是mv,安全上下文不变。

安全上下文格式
安全上下文由user:role:type三部分组成,下面分别说明其作用:
1、user :类似linux系统中的UID,提供身份识别,安全上下文中的一部分。
三种常见的user:
user_u:   普通用户登录系统后预设;
system_u:开机过程中系统进程的预设; 管理员
unconfined_u  :非限制,没有做定义

2、role
文件与目录的role,通常是object_r;
程序的role,通常是system_r;
用户的role,类似于系统中的GID,不同的角色具备不同的权限;用户可以具备多个role;但是同一时间内只能使用一role;

3、type
type:用来将主体与客体划分为不同的组,组每个主体和系统中的客体定义了一个类型;为进程运行提供最低的权限环境。

例4:查看一个配置文件的selinux安全上下文
查看文件:ls -Z
或:ls --context
[[email protected] ~]# touch a.txt
[[email protected] ~]# ls -Z a.txt
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 a.txt
第一段 unconfined_u 代表的是用户,
第二段 object_r 表示的是角色,普通文件和目录都为object_r角色,
第三段是SELinux中最重要的信息,admin_home_t表示的是类型,
①第一段: 指的是SElinux用户,root表示root账户身份,user_u表示普通用户无特权用户,system_u表示系统用户,通过用户可以确认身份类型,一般搭配角色使用。
②object_r  object_r一般为文件和目录的角色、system_r一般为进程的角色,在targeted策略环境中用户的角色一般为system_r。
③admin_home  文件和进程都有一个类型

例5:查看一个目录的安全上下文
[[email protected] ~]# ls -Zd /root/
dr-xr-x---. root root system_u:object_r:admin_home_t:s0 /root/
system_u表示系统用户
object_r  object_r一般为文件和目录的角色
admin_home_t  表示管理员的家目录

例6:查看普通用户宿主目录的安全上下文
[[email protected] ~]# useradd rm
[[email protected] ~]# ls -Zd /home/rm/
drwx------. rm rm unconfined_u:object_r:user_home_dir_t:s0 /home/rm/

[[email protected] ~]# ls -Z /etc/passwd
-rw-r--r--. root root system_u:object_r:etc_t:s0       /etc/passwd

4、chcon
说明:变文件目录的selinux属性标签。
使用方式:
chcon [OPTION]... CONTEXT FILE...
chcon [OPTION]... --reference(参考)=RFILE FILE...
参数如下:
-u USER:set user USER in the target security context
-r ROLE:set role ROLE in the target security context
-t TYPE:set type TYPE in the target security context

注:selinux开启后,进程只能访问标识为自己只够访问的安全上下文的文件与目录。
例7:修改文件的安全上下文
[[email protected] ~]# ls -Z /etc/hosts
-rw-r--r--. root root system_u:object_r:net_conf_t:s0  /etc/hosts
[[email protected] ~]# ls -Zd /var/
drwxr-xr-x. root root system_u:object_r:var_t:s0       /var/

改:
[[email protected] ~]# chcon -t var_t /etc/hosts
[[email protected] ~]# ls -Z /etc/hosts
-rw-r--r--. root root system_u:object_r:var_t:s0       /etc/hosts

例8:修改目录及目录下所有文件的安全上下文
[[email protected] ~]# mkdir /tmp/abc
[[email protected] ~]# ls -Zd /tmp/abc/
drwxr-xr-x. root root unconfined_u:object_r:user_tmp_t:s0 /tmp/abc/
修改上下文:
[[email protected] ~]# chcon -R -t samba_share_t /tmp/abc/
[[email protected] ~]# ls -Zd /tmp/abc/
drwxr-xr-x. root root unconfined_u:object_r:samba_share_t:s0 /tmp/abc/

例9:当不知道是什么类型时,参考一下服务中其它文件
[[email protected] ~]# echo "2016-4-11" > a.html
[[email protected] ~]# mv a.html /var/www/html/
[[email protected] ~]# echo "2016-4-12" > /var/www/html/b.html
[[email protected] ~]# ls -Z /var/www/html/
-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 a.html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 b.html

启动httpd服务
[[email protected] ~]# service httpd restart
测试:
http://192.168.31.245/b.html   ok
http://192.168.31.245/a.html   不ok
临时关闭selinux
[[email protected] ~]# setenforce 0
测试:
http://192.168.31.245/b.html
http://192.168.31.245/a.html
修改安全上下文
[[email protected] ~]# chcon --reference=/var/www/html/ /var/www/html/a.html
[[email protected] ~]# ls -Z /var/www/html/
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 a.html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 b.html
[[email protected] ~]# setenforce 1

测试:
http://192.168.31.245/b.html
http://192.168.31.245/a.html
复制一个文件或目录时,安全上下文,会改变为目标目录的类型
[[email protected] ~]# echo aaaaaa > c.html
[[email protected] ~]# cp c.html /var/www/html/
[[email protected] ~]# ls -Z /var/www/html/
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 a.html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 b.html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 c.html
测试:
http://192.168.31.245/c.html

5、命令:restorecon
说明:恢复档案目录的预设的security Context
规则来源:/etc/selinux/targeted/contexts/files/目录内的file_contexts与file_contexts.local
查看系统中保存好的规则:
[[email protected] ~]# ls /etc/selinux/targeted/contexts/files/
file_contexts  file_contexts.homedirs  media
[[email protected] ~]# cd  /etc/selinux/targeted/contexts/files/
[[email protected] files]# vim file_contexts  #查看
/.*     system_u:object_r:default_t:s0
/[^/]+  --      system_u:object_r:etc_runtime_t:s0
/a?quota\.(user|group)  --      system_u:object_r:quota_db_t:s0
比如: www
 

restorecon常用参数如下:
-r | -R:包含子目录和目录下的文件
-v:显示执行过程
[[email protected] ~]# ls -Z /etc/ntp.conf
-rw-r--r--. root root system_u:object_r:net_conf_t:s0  /etc/ntp.conf
[[email protected] ~]# chcon -t var_t /etc/ntp.conf
[[email protected] ~]# ls -Z /etc/ntp.conf
-rw-r--r--. root root system_u:object_r:var_t:s0       /etc/ntp.conf
[[email protected] ~]# restorecon -v /etc/ntp.conf
restorecon reset /etc/ntp.conf context system_u:object_r:var_t:s0->system_u:object_r:net_conf_t:s0

以上内容是安全上下文的内容

selinux策略
1、getsebool命令  查看selinux策略。策略:作用,指定进程可以访问哪些文件
例:获取本机selinux策略值,也称为bool值。
[[email protected]]# getsebool -a
NetworkManager_disable_trans--> off
allow_cvs_read_shadow--> off
allow_daemons_dump_core--> on

说明:selinux的设置一般通过两个部分完成的,一个是安全上下文,另一个是策略,策略值是对安全上下文的补充。

说明:SELinux规范了许多boolean数值清单档案,提供开启或关闭功能存取项目,而这些值都存放在/selinux/booleans/目录内相关文件中,这些文件中的值只有两种:1(启用)或 0(关闭)
例:查看bool值
[[email protected] ~]# ls /selinux/booleans/ | more
abrt_anon_write
abrt_handle_event
allow_console_login

[[email protected] ~]# cat /selinux/booleans/allow_ftpd_anon_write
0 0
说明:设定selinux bool数值清单表与内容
使用方式:setsebool [ -P ]  boolean value | bool1=val1 bool2=val2 bool3=val3......
参数: -P 是永久性设置,否则重启之后又恢复预设值。

例1:使用系统用户登录ftp后,会自动切换自己的家目录。
在开启selinux的情况下,允许普通用户可以登陆ftp并且上传下载文件
[[email protected] ~]# useradd rm
[[email protected] ~]# echo 123456 | passwd --stdin rm

[[email protected] ~]# yum -y install vsftpd
[[email protected] ~]# service vsftpd start
[[email protected] ~]# setenforce 1
测试:使用rm登录ftp
 
无法登陆

解决:
[[email protected] ~]# getsebool -a | grep ftp_home
ftp_home_dir --> off
[[email protected] ~]# setsebool -P ftp_home_dir=on
 

例2:设置允许ftp服务器匿名用户登录后,可以创建文件
默认修改vsftpd.conf的情况下只允许匿名用户进行登录并允许下载,不允许上传。
 
修改ftp配置文件,开启上传和写入功能
 
[[email protected] ~]# service vsftpd restart
service  vsftpd restart
测试:
仍然是创建失败,显示为权限不允许

 

改selinux:
[[email protected] ~]# setenforce 0
[[email protected] ~]# chmod 777 /var/ftp/pub/
 

[[email protected] ~]# getsebool -a | grep allow_ftpd
allow_ftpd_anon_write --> off
[[email protected] ~]# setsebool -P allow_ftpd_anon_write=on

再进行测试:
[[email protected] ~]# setenforce 1
 

解决,修改文件类型:
[[email protected] ~]# ls -Zd /var/ftp/pub/
drwxrwxrwx. root root system_u:object_r:public_content_t:s0 /var/ftp/pub/
[[email protected] ~]# chcon -t public_content_rw_t /var/ftp/pub/
 



时间: 2024-10-14 11:09:30

linux之SELinux的相关文章

Linux之SElinux安全上下文件(1)

Linux之SElinux安全上下文件(1) SELinux:Secure Enhanced Linux,是美国国家安全局(NSA=The National Security Agency)和SCC(Secure Computing Courporation)开发的LInux的一个强制控制的安全模块.2000年以GNU GPL发布,Linux内核2.6版本后继承在内核中. 访问控制类别: DAC:Discretionary Access Control 自由访问控制 MAC:Mandatory

DTE Linux、SELinux与SEAndroid之间的对比分析

2000年,美国威廉玛丽学院的研究人员Serge等人在USENIX的4th annual Linux Showcase &Conference会议上发表了题为"Domainand Type Enforcement for Linux"的文章.该文章第一次将DTE模型用于Linux,实现了DTE Linux原型系统. 同年,美国国家安全局NSA的Stephen Smalley等人发布了开源的Linux安全框架SELinux,SELinux第一个版本基于Linux 2.5内核,并采

谢烟客---------Linux之SELinux的基本应用

SELinux基础/激活或关闭SELinux/改变object的域/启用或关闭程序功能 获取更多帮助 <SELinux权威指南> 或许应该叫:如何理解Windows Linux比Windows更安全,这样说不合理. 安全等级: A>B>C>D Linux(c2) Windows(c2) GUI界面:MAC>Windows 图形工作站:mac Windows 专业普及计算机系统.图形不如mac,又不够安全. SELinux基础 1)访问模型 Linux原有访问模型:自主访

Linux下SElinux详解

1.SElinux 全称:Security-Enhanced Linux,灵活的强制访问控制(MAC)系统,且内嵌于Linux Kernel中,仅                    集合最小权限访问, 2. 查看文件上下文: ls -Z [[email protected] ~]# ls -Z -rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg -rw-r--r--. root root system

Linux的selinux的初级管理

SElinux,内核级加强型防火墙, SELinux[Security Enhanced Linux (安全强化 Linux)],是工作在内核中的MAC (Mandatory Access Control,强制访问控制系统)的一个实现,目的在于明确的指明某个进程可以访问哪些资源(文件.网络端口等).强制访问控制系统的用途在于增强系统 抵御 0-Day 攻击(利用尚未公开的漏洞实现的攻击行为)的能力.所以它不是网络防火墙或 ACL 的替代品,在用途上也不重复. 对于selinux的通俗理解:   

Linux之Selinux几种模式之间的转换说明

在linux环境下执行某些程序时,偶尔会遇到来一个关于SELinux的强制模式不可执行的情况,这种情况下需要关闭SELinux或者将enforcing改为 permissive 模式后才能进行执行. selinux是Linux内核中提供的强制访问控制(MAC)系统下面就selinux的几种模式及其转换进行说明: SELinux 的启动.关闭与查看 1.并非所有的 Linux distributions 都支持 SELinux 目前 SELinux 支持三种模式,分别如下: •enforcing:

linux的SELinux的设置及防火墙服的设置

security-Enhanced  linux 美国NSA国家局主导开发,一套增强Linux系统安全的强制访问控制体系, 集成到Linux内核(2.6及以上)中运行. RHEL7基于SELinux体系针对用户.进程.目录和文件提供了预设的保护策略, 以及管理工具. SELinux的运行模式 enforcing(强制) permissive(宽松) disabled(彻底禁用) getenforce 查看当前SElinux状态 setenforce  0 或 1  设置当前SELinux状态 永

Linux的SElinux可能导致的服务器异常的研究

今天先写现象: 某台服务器由于误操作启动了SELinux,导致了服务器无法登陆,原有用户名口令全部失效.再关闭SElinux后,恢复正常. 我现在的好奇在于,SElinux基于什么样的原理阻止了单用户模式下的passwd命令执行. SELiunx原理: 通过一个在linux内核外挂的模块LSM(Linux Security Modules),在原生linux的权限管理后增加了一个钩子(hook),在原生权限检查后,通过这个钩子增加了SELinux的策略检查.通过这个被称为类型强制的机制,可以进行

Linux开启SELinux的情况下怎么解决nginx403跟502错误

https://www.cnblogs.com/caijt/p/10978324.html 以上篇博客中说了怎么在linux部署asp.net core  跟 nginx,里面成功的前提是把SElinux关了,SELinux一开,确实出现很多莫名奇妙的问题,我网上查,大多数的解决方法也是教你把SElinux关了. 我研究了下怎么在不关SELinux的情况下,Nginx还能正常地使用. 先说下SElinux是什么,其实我也看不太懂,不过我了解了一点规则 先说下两个命令跟参数 ps -Z ls -Z