设为首页 收藏本站
查看: 1521|回复: 0

[经验分享] SELinux原理和使用

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-6-24 08:27:49 | 显示全部楼层 |阅读模式
本文结构: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
  • [iyunv@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
  • [iyunv@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 递归] 目录/文件

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

// 通过默认安全上下文还原类型
[iyunv@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] 列出当前状态下的统计状态

[iyunv@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
[iyunv@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查看详细信息)

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

文件默认安全上下文设置

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

[iyunv@boxin ~]# ls -Zd /srv/samba
drwxr-xr-x. root root unconfined_u:object_r:var_t:s0   /srv/samba
[iyunv@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
[iyunv@boxin ~]# semanage fcontext -a -t public_content_t "/srv/samba(/.*)?"
[iyunv@boxin ~]# semanage fcontext -l | grep /srv/samba

/srv/samba(/.*)?                                   all files          system_u:object_r:public_content_t:s0
[iyunv@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
[iyunv@boxin ~]# ls -dZ /srv/samba/
drwxr-xr-x. root root unconfined_u:object_r:public_content_t:s0 /srv/samba/



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-79970-1-1.html 上篇帖子: centos安装flashplayer 下篇帖子: mount.nfs: access denied by server while mounting
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表