Linux中的强制访问控制Selinux
(工作当中都是默认关闭的)SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。SELinux提供了一种灵活的强制访问控制(MAC)系统,且内嵌于Linux Kernel中。SELinux定义了系统中每个【用户】、【进程】、【应用】和【文件】的访问和转变的权限,然后它使用一个安全策略来控制这些实
(工作当中都是默认关闭的
)
SELinux
(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统
。
SELinux提供了一种灵活的强制访问控制(MAC)系统,且内嵌于Linux Kernel中。SELinux定义了系统中每个【用户】、【进程】、【应用】和【文件】的访问和转变的权限,然后它使用一个安全策略来控制这些实体(用户、进程、应用和文件)之间的交互,安全策略指定如何严格或宽松地进行检查
。(权限)
SELinux的作用:
SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。设想一下,如果一个以 root 身份运行的网络服务存在 0day 漏洞,黑客就可以利用这个漏洞,以 root 的身份在您的服务器上为所欲为了。是不是很可怕?SELinux 就是来解决这个问题的。
1.对内核对象和服务的访问控制
2.对进程初始化,继承和程序执行的访问控制
3.对文件系统,目录,文件和打开文件描述的访问控制
4.对端口,信息和网络接口的访问控制
在linux里所有的文件和进程都有一个值,这个值被称为安全值,当我满足或者匹配到这个安全值,那么才能进行访问。(http默认目录是在/var/www/html当我将这个默认的访问目录更改时你默认创建的 目录对应性另一个安全值,而我们默认访问的就是第一种安全值所以如果开启了selinux则不能访问更改后目录的东西)-------安全子系统
DAC
在没有使用 SELinux 的操作系统中,决定一个资源是否能被访问的因素是:某个资源是否拥有对应用户的权限(读、写、执行)。只要访问这个资源的进程符合以上的条件就可以被访问。而最致命问题是,root 用户不受任何管制,系统上任何资源都可以无限制地访问。这种权限管理机制的主体是用户,也称为自主访问控制(DAC)
MAC
在使用了 SELinux 的操作系统中,决定一个资源是否能被访问的因素除了上述因素之外,还需要判断每一类进程是否拥有对某一类资源的访问权限。
这样一来,即使进程是以 root 身份运行的,也需要判断这个进程的类型以及允许访问的资源类型才能决定是否允许访问某个资源。进程的活动空间也可以被压缩到最小。即使是以 root 身份运行的服务进程,一般也只能访问到它所需要的资源。即使程序出了漏洞,影响范围也只有在其允许访问的资源范围内。安全性大大增加。这种权限管理机制的主体是进程,也称为强制访问控制(MAC)
MAC 又细分为了两种方式,一种叫类别安全(MCS)模式(某一类服务程序的进程匹配目标资源对象,通过标签比对,在验证发起者用户是否对目标对象文件有相应的rwx),另一种叫多级安全(MLS)模式。
selinux的默认配置文件/etc/selinux/config
,它是一个内核模块,修改了配置文件必须重启才能生效
1. enforcing:强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中。
2. permissive:宽容模式。违反 SELinux 规则的行为只会记录到日志中。一般为调试用。
3. disabled:关闭 SELinux。
1. targeted:对大部分网络服务进程进行管制。这是系统默认使用的政策(下文均使用此政策)。
2. minimum:以 targeted 为基础,仅对选定的网络服务进程进行管制。一般不用。
3. mls:多级安全保护。对所有的进程进行管制。这是最严格的政策,配置难度非常大。一般不用,除非对安全性有极高的要求。
getenforce 可以查看级别
使用setenforce可以切换级别
setenforce 0 表示Permissive模式
setenforce 1 表示Enforcing模式
使用`ll -Z `查看selinux的值
用户身份:角色:类型(标签): 安全级别
这条语句通过:划分成了四段,第一段unconfined_u 代表的是用户,第二段 object_r 表示的是角色,第三段是SELinux中最重要的信息,admin_home 表示的是类型,最后一段 s0 是跟MLS、MCS相关的东西,暂时不需要管
①system_u指的是SElinux用户,root表示root账户身份
,user_u表示普通用户无特权用户
,unconfined_u指未定义用户
,system_u表示系统用户
,通过用户可以确认身份类型,一般搭配角色使用。身份和不同的角色搭配时有权限不同,虽然可以使用su命令切换用户但对于SElinux的用户并没有发生改变,账户之间切换时此用户身份不变,在targeted策略环境下用户标识没有实质性作用。
②object_r一般为文件目录的角色、system_r一般为进程的角色,在targeted策略环境中用户的角色一般为system_r。用户的角色类似用户组的概念,不同的角色具有不同的身份权限,一个用户可以具备多个角色,但是同一时间只能使用一个角色。在targeted策略环境下角色没有实质作用,在targeted策略环境中所有的进程文件的角色都是system_r角色。
③admin_home文件和进程都有一个类型,SElinux依据类型的相关组合来限制存取权限Touch /.autorelabel 系统当中默认启用了selinux去读取一个文件,而这个文件里是否由内容他都要去读,读完之后它会给这些系统默认的文件设置安全值
④s0 没有启动多级安全
ll -Z 查看标签
[root@localhost ~]# ll -Z file
-rw-r--r--. 1 root root unconfined_u:object_r:admin_home_t:s0 0 Sep 3 14:46 file
[root@localhost ~]# touch /newfile
[root@localhost ~]# ll /newfile -Z
-rw-r--r--. 1 root root unconfined_u:object_r:etc_runtime_t:s0 0 Sep 3 14:47 /newfile
[root@localhost ~]#
//改标签值 临时生效,重启还是在,可以回笼
[root@localhost ~]# chcon -t etc_runtime_t file
[root@localhost ~]# ll -Z file
-rw-r--r--. 1 root root unconfined_u:object_r:etc_runtime_t:s0 0 Sep 3 14:46 file
/只能回笼到默认的标签值
[root@localhost ~]# restorecon -v file
Relabeled /root/file from unconfined_u:object_r:etc_runtime_t:s0 to unconfined_u:object_r:admin_home_t:s0
[root@localhost ~]# ll -Z file
-rw-r--r--. 1 root root unconfined_u:object_r:admin_home_t:s0 0 Sep 3 14:46 file
chcon和semanage两个的区别:第一个临时生效,第二个需要回笼
[root@localhost ~]# semanage fcontext -a -t etc_runtime_t /test/a
[root@localhost ~]# ll -Z /test/a
-rw-r--r--. 1 root root unconfined_u:object_r:default_t:s0 0 Sep 3 14:57 /test/a
[root@localhost ~]# restorecon -v /test/a
Relabeled /test/a from unconfined_u:object_r:default_t:s0 to unconfined_u:object_r:etc_runtime_t:s0
[root@localhost ~]# ll -Z /test/a
-rw-r--r--. 1 root root unconfined_u:object_r:etc_runtime_t:s0 0 Sep 3 14:57 /test/a
[root@localhost ~]#
//查看端口标签类型
[root@localhost ~]# semanage port -l | grep -w 80
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
//更改端口标签
[root@localhost ~]# semanage port -a -t http_port_t -p tcp 8909
//查看selinux的布尔值
[root@localhost ~]# getsebool -a
//更改布尔值
布尔值
当你配置一个服务现在selinux也是开启的,所以你这个服务的有些功能是用不了的,而bool值相当于是一个开关,你把这个功能开关按上就好了
[root@localhost ~]# setsebool ftpd_anon_write on
[root@localhost ~]# setsebool ftpd_full_access on
selinux图形化界面
[root@localhost ~]# yum install policycoreutils-gui -y //安装软件包
[root@localhost ~]# system-config-selinux 启动服务
更多推荐
所有评论(0)