您的位置:首页 > 运维架构 > Linux

SELinux原理和使用

2015-06-23 21:52 375 查看
本文结构:SELinux介绍、安全上下文-->模式、策略设置和使用-->bool值作用、查询修改-->semanager工具安全上下文的使用
Security Enhanced Linux 安全强化linux
是一个嵌到内核中的模块,用于针对进程对系统资源的访问加强安全防护,以网络服务来说,服务的主体是进程,SELinx便可以控制网络服务是否能访问系统资源

为什么需要SELinux
传统的访问文件系统的方式是自主访问控制(Discretionary Access Control,DAC)通过所有者和文件资源的rwx权限决定可否访问
缺点:进程所有者只要拥有rwx权限,就可以对文件资源进行随意修改(例:若是管理者不小心将对外的服务目录如/var/www/html 权限改为777,则任何人都可以进行随意访问和修改)
SELinux,委托访问控制(Mandatory Access Contral,MAC)控制主体变成进程而不是用户,利用策略安全上下文的匹配控制进程对文件资源的访问

策略(policy)
targeted:针对网络服务的限制较多,针对本机限制较少,是默认策略

strict:严格限制,完整的SELinux限制

安全上下文(security context)
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
Identify:role:type
身份标识:root、system_u、user_u

角色:object_r、system_r

类型(type):

主体和目标安全上下文type字段一致才可访问
安全上下文是放置到文件inode内的 和rwx一样

进程和 SElinux type字段的关系:以httpd为例
首先运行程序 usr/sbin/httpdtype类型为 httpd_exec_t

该类型会让文件触发的主体进程(subject)具有httpd这个域(domain)

这个域已被制定了许多规则,包括域可以读取的目标资源类型type

httpd domain被设置为可以读取 httpd_sys_content_t这个类型的Object

/var/www/html的type类型为 httpd_sys_content_t

所以网页放到/var/www/html下就能被httpd进程读取了

最后再根据rwx的权限

SELinux使用

查看模式
getenforce

Enforcing // 强制模式
permissive:宽容模式(只提醒不禁止) disabled 关闭SELinux

改变模式
setenforce 0 / 1

查看策略
sestatus 列出当前策略和状态 [-v 列出/etc/sestatus.conf下的安全上下文内容] [-b 以布尔值的方式列出策略规则]

配置文件可修改模式和策略

/etc/selinux/config

[root@boxin ~]# cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted // 还有strict

启动与关闭

查看内核有无关闭 SElinux

[root@boxin ~]# cat /boot/grub/menu.lst
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux (2.6.32-431.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-431.el6.x86_64 ro root=UUID=7f7fc25f-c295-4b8a-8d2c-48ae97b01d41 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-431.el6.x86_64.img

若内核参数加上selinux=0则表示关闭功能

selinux是写到内核中的所以:改变模式或改变策略都要重启系统

修改安全上下文

chcon [-t 类型] [-R 递归] 目录/文件

[root@boxin ~]# chcon -R -t httpd_sys_content_t /var/www/html restorecon [-R 递归] [-v 显示过程] 目录/文件

// 通过默认安全上下文还原类型[root@boxin ~]# restorecon -Rv /var/www/html

SElinux日志记录
setroubleshoot:错误信息写入 /var/log/messages

auditd:详细日志信息包括错误信息写入/var/log/audit/audit.log

策略规则
查询状态规则(setools-console 使用seinfo的rpm包)
seinfo [-b 列出所有的(booleans)规则] [-u user] [-r role] [-t type] 列出当前状态下的统计状态

[root@boxin ~]# seinfo // 当前策略下的统计状态
Statistics for policy file: /etc/selinux/targeted/policy/policy.24
Policy Version & Type: v.24 (binary, mls)
Classes: 81 Permissions: 235
Sensitivities: 1 Categories: 1024
Types: 3637 Attributes: 280
Users: 9 Roles: 12
Booleans: 217 Cond. Expr.: 257 // 针对网络的规则boolens217条
Allow: 291033 Neverallow: 0
Auditallow: 123 Dontaudit: 226650
Type_trans: 33142 Type_change: 38
Type_member: 48 Role allow: 19
Role_trans: 308 Range_trans: 4521
Constraints: 90 Validatetrans: 0
Initial SIDs: 27 Fs_use: 23
Genfscon: 83 Portcon: 446
Netifcon: 0 Nodecon: 0
Permissives: 75 Polcap: 2
[root@boxin ~]# seinfo -b | grep httpd // httpd的bool值
httpd_manage_ipa
httpd_run_stickshift
httpd_use_fusefs
httpd_use_openstack
allow_httpd_mod_auth_pam
httpd_setrlimit
httpd_enable_ftp_server
httpd_use_nfs
布尔值查询修改(sesearch查看详细信息)

[root@boxin ~]# getsebool -a //查询
abrt_anon_write --> off
abrt_handle_event --> off
allow_console_login --> on
allow_cvs_read_shadow --> off
[root@boxin ~]# getsebool allow_console_login // 查询某一个
allow_console_login --> on
[root@boxin ~]# setsebool -P allow_console_login=1 //(1表示on, 0表示off),-P写入配置文件

文件默认安全上下文设置

[root@boxin ~]# semanage fcontext [-l 查询] [-a 增加] [-m 修改] [-d 删除] // fcontext用于安全上下文

例:

[root@boxin ~]# ls -Zd /srv/samba
drwxr-xr-x. root root unconfined_u:object_r:var_t:s0 /srv/samba
[root@boxin ~]# semanage fcontext -l | grep /srv/
/srv/([^/]*/)?ftp(/.*)? all files system_u:object_r:public_content_t:s0
/srv/([^/]*/)?rsync(/.*)? all files system_u:object_r:public_content_t:s0
/srv/([^/]*/)?www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
/srv/.* all files system_u:object_r:var_t:s0
/srv/gallery2(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
/srv/git(/.*)? all files system_u:object_r:git_sys_content_t:s0
[root@boxin ~]# semanage fcontext -a -t public_content_t "/srv/samba(/.*)?"
[root@boxin ~]# semanage fcontext -l | grep /srv/samba

/srv/samba(/.*)? all files system_u:object_r:public_content_t:s0
[root@boxin ~]# restorecon -Rv /srv/samba
restorecon reset /srv/samba context unconfined_u:object_r:var_t:s0->unconfined_u:object_r:public_content_t:s0
[root@boxin ~]# ls -dZ /srv/samba/
drwxr-xr-x. root root unconfined_u:object_r:public_content_t:s0 /srv/samba/

本文出自 “Call me Boxin” 博客,请务必保留此出处http://boxinknown.blog.51cto.com/10435935/1664775
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: