SELinux详解(1)
来源:互联网 发布:酱紫是什么网络用语 编辑:程序博客网 时间:2024/06/09 14:47
#一.常见的读取控制机制
1.DAC(Discretionary Access Control ):任意读取控制
在此机制下,每一个对像都会记录一个拥有者的信息,只要是对象的拥有者,就可以获得对该对象的完全控制。
传统的UNIX系统提供的安全机制就是DAC思维。
2.MAC(Mandatory Access Control):强制读取控制
在MAC机制下,会为每一个对象增添一个‘安全脉络’的信息,进程或用户除了具备传统权限外,还必须得到授权,方能
读取指定的对象。在MAC机制下包括:RBAC,MLS
RBAC(Role-based Access Control):基于角色的读取控制,这有点像数据库的角色。
MLS(Multi-level Security):多层次的安全,以数据内容的精密性和敏感性定义不同级别。比如在国家机密中,有普通,机密,绝对机密等。
#二.SELinux与chroot的对比
SELinux提供了类似chroot的效果:都只能读取指定空间的对象,非该空间的对象不可读取。
但SELinux明显优于chroot。因为chroot只能用来修改进程的根目录,无法限制进程的其它能力,而SELinux除了可以控制读取文件外,
还可以限制对其它设备的读取能力,提供更加细微的读取控制。而且SELinux是在传统的DAC之后执行的,也就是说要想读取必须过两道关。
#三.SELinux初始化
当BootLoader加载内核后,启动init,init会执行下列操作
(1)init会先挂载procfs,然后寻找Linux内核是否提供selinuxfs文件系统,如果是,则表示目前Linux内核支持SELinux的功能。如果不支持,进行其它初始化计划
(2)init根据/etc/sysconfig/selinux 中的SELINUX参数或selinux内核启动参数,来决定是否启用SELinux。如果SELinux参数是disabled,则init服务会跳过初始化SELinux
(3)如果需要启动,则init会将SELinux状态设置为permissive。接着会根据/etc/sysconfig/selinux 的SELINUX的参数或enforcing这个内核启动参数来决定是否要切换为强制模式。如果enforcing的值不为0或SELINUX参数定义为enforcing,则切换为强制模式
(4)完成上述后,init会把selinuxfs文件系统挂载到/selinux/目录
这里可以验证:如果将SELinux禁止后,则/selinux目录中什么也没有,如果启用,则有内容
(5)接着,init加载SELinux安全原则文件 init会根据/etc/sysconfig/selinux 中的SELINUXTYPE=TYPE参数决定要加载哪一个SELinux安全原则,并查询/selinux/policyvers的内容(即版本号),载入某一个版本的selinux安全原则文件->>>即 /etc/selinux/TYPE/policy.VERSION如我的SELINUXTYPE为targeted,/selinux/policyvers中内容为21,则SELINUX加载的安全文件为:/etc/selinux/targeted/policy/policy.21
(6)加载完安全原则文件后,则根据/etc/selinux/TYPE/contexts的相关文件设置安全脉络。这样Linux内核就可以从内核内部的安全服务器取得所有主体,对象的安全脉络。
如果有需要,init会重新修改自己的安全脉络。
到此,已成功建立SELinux环境。
#四.切换SELinux状态
SELinux有两种模式:强制模式(Enforcement Mode)->>只要违反规则就强制读取 允许模式(Permissive Mode)->>即使违反还是允许读取
需要注意的是,切换启用与停用状态,必须要重新开机;启用之后修改强制和允许模式时,不需要重新开机就可切换模式。
1.查看SELinux状态
sestatus [-v] #-v显示详细信息
2.启用与停用SELinux
(1)通过内核启动参数
boot: linux selinux=N #N为0代表停用,非0代表启用还可以修改grub.conf永久保存,如下:
kernel /vmlinuz-2.6.18-164.el5 ro root=LABEL=/ selinux=N
(2)修改配置文件/etc/sysconfig/selinux
SELINUX=enforcing #disabled->>停用 enforcing->> 强制 permissive->> 允许SELINUXTYPE=targeted #targeted->> 基于目标策略 strict->>提供符合RBAC机制的策略 mls->>提供符合MLS机制的策略
(3)getenforce,setenforce获取和设置当前模式
root@localhost ~]# getenforce #获取执行模式Enforcing[root@localhost ~]# setenforce 0 #0或permissive->>允许 1或enforcing->>强制[root@localhost ~]# getenforce Permissive[root@localhost ~]# setenforce enforcing[root@localhost ~]# getenforce Enforcing
#五.管理安全脉络
SELinux定义的安全脉络:USER:ROLE:TYPE[LEVEL[:CATEGORY]]
USER:用来记录身份,如system_u->>系统用户 user_u->>普通用户 root->>超级用户
不过在targeted策略中还不支持user字段,即user字段对targeted策略没意义
ROLE:使用基于RBAC的strict和mls策略中,用来存储角色信息,如user_r->>用户角色 object_r->>文件或设备等对象
TYOPE:定义对象的类别
LEVEL和CATEGORY:定义层次和分类,只用于mls策略中
LEVEL:代表安全等级,目前已经定义的安全等级为s0-s15,等级越来越高
CATEGORY:代表分类,目前已经定义的分类为c0-c1023
又是会看到查看SELinux安全脉络时,会看到SystemLow-SystemHigh,这什么意思?
[root@localhost ~]# semanage translation -lLevel Translations0 s0-s0:c0.c1023 SystemLow-SystemHighs0:c0.c1023 SystemHigh即s0 ->>显示为空字符串
s0-s0:c0.c1023->>显示为SystemLow-SystemHigh
s0:c0.c1023->>显示为SystemHigh
#六.SELinux安全脉络默认值
有没有想过当我又开了一个VI,那么Vi这个进程的安全脉络是什么呢?当我用RPM包新安装软件时,安全脉络又是什么呢??
1.进程默认安全脉络
在REEL中,通过PAM子系统的pam_selinux.so模块设置进程的安全脉络,子进程会继承父进程的安全脉络,除非子进程需要修改安全脉络
2.文件默认安全脉络
如果是安装RPM包所产生的文件->>每一个RPM包都会记录提供的每一个文件的安全脉络
手动新建的文件->>RHEL会将安全原则中定义的安全脉络作为新建文件的安全脉络
如在targeted策略中,每个目录都有默认的安全脉络,如/etc目录下为etc_t, /mnt目录下为mnt_t等
这里特别注意:cp过来的文件为使用目录下的默认安全脉络,而mv则会保留自己原来的安全脉络。
[root@localhost ~]# cd /mnt[root@localhost mnt]# ls -Zdrwxr-xr-x root root system_u:object_r:mnt_t mysdb1 #/mnt目录下为mnt_t[root@localhost mnt]# ls -Z /etc/passwd-rw-r--r-- root root system_u:object_r:etc_t /etc/passw #/etc/passwd为etc_t[root@localhost mnt]# cp /etc/passwd . #将/etc/passwd复制到/mnt目录下[root@localhost mnt]# ls -Z /root/write_image.c #/root/write_image.c为user_home_t -rw-r--r-- root root root:object_r:user_home_t /root/write_image.c [root@localhost mnt]# mv /root/write_image.c . #将/root/write_image.c移动到/mnt目录下[root@localhost mnt]# ls -Z #体会cp和mv的区别drwxr-xr-x root root system_u:object_r:mnt_t mysdb1 -rw-r--r-- root root root:object_r:mnt_t passwd-rw-r--r-- root root root:object_r:user_home_t write_image.c
3.如何查看对象安全脉络
id -Z #查看用户
ls -Z #查看文件
ps -Z #查看进程
#七:修改安全脉络
[root@localhost ~]# ls -Z cs-rw-r--r-- root root root:object_r:user_home_t cs[root@localhost ~]# chcon -u system_u cs[root@localhost ~]# ls -Z cs-rw-r--r-- root root system_u:object_r:user_home_t cs
参数:
-R 递归 -r 角色配置 -t 类型配置 -u 用户配置
chcon test --reference=cs #让test的安全脉络设置和cs一样
八:修复安全脉络
##1.查看默认的安全脉络
[root@localhost ~]# matchpathcon /etc/passwd #查看默认安全脉络/etc/passwd system_u:object_r:etc_t[root@localhost ~]# matchpathcon /etc/passwd -V #验证是否符合/etc/passwd verified.##2.修复安全脉络
fixfiles ->依据RPM包中的设置来修复文件的安全脉络
restorecon ->修复自建的安全脉络
restorecon 文件名
九:重新产生安全脉络
RedHat在开机时会检查是否有/.autorelabel,如果有则会利用fixfiles重新产生系统重要文件的安全脉络(前提示启用SElinux)
所以要重新产生安全脉络需要
(1)产生空的/.autorelabel
(2)重启
开机时会出现:
- SELinux详解(1)
- SElinux详解
- Selinux配置详解
- Selinux配置详解
- Selinux配置详解
- Selinux-1
- SElinux:安全增强linux详解
- linux系统之selinux详解
- Centos7.1 SELinux
- SElinux 1 背景,框架
- Android7.1 Selinux使用
- selinux
- SELinux
- SELinux
- SELinux
- SELinux
- SELinux
- selinux
- JVM和QEMU虚拟机的对比学习
- 浅谈我心中的软件开发
- poj3461
- linux学习工作记录----配置基于ip的虚拟主机
- revisit hotswap controller
- SELinux详解(1)
- nginx使用ssl模块配置HTTPS支持
- InfoPath 窗体与其他 Microsoft 解决方案之间的对比
- Linux下常用压缩格式的压缩与解压方法
- Windows计划任务框架WinServiceTask
- java并发【内容多的那叫一个苦逼啊】
- cstring 转 utf8
- vc++实现U盘介质加密解密保障存储安全
- Javascript URL 编码区别及转义字符处理