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

SELinux原理和使用

时间:2015-06-23 23:17:55      阅读:667      评论:0      收藏:0      [点我收藏+]

标签:安全防护   selinux   服务基础   

本文结构: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

  1. 身份标识:root、system_u、user_u

  2. 角色:object_r、system_r

  3. 类型(type):

主体和目标安全上下文type字段一致才可访问

安全上下文是放置到文件inode内的 和rwx一样


进程和 SElinux type字段的关系:以httpd为例

  1. 首先运行程序 usr/sbin/httpdtype类型为 httpd_exec_t 

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

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

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

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

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

  7. 最后再根据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

SELinux原理和使用

标签:安全防护   selinux   服务基础   

原文地址:http://boxinknown.blog.51cto.com/10435935/1664775

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