linux命令行优缺点,SELinux详解及其优缺点

SELinux简介:

SELinux:Secure Enahanced Linux安全增强的Linux

SELinux是2.6版本的Linux内核中提供的强制访问控制(MAC)系统。对于目前可用的Linux安全模块来说,SELinux是功能最全面,而且测试最充分的,它是在20年的MAC研究基础上建立的。SELinux在类型强制服务器中合并了多级安全性或一种可选的多类策略,并采用了基于角色的访问控制概念。

大部分使用SELinux的人使用的都是SELinux就绪的发行版,例如Fedora、RedHatEnterpriseLinux(RHEL)、Debian或Centos。它们都是在内核中启用SELinux的,并且提供一个可定制的安全策略,还提供很多用户层的库和工具,它们都可以使用SELinux的功能。

SELinux是一种基于域–类型模型(domain-type)的强制访问控制(MAC)安全系统,它由NSA编写并设计成内核模块包含到内核中,相应的某些安全相关的应用也被打了SELinux的补丁,最后还有一个相应的安全策略。

众所周知,标准的UNⅨ安全模型是“任意的访问控制“DAC。就是说,任何程序对其资源享有完全的控制权。假设某个程序打算把含有潜在重要信息的文件扔到/tmp目录下,那么在DAC情况下没人能阻止他!

而MAC情况下的安全策略完全控制着对所有资源的访问。这是MAC和DAC本质的区别。

SELinux提供了比传统的UNⅨ权限更好的访问控制。

工作于Linux内核中

DAC:自主访问控制

基本要素:

主体:主动的实体,用户、服务、进程等

客体: 被动的实体,包括数据、文件等

规则:主体对客体访问的策略集合

基本类型:

DAC访问控制:自主访问控制

通过权限列表(访问控制列表)来限定特定主体对特定客体可以执行什么操作。

特点:

1、每个主体都拥有一个用户名或组来获取操作权限

2、每个客体都拥有一个限定主体对其访问的访问控制列表

3、访问时,基于访问控制列表检查主体用户标示以实现授权或拒绝。

进程的访问权限

进程拥有超过其本该拥有的权限

管理员的访问权限

管理员拥有超过其本该有用的权限

普通用户的访问权限

MAC:强制访问控制

特点:

1、主体被分配一个安全等级 机密

2、客体被分配一个安全等级 绝密

3、访问时,对主体和客体的安全级别进行对比,最终获得授权或拒绝。

sandbox 沙箱 虚拟化技术

模式切换:

得到当前的SELinux值

[root@localhost ~]#getenforce

Enforcing

更改当前SELinux值,后面可跟1|0

[root@localhost ~]#setenforce

usage: setenforce [ Enforcing | Permissive | 1 | 0 ]

显示当前的SELinux信息

[root@localhost ~]#sestatus

SELinux status: enabled

SELinuxfs mount: /selinux

Current mode: enforcing

Mode from config file: enforcing

Policy version: 24

Policy from config file: targeted

[root@localhost ~]#sestatus -v

SELinux status: enabled

SELinuxfs mount: /selinux

Current mode: enforcing

Mode from config file: enforcing

Policy version: 24

Policy from config file: targeted

Process contexts:

Current context: unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

Init context: system_u:system_r:init_t:s0

/sbin/mingetty system_u:system_r:getty_t:s0

/usr/sbin/sshd system_u:system_r:sshd_t:s0-s0:c0.c1023

File contexts:

Controlling term: unconfined_u:object_r:user_devpts_t:s0

/etc/passwd system_u:object_r:etc_t:s0

/etc/shadow system_u:object_r:shadow_t:s0

/bin/bash system_u:object_r:shell_exec_t:s0

/bin/login system_u:object_r:login_exec_t:s0

/bin/sh system_u:object_r:bin_t:s0 -> system_u:object_r:shell_exec_t:s0

/sbin/agetty system_u:object_r:getty_exec_t:s0

/sbin/init system_u:object_r:init_exec_t:s0

/sbin/mingetty system_u:object_r:getty_exec_t:s0

/usr/sbin/sshd system_u:object_r:sshd_exec_t:s0

配置文件:/etc/sysconfig/selinux

[root@localhost ~]# cat /etc/sysconfig/selinux

# 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

/etc/selinux/config

SELinux两种级别

strict:严格模式,每个进程都会受到SELinux的控制

targeted:宽松模式,仅有限的进程受到SELinux的控制

只监控容易被入侵的进程

查看文件安全标签(安全上下文)

[root@localhost ~]# ls -Z

-rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg

drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 Desktop

drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 Documents

drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 Downloads

-rw-r--r--. root root unconfined_u:object_r:admin_home_t:s0 file

-rw-r--r--. root root system_u:object_r:admin_home_t:s0 install.log

-rw-r--r--. root root system_u:object_r:admin_home_t:s0 install.log.syslog

drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 Music

drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 Pictures

drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 Public

drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 Templates

drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 Videos

查看进程安全标签

[root@localhost ~]# ps -aux

Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 1 0.0 0.1 19344 1548 ? Ss 13:36 0:01 /sbin/init

root 2 0.0 0.0 0 0 ? S 13:36 0:00 [kthreadd]

root 3 0.0 0.0 0 0 ? S 13:36 0:00 [migration/0]

root 4 0.0 0.0 0 0 ? S 13:36 0:00 [ksoftirqd/0]

root 5 0.0 0.0 0 0 ? S 13:36 0:00 [stopper/0]

root 6 0.0 0.0 0 0 ? S 13:36 0:00 [watchdog/0]

root 7 0.0 0.0 0 0 ? S 13:36 0:00 [migration/1]

root 8 0.0 0.0 0 0 ? S 13:36 0:00 [stopper/1]

root 9 0.0 0.0 0 0 ? S 13:36 0:00 [ksoftirqd/1]

root 10 0.0 0.0 0 0 ? S 13:36 0:00 [watchdog/1]

root 11 0.0 0.0 0 0 ? S 13:36 0:00 [migration/2]

root 12 0.0 0.0 0 0 ? S 13:36 0:00 [stopper/2]

root 13 0.0 0.0 0 0 ? S 13:36 0:00 [ksoftirqd/2]

root 14 0.0 0.0 0 0 ? S 13:36 0:00 [watchdog/2]

root 15 0.0 0.0 0 0 ? S 13:36 0:00 [migration/3]

root 16 0.0 0.0 0 0 ? S 13:36 0:00 [stopper/3]

SELinux为每个文件提供了安全标签,也为进程提供了安全标签

SELinux规则库

规则:哪种域能访问哪种或哪些种类型的文件

配置SELinux:

SELinux是否启用

给文件重新打标签

设定某些布尔型特性

SELinux的状态

enforcing 强制开启 每个受限的进程都必然受限

permissive 启用 不会阻止访问,但会记录日志

disabled 关闭

getenforce 获取SELinux当前状态

setenforce 0|1

0:设置为:permissive

1:设置为:enforcing

此设定临时生效,重启后无效

给文件重新打标签

chcon  -R  递归打标签

还原文件的默认标签

restorecon  -R  递归还原标签

布尔型规则:

添加/删除进程或服务本身开启的功能模块

getsebool  -a 查看所有布尔值

[root@localhost ~]# getsebool -a

abrt_anon_write --> off

abrt_handle_event --> off

allow_console_login --> on

allow_cvs_read_shadow --> off

allow_daemons_dump_core --> on

allow_daemons_use_tcp_wrapper --> off

allow_daemons_use_tty --> on

allow_domain_fd_use --> on

allow_execheap --> off

allow_execmem --> on

allow_execmod --> on

allow_execstack --> on

getsebool  -p  ftp_home_dir  on/off

将修改结果保存至本地磁盘

日志文件:/var/log/audit/audit.log

SELinux优点:

SELinux系统比起通常的Linux系统来,安全性能要高的多,它通过对于用户,进程权限的最小化,即使受到攻击,进程或者用户权限被夺去,也不会对整个系统造成重大影响。

对访问的控制彻底化

特点1:MAC(MandatoryAccessControl)―――对访问的控制彻底化  对于所有的文件,目录,端口这类的资源的访问,都可以是基于策略设定的,这些策略是由管理员定制的、一般用户是没有权限更改的。

对于进程只赋予最小的权限

特点2:TE(TypeEnforcement)―――对于进程只赋予最小的权限Te概念在SELinux里非常的重要。它的特点是对所有的文件都赋予一个叫type的文件类型标签,对于所有的进程也赋予各自的一个叫domain的标签。Domain标签能够执行的操作也是由accessvector在策略里定好的。

我们熟悉的apache服务器,httpd进程只能在httpd_t里运行,这个httpd_t的domain能执行的操作,比如能读网页内容文件赋予httpd_sys_content_t,密码文件赋予shadow_t,TCP的80端口赋予http_port_t等等。如果在accessvector里我们不允许http_t来对http_port_t进行操作的话,Apache启动都启动不了。反过来说,我们只允许80端口,只允许读取被标为httpd_sys_content_t的文件,httpd_t就不能用别的端口,也不能更改那些被标为httpd_sys_content_t的文件(readonly)。

防止权限升级

特点3:domain迁移――防止权限升级

在用户环境里运行点对点下载软件azureus,你当前的domain是fu_t,但是,你考虑到安全问题,你打算让他在azureus_t里运行,你要是在terminal里用命令启动azureus的话,它的进程的domain就会默认继承你实行的shell的fu_t。

有了domain迁移的话,我们就可以让azureus在我们指定的azureus_t里运行,在安全上面,这种做法更可取,它不会影响到你的fu_t。

对于用户只赋予最小的权限

特点4:RBAC(rolebaseaccesscontrol)―――――对于用户只赋予最小的权限  对于用户来说,被划分成一些ROLE,即使是ROOT用户,你要是不在sysadm_r里,也还是不能实行sysadm_t管理操作的。因为,那些ROLE可以执行那些domain也是在策略里设定的。ROLE也是可以迁移的,但是也只能按策略规定的迁移。

SELinux缺点:

虽然Linux比起Windows来说,它的可靠性,稳定定要好得多,但是他也是和其他的UNIX一样,有以下这些不足之处。

存在特权用户root

任何人只要得到root的权限,对于整个系统都可以为所欲为。这一点Windows也一样。

对于文件的访问权的划分不够细

在linux系统里,对于文件的操作,只有「所有者」,「所有组」,「其他」这3类的划分。

对于「其他」这一类里的用户再细细的划分的话就没有办法了。

SUID程序的权限升级

如果设置了SUID权限的程序有了漏洞的话,很容易被攻击者所利用。   DAC(DiscretionaryAccessControl)问题

文件目录的所有者可以对文件进行所有的操作,这给系统整体的管理带来不便。

对于以上这些的不足,防火墙,入侵检测系统都是无能为力的。

在这种背景下,对于访问权限大幅强化的OSSELinux来说,它的魅力的无穷的。

由于本人对于SELinux理解有限,也是参考了大量文档后所写的此文章,若果有对SELinux有深入了解的朋友可以一起交流,或者本文有理解有误的地方,欢迎留言指出

原创文章,作者:Linux.rookie,如若转载,请注明出处:http://www.178linux.com/76648

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值