SELINUX详解
SELINUX知识点
Security Enhenced linux
如果某个用户需要以root权限执行某条命令怎么办?
如果某个用户a想要与用户b共同享有某个文件的全部权限怎么办?
进程安全上下文 context
进程是用户获取资源的代理
一个进程在运行过程中对哪些文件具有访问权限是由进程的发起者的权限决定的
试想如果你的web服务器是以webman这个用户的身份运行的他对系统中所有o上置r的文件都具有读权限如果某个人劫持了web服务器那么他就获得了webman的所有权限他可以利用缓冲区溢出漏洞set uid等多种方式获得权限提升进而劫持整个系统此时传统的DAC模式就无法防范这种攻击
DAC 自主访问控制用户自主决定属于自己的文件权限
MAC 强制访问控制内核定义了所有用户包括root 的权限由selinux决定由内核实现
当进程不运行时只是文件
Subject 是正在内存中执行的进程
object 动作承受者进程文件套接字
是否一个subject能够操作一个object 取决于selinux的定义
在一个进程需要运行以完成某种任务时 selinux为此进程规定了一个运行环境sandbox,此环境限制了此进程可以进行的操作和可以访问的文件此时这个进程可以活动的范围就由selinux限定如果是传统的DAC 此进程的行为权限则由运行它的用户的权限决定,此时它的活动范围是整个系统
selinux将进程分类将资源分类定义了那个进程在哪个范围内运行只能访问哪些资源此时不管它对其它的资源有读写权限此时只要selinux不允许它就不能访问
(1)首先设置开启selinux的全局设置:
毕业纪念品查看和设置selinux状态、配置文件、配置选项:
临时查看和设置:
#getenforce                          //查看selinux状态
#sestatus –bv                        //查看系统当前运行的selinux的状态
#semodule –l                        //查看selinux加载的内核模块
#sealert -a /var/log/audit/audit.log  //查看selinux错误日志
#system-config-selinux                //SElinux的图形化管理工具
#setenforce 1/0                      // 把selinux临时设为enforcing/permissive
ls -Z  ps -Z  id -Z                //分别可以看到文件,进程和用户的SELinux属性
seinfo                                //查询SElinux的policy信息
查看文件系统的扩展属性:getfattr
[root@linuxas ~]# getfattr -m. -d /etc/passwd
getfattr: Removing leading '/' from absolute path names
# file: etc/passwd
security.selinux="system_u:object_r:etc_t:s0\000"
查看的文件的 security.selinux 属性中储存了此文件的安全上下文, 所以上面例子中的上下文就是
system_ubject_r:etc_t 。
所有运行了SE Linux的ext2/3文件系统上都有 security.selinux 这个属性。
内核可以直接接受selinux参数所以也可以在f 中 kernel行最后添加:
selinux=0 向内核传递参数禁用selinux,如编辑/f :
title Red Hat Enterprise Linux Server (2.6.18-8.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-8.el5 ro root=LABEL=/ rhgb quiet selinux=0
initrd /initrd-2.6.18-8.el5.img
SELINUXTYPE=targeted
此参数可选项:targeted和strice。分别是targeted只控制关键网络服务,strice控制所有的服务
如果selinux已经启用想让它在开机立即进入某种状态
enforce=1/0 状态为enforcing/premissive
永久设置:
配置文件位置: /etc/selinux/config 它还有个链接在 /etc/sysconfig/selinux
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced. (强制限制状态)
# permissive - SELinux prints warnings instead of enforcing. (warn-mode,只警告并记录操作并不真正阻止)    # disabled - SELinux is fully disabled. (selinux禁用状态)
例如设置:SELINUX=enforcing
# SELINUXTYPE= type of policy in use. Possible values are:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection. (高精细度控制模式)
东莞邮编
例如设置:SELINUXTYPE=targeted
redhat 将那些通常容易受攻击被利用的文件/进程默认置于selinux标签此种规定范围是一种selinux类型
redhat支持前两种类型:    SELINUXTYPE=targeted/strict/mls 普通控制级别/严格控制级别/军事级别
需要重启系统来启动SELinux新的工作模式
getsebool        # 获取本机selinux策略值,也称为bool值
# selinux的设置一般通过两个部分完成的,一个是安全上下文,另一个是策略,策略值是对安全上下文的补充
setsebool -P allow_ftpd_anon_write=1        # -P 是永久性设置,否则重启之后又恢复预设值。
示例:一月到十二月的英语单词
# setsebool -P allow_ftpd_anon_write=1
# getsebool allow_ftpd_anon_write
allow_ftpd_anon_write --> on
注意:如果仅仅是安全上下文中设置了vsftpd进程对某一个目录的访问,配置文件中也允许可写,
但是selinux中策略中不允许可写,仍然不可写。所以基于selinux保护的服务中,安全高很多。
yum -y install policycoreutils-newrole # Usage: System -> Management -> SElinux
star :就是tar在SELinux下的互换命令,能把文件的标签也一起备份起来。
cp 可以跟 -Z, --context=CONTEXT 在拷贝的时候指定目的地文件的security context
find 可以跟–context 查特定的type的文件。
(2)selinux对文件/用户/进程的限制机制:
处于执行状态的进程/程序:subject (动作的发出者)
资源(file process socket ...):object (动作的承受者)
各种subject之间的权限不同优先级不同所需要的资源不同,把具有相同权限的进程标识把具有相同权限的文件
标识。selinux给每个进程按类划分role角角定义了谁可以访问哪些资源,给每个资源置上标签标签标明了哪些角可以访问。
selinux利用ext3的扩展属性来标识这些资源
# lsattr 查看文件扩展属性的标识位
------------- ./
------------- ./install.log
------------- ./anaconda-ks.cfg
------------- ./install.log.syslog
------------- ./dead.letter
进程所属的类--domain    资源所属的类--type
到底哪些domain中的subject可以访问哪些type中的object 取决于selinux的策略机制
策略(Policy) 由Administrator 定义 (kernel2.6以后 selinux已经不再区分进程和资源)
标签 label 安全上下文context
标签(label) system_u:object_r:user_home_t
安全上下文(context) 一个进程运行的时候所属的域以及通过规则定义的它能够获取的所有资源 (由标签来表现)  (3)文件的selinux标签
#ls -Z 查看文件标签 --context(等同于-Z) 或者--scontext (只显示安全上下文) 或者--lcontext (意为
ll+context)
-rw-------  root root system_u:object_r:user_home_t    anaconda-ks.cfg
user  :    role  : type
label 通常由3段组成其实有5段user_u:object_r:user_home_t
se.属主域(user):角域(object role):类型域(user type):敏感度:类别
类型域很重要比如说 tmp目录下的文件type字段通常都是tmp_t ,type字段决定了哪些subject可以访问它
还有user_home_dir_t等等。
在subject运行过程中还可以进行域切换进而完成自身对资源访问权限的切换
# ls -
-rw-r--r--  root root root:object_r:user_home_t    a.txt
#chcon 意思是change context
-t type 类型
-R recursive 递归(特别适用于改变某个目录下所有文件的context)
-u user
-r role
--reference 源文件目标文件          # 复制安全上下文
#chcon -- b.txt 将b以a为准设置selinux标签 (以引用方式改变文件标签)
# 将a.txt 恢复默认标签
runcon 使用特定的context来执行指令
# runcon -t user_home_t cat /etc/passwd
root:system_r:user_home_t:SystemLow-SystemHigh is not a valid context
查看某种服务是否受到SELinux的保护
[root@linuxas ~]# getsebool -a (RHEL4:inactive受保护,active不受保护;RHEL5:off受保护,on不受保护)
(4)selinux 默认标签的定义文件
/etc/selinux/targeted/
此目录下定义了targeted 类型的selinux所有策略和文件默认标签类型
/etc/selinux/targeted/policy/
此目录显示了所有的policy(策略)
/etc/selinux/targeted/contexts/files
此目录中的几个文件定义了在不同目录下创建文件的默认标签是什么
大多数文件都是user_home_t 目录为user_dir_t
恢复默认标签的命令则是以此为准
(5)用户/进程的selinux标签
#id student 可以查看用户的selinux标签
uid=500(student) gid=500(student) groups=500(student)
context=root:system_r:unconfined_t:SystemLow-SystemHigh
#ps auxZ 查看进程的selinux标签
system_u:system_r:getty_t      root      2451  0.0  0.0  1664  444 tty3    Ss+  Jul29  0:00
/sbin/mingetty tty3
其中有一种tpye叫做 unconfined 未定义的类型表示不受selinux控制它的权限模型仍是DAC的
(6)查看和设置selinux策略
roles(规则)组合起来就是策略策略就是规则的库
#getsebool -a 查看所有可以通过bool型变量控制selinux状态的功能
qemu_use_usb --> on 是否开启usb功能
allow_httpd_anon_write --> off 是否开启httpd匿名写入功能
设置某个功能的selinux状态:
毛尖属于什么茶
#setsebool pppd_for_user 1/0 或者on/off 临时设置开启/关闭
#setsebool -P pppd_for_user 1/0 或者on/off 永久设置开启/关闭
#system-config-selinux 图形化界面设置selinux配置 (不建议)
通过这种方式改变selinux或者防火墙规则可能会被系统默认规则限制导致设置无效白沟箱包城
#semanage {login/user/port/interface/fcontext/translation} -l [-options] 强大的selinux管理命令
例如 #semanage login -l 列出login功能中可用的子命令
# SElinux对服务的应用
selinux的设置分为两个部分,修改安全上下文以及策略,下面收集了一些应用的安全上下文,
供配置时使用,对于策略的设置,应根据服务应用的特点来修改相应的策略值。
1.3.1 SElinux与samba
1.samba共享的文件必须用正确的selinux安全上下文标记。
chcon -R -t samba_share_t /tmp/abc
如果共享/home/abc,需要设置整个主目录的安全上下文。
chcon -R -r samba_share_t /home
2.修改策略(只对主目录的策略的修改)
setsebool -P samba_enable_home_dirs=1
企业财务
setsebool -P allow_smbd_anon_write=1
getsebool 查看
samba_enable_home_dirs -->on
allow_smbd_anon_write --> on /*允许匿名访问并且可写*/
1.3.2 SElinux与nfs
selinux对nfs的限制好像不是很严格,默认状态下,不对nfs的安全上下文进行标记,而且在默认状态的策略下,nfs 的目标策略允许nfs_export_all_ro
nfs_export_all_ro
nfs_export_all_rw值为0
所以说默认是允许访问的。
但是如果共享的是/home/abc的话,需要打开相关策略对home的访问。
setsebool -P use_nfs_home_dirs boolean 1
getsebool use_nfs_home_dirs
1.3.3 SElinux与ftp
1.如果ftp为匿名用户共享目录的话,应修改安全上下文。
chcon -R -t public_content_t /var/ftp
chcon -R -t public_content_rw_t /var/ftp/incoming
2.策略的设置
setsebool -P allow_ftpd_anon_write =1
getsebool allow_ftpd_anon_write
allow_ftpd_anon_write--> on
1.3.4 SElinux与http
apache的主目录如果修改为其它位置,selinux就会限制客户的访问。
1.修改安全上下文:
chcon -R -t httpd_sys_content_t /home/html
由于网页都需要进行匿名访问,所以要允许匿名访问。
2.修改策略:
setsebool -P allow_ftpd_anon_write = 1
setsebool -P allow_httpd_anon_write = 1
setsebool -P allow_<;协议名>_anon_write = 1
关闭selinux对httpd的保护
httpd_disable_trans=0
1.3.5 SElinux与公共目录共享
如果ftp,samba,web都访问共享目录的话,该文件的安全上下文应为:
public_content_t
public_content_rw_t
其它各服务的策略的bool值,应根据具体情况做相应的修改。
(7)selinux服务器配置文件
-P是永久有效的意思
===ftp===
//If you want to share files anonymously
chcon -R -t public_content_t /var/ftp
/
/If you want to setup a directory where you can upload files
chcon -t public_content_rw_t /var/ftp/incoming
You must also turn on the boolean allow_ftpd_anon_write
setsebool -P allow_ftpd_anon_write=1
//If you are setting up this machine as a ftpd server and wish to allow users to access their home directorories setsebool -P ftp_home_dir 1
//If you want to run ftpd as a daemon
setsebool -P ftpd_is_daemon 1
//You can disable SELinux protection for the ftpd daemon
setsebool -P ftpd_disable_trans 1
===httpd===
//If you want a particular domain to write to the public_content_rw_t domain
setsebool -P allow_httpd_anon_write=1
or
setsebool -P allow_httpd_sys_script_anon_write=1
//httpd can be setup to allow cgi scripts to be executed
setsebool -P httpd_enable_cgi 1
//If you want to allow access to users home directories
setsebool -P httpd_enable_homedirs 1
chcon -R -t httpd_sys_content_t ~user/public_html
//httpd is allowed access to the controling terminal
//such that one httpd service can not interfere with another
setsebool -P httpd_unified 0
/
/loadable modules run under the same context as httpd
setsebool -P httpd_builtin_scripting 0
//httpd scripts are allowed to connect out to the network
setsebool -P httpd_can_network_connect 1
// You can disable suexec transition
setsebool -P httpd_suexec_disable_trans 1
//You can disable SELinux protection for the httpd daemon by executing
setsebool -P httpd_disable_trans 1

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。