码迷,mamicode.com
首页 > 系统相关 > 详细

linux之SELinux

时间:2016-06-05 01:18:08      阅读:462      评论:0      收藏:0      [点我收藏+]

标签: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
系统默认已经安装上了
相关的软件包:


[root@kevin ~]# 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

配置文件位置:
[root@kevin Packages]# vim /etc/selinux/config

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

允许:permissive

禁用:Disabled


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


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

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

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

由pemissive切换到enforcing
[root@kevin ~]# setenforce 1
[root@kevin ~]# 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
[root@kevin ~]# touch a.txt
[root@kevin ~]# 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:查看一个目录的安全上下文
[root@kevin ~]# 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:查看普通用户宿主目录的安全上下文
[root@kevin ~]# useradd rm
[root@kevin ~]# ls -Zd /home/rm/
drwx------. rm rm unconfined_u:object_r:user_home_dir_t:s0 /home/rm/

[root@kevin ~]# 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:修改文件的安全上下文
[root@kevin ~]# ls -Z /etc/hosts
-rw-r--r--. root root system_u:object_r:net_conf_t:s0  /etc/hosts
[root@kevin ~]# ls -Zd /var/
drwxr-xr-x. root root system_u:object_r:var_t:s0       /var/

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

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

例9:当不知道是什么类型时,参考一下服务中其它文件
[root@kevin ~]# echo "2016-4-11" > a.html
[root@kevin ~]# mv a.html /var/www/html/
[root@kevin ~]# echo "2016-4-12" > /var/www/html/b.html
[root@kevin ~]# 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服务
[root@kevin ~]# service httpd restart
测试:
http://192.168.31.245/b.html   ok
http://192.168.31.245/a.html   不ok
临时关闭selinux
[root@kevin ~]# setenforce 0
测试:
http://192.168.31.245/b.html
http://192.168.31.245/a.html
修改安全上下文
[root@kevin ~]# chcon --reference=/var/www/html/ /var/www/html/a.html
[root@kevin ~]# 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
[root@kevin ~]# setenforce 1

测试:
http://192.168.31.245/b.html
http://192.168.31.245/a.html
复制一个文件或目录时,安全上下文,会改变为目标目录的类型
[root@kevin ~]# echo aaaaaa > c.html
[root@kevin ~]# cp c.html /var/www/html/
[root@kevin ~]# 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
查看系统中保存好的规则:
[root@kevin ~]# ls /etc/selinux/targeted/contexts/files/
file_contexts  file_contexts.homedirs  media
[root@kevin ~]# cd  /etc/selinux/targeted/contexts/files/
[root@kevin 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:显示执行过程
[root@kevin ~]# ls -Z /etc/ntp.conf
-rw-r--r--. root root system_u:object_r:net_conf_t:s0  /etc/ntp.conf
[root@kevin ~]# chcon -t var_t /etc/ntp.conf
[root@kevin ~]# ls -Z /etc/ntp.conf
-rw-r--r--. root root system_u:object_r:var_t:s0       /etc/ntp.conf
[root@kevin ~]# 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值。
[root@redhatfiles]# getsebool -a
NetworkManager_disable_trans--> off
allow_cvs_read_shadow--> off
allow_daemons_dump_core--> on

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

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

[root@kevin ~]# 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并且上传下载文件
[root@kevin ~]# useradd rm
[root@kevin ~]# echo 123456 | passwd --stdin rm

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

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

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

 

改selinux:
[root@kevin ~]# setenforce 0
[root@kevin ~]# chmod 777 /var/ftp/pub/
 

[root@kevin ~]# getsebool -a | grep allow_ftpd
allow_ftpd_anon_write --> off
[root@kevin ~]# setsebool -P allow_ftpd_anon_write=on

再进行测试:
[root@kevin ~]# setenforce 1
 

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






linux之SELinux

标签:linux.selinux

原文地址:http://kevinfish.blog.51cto.com/1183772/1786160

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!