搜档网
当前位置:搜档网 › Selinux的了解

Selinux的了解

Selinux的了解
Selinux的了解

Selinux的了解

1.背景

SELinux是「Security-Enhanced Linux」的简称,是美国国家安全局「NSA=The National Security Agency」和SCC(Secure Computing Corporation)开发的Linux的一个扩张强制访问控制安全模块。原先是在Fluke上开发的,2000年以GNU GPL 发布。

现在以Linux作为因特网服务器是越来越普遍的事了。在我这几年作过的项目里,WEB的开发基本都是基于Linux的,这里有给大公司做的,也给政府部门做的,当然更多的是中小企业做的。这其中给政府做的,我们把SELinux作为一个卖点,接受了不少项目。

2.我们需要安全操作系统的理由

现在不论是政府还是民间企业,大家对信息安全问题是越来越关心了,因为企业的业务平台的服务器上存储着大量的商务机密,个人资料,个人资料它直接关系到个人的隐私问题。特别是我们政府的网站,作为信息公开的平台,它的安全就更显得重要了。这些连到互联网的服务器,不可避免的要受到来自世界各地的各种威胁。最坏的时候我们的服务器被入侵,主页文件被替换,机密文件被盗走。除了来自外部的威胁外,内部人员的不法访问,攻击也是不可忽视的。对于这些攻击或者说是威胁,当然有很多的办法,有防火墙,入侵检测系统,打补丁等等。因为Linux也和其他的商用UNIX一样,不断有各类的安全漏洞被发现。我们对付这些漏洞不得不花很多的人力来堵住它。在这些手段之中,提高OS 系统自身的牢固性就显得非常的重要。

2.1传统的Linux OS的不足之处

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

1)存在特权用户root

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

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

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

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

3)SUID程序的权限升级

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

4)DAC(Discretionary Access Control)问题

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

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

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

2.2 SELinux的优点

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

接下来我来介绍SELinux的一些特点。

特点1:MAC(Mandatory Access Control)―――对访问的控制彻底化

对于所有的文件,目录,端口这类的资源的访问,都可以是基于策略设定的,这些策略是由管理员定制的、一般用户是没有权限更改的。

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

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

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

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

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

下面是domain迁移指示的例子:

domain_auto_trans(fu_t, azureus_exec_t, azureus_t)

意思就是,当在fu_t domain里,实行了被标为azureus_exec_t的文件时,domain 从fu_t

迁移到azureus_t 。下面是Apache启动的迁移图。注意了,因为从哪一个domain能迁移到httpd_t是在策略里定好了,所以要是我们手动(/etc/init.d/httpd start)启动apache的话,可能仍然留在sysadm_t里,这样就不能完成正确的迁移。要用run_init命令来手动启动。

特点4:RBAC(role base access control) ――――― 对于用户只付与最小的权限

对于用户来说,被划分成一些ROLE,即使是ROOT用户,你要是不在sysadm_r里,也还是不能实行sysadm_t管理操作的。因为,那些ROLE可以执行那些domain也是在策略里设定的。ROLE也是可以迁移的,但是也只能安策略规定的迁移。

3. 控制切换

从fedora core 2开始, 2.6内核的版本都支持selinux.我们看看Fedora core 5 里的/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 - SELinux is fully disabled.

SELINUX=enforcing

#SELINUX=disabled

# SELINUXTYPE= type of policy in use. Possible values are:

# targeted - Only targeted network daemons are protected.

# strict - Full SELinux protection.

SELINUXTYPE=targeted

SELINUX有「disabled」「permissive」,「enforcing」3种选择。

Disabled就不用说了,permissive就是Selinux有效,但是即使你违反了策略的话它让你继续操作,但是把你的违反的内容记录下来。在我们开发策略的时候非常的有用。

相当于Debug模式。

Enforcing就是你违反了策略,你就无法继续操作下去。

SELINUXTYPE 呢,现在主要有2大类,一类就是红帽子开发的targeted,它只是对于,

主要的网络服务进行保护,比如apache ,sendmail, bind,postgresql等,不属于那些domain 的就都让他们在unconfined_t里,可导入性高,可用性好但是不能对整体进行保护。

另一类是Strict,是NAS开发的,能对整个系统进行保护,但是设定复杂,我认为虽然它复杂,但是一些基本的会了,还是可以玩得动的。

我们除了在/etc/sysconfig/selinux设它有效无效外,在启动的时候,也可以通过传递参数selinux给内核来控制它。(Fedora 5默认是有效)

kernel /boot/vmlinuz-2.6.15-1.2054_FC5 ro root=LABEL=/ rhgb quiet selinux=0

上面的变更可以让它无效。

[root@python sysconfig]# /usr/sbin/getenforce

Enforcing

确认有效后重新对文件系统赋予标签:

[root@python sysconfig]# /sbin/fixfiles relabel

或者

[root@python /]# touch /.autorelabel

然后reboot ,你就在secure的Linux环境下工作了。

4. SELinux的基本操作

SELinux 是个经过安全强化的Linux操作系统,实际上,基本上原来的运用软件没有必要修改就能在它上面运行。真正做了特别修改的RPM包只要50多个。像文件系统EXT3都是经过了扩展。对于一些原有的命令也进行了扩展,另外还增加了一些新的命令,接下来我们就来看看这些命令。

4.1 文件操作

1)ls命令

在命令后加个-Z 或者加–context

[root@python azureus]# ls -Z

-rwxr-xr-x fu fu user_u:object_r:user_home_t azureus

-rw-r--r-- fu fu user_u:object_r:user_home_t Azureus2.jar

-rw-r--r-- fu fu user_u:object_r:user_home_t Azureus.png

2)chcon

更改文件的标签

[root@python tmp]# ls --context test.txt

-rw-r--r-- root root root:object_r:staff_tmp_t test.txt

[root@python tmp]# chcon -t etc_t test.txt

[root@python tmp]# ls -lZ test.txt

-rw-r--r-- root root root:object_r:etc_t test.txt

3)restorecon

当这个文件在策略里有定义是,可以恢复原来的文件标签。

4)setfiles

跟chcon一样可以更改一部分文件的标签,不需要对整个文件系统重新设定标签。

5)fixfiles

一般是对整个文件系统的,后面一般跟relabel,对整个系统relabel后,一般我们都重新启动。如果,在根目录下有.autorelabel空文件的话,每次重新启动时都调用fixfiles relabel

6)star

就是tar在SELinux下的互换命令,能把文件的标签也一起备份起来。

7)cp

可以跟-Z, --context=CONTEXT 在拷贝的时候指定目的地文件的security context

8)find

可以跟–context 查特定的type的文件。

例子:

find /home/fu/ --context fu:fu_r:amule_t -exec ls -Z {} \:

9)run_init

在sysadm_t里手动启动一些如Apache之类的程序,也可以让它正常进行,domain迁移。

4.2进程domain的确认

程序现在在那个domain里运行,我们可以在ps 命令后加-Z

[root@python /]# ps -eZ

LABEL PID TTY TIME CMD

system_u:system_r:init_t 1 ? 00:00:00 init

system_u:system_r:kernel_t 2 ? 00:00:00 ksoftirqd/0

system_u:system_r:kernel_t 3 ? 00:00:00 watchdog/0

4.3ROLE的确认和变更

命令id能用来确认自己的security context

[root@python ~]# id

uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:staff_r:staff_t

这里,虽然是ROOT用户,但也只是在一般的ROLE和staff_t里运行,如果在enforcing 模式下,这时的ROOT对于系统管理工作来说,是什么也干不了。

[root@python ~]# newrole -r sysadm_r

Authenticating root.

口令:

[root@python ~]# id

uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:sysadm_r:sysadm_t

4.4模式切换

1)getenforce

得到当前的SELINUX值

[root@python bin]# getenforce

Permissive

2)setenforce

更改当前的SELINUX值,后面可以跟enforcing,permissive 或者1, 0。[root@python bin]# setenforce permissive

3)sestatus

显示当前的SELinux的信息

[root@python bin]# sestatus -v

SELinux status: enabled

SELinuxfs mount: /selinux

Current mode: permissive

Mode from config file: permissive

Policy version: 20

Policy from config file: refpolicy

Process contexts:

Current context: user_u:user_r:user_t

Init context: system_u:system_r:init_t

/sbin/mingetty system_u:system_r:getty_t

/usr/sbin/sshd system_u:system_r:sshd_t

File contexts:

Controlling term: user_u:object_r:user_devpts_t

/etc/passwd system_u:object_r:etc_t

/etc/shadow system_u:object_r:shadow_t

/bin/bash system_u:object_r:shell_exec_t

/bin/login system_u:object_r:login_exec_t

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

/sbin/agetty system_u:object_r:getty_exec_t

/sbin/init system_u:object_r:init_exec_t

/sbin/mingetty system_u:object_r:getty_exec_t

4.5其他重要命令

1)Audit2allow

很重要的一个以python写的命令,主要用来处理日志,把日志中的违反策略的动作的记录,转换成access vector,对开发安全策略非常有用。在refpolicy里,它的功能比以前有了很大的扩展。

[root@python log]# cat dmesg | audit2allow -m local > local.te

2)checkmodule -m -o local.mod local.te

编译模块

[root@python log]# checkmodule -m -o local.mod local.te

checkmodule: loading policy configuration from local.te

checkmodule: policy configuration loaded

checkmodule: writing binary representation (version 5) to local.mod

3)semodule_package

创建新的模块

[root@python log]# semodule_package -o local.pp -m local.mod

4)semodule

可以显示,加载,删除模块

加载的例子:

[root@python log]# semodule -i local.pp

5)semanage

这是一个功能强大的策略管理工具,有了它即使没有策略的源代码,也是可以管理安全策略的。因为我主要是介绍用源代码来修改策略的,详细用法大家可以参考它的man页。

5. 定制策略

FC4, RHEL4等都是采用策略1.X版本的,并且是提供策略源代码的RPM包。从FC5开始策略的版本从1.X 升级到2.X。2.X版本的refpolicy(reference policy)最大的一个变化就是引进模块(module)这个概念, 同一套策略源代码就可以支持Multi-LevelSecurity(MLS)和non-MLS。

https://www.sodocs.net/doc/957173084.html,/

标准的FC5里不提供源代码的RPM包。FC5提供的audit2allow,semanage,semodule也是可以开发一些简单的策略模块的。但是,要是作策略模块的开发,增加一个ROLE之类的,最好还是下载refpolicy的源代码。

5.1策略源文件的安装

从CVS服务器下载的源代码是最新的,如果遇到象make的时候出错,那么最好就是把你系统里和SELinux有关的那些包更新到最新的状态。

从source Forge的CVS服务器下载源代码

[root@python src]# cd /usr/local/src

[root@python src]# cvs -d:pserver:anonymous@https://www.sodocs.net/doc/957173084.html,:/cvsroot/serefpolicy login

[root@python src]# cvs -z3 -d:pserver:anonymous@https://www.sodocs.net/doc/957173084.html,:/cvsroot/serefpolicy co -P refpolicy

[root@python src]# cd refpolicy/

[root@python src]# make install-src

安装好了的源代码目录结构如下图所示:

每一个模块有3个文件构成,比如上图的sudo.fc 就是和命令sudo相关的文件的定义标签,(file context rabel),sudo.te是Type Enforcement定义,包括TE访问规则等,sudo.if 是一个外部模块调用这个模块的接口定义。

[root@python src]# cd /etc/selinux/refpolicy/src/policy

[root@python policy]# cp build.conf https://www.sodocs.net/doc/957173084.html,

[root@python policy]# vi build.conf

[root@python policy]# diff build.conf https://www.sodocs.net/doc/957173084.html,

32c32

< DISTRO = redhat ---

> #DISTRO = redhat 43c43

< MONOLITHIC=n ---

> MONOLITHIC=y [root@python src]# make conf

[root@python src]# make 这样,在/etc/selinux/refpolicy/src/policy下生成很多的以pp为后缀的文件,这些就是SELinux模块。接下来我们修改/etc/sysconfig/selinux,设成SELINUXTYPE=refpolicy,然后reboot.

启动后,确认策略的适用情况,现在的版本是20。

[fu@python ~]$ /usr/sbin/sestatus

SELinux status: enabled

SELinuxfs mount: /selinux

Current mode: permissive

Mode from config file: permissive

Policy version: 20

Policy from config file: refpolicy

5.2给程序定制domain

开发程序策略的一般步骤

1.给文件,端口之类的object赋予type 标签

2.设置Type Enforcement (Domain 迁移,访问许可)

3.策略加载

4.permissive模式下运行程序

5.确认日志,用audit2allow生成访问许可

6.重复1,2,3,4,5动作,直到没有违反的日志出现

7.切换到enforcing模式,正式运用

因为我们所常用的那些服务的策略模块都已经有了,修改的时候也比较简单。在这里我就举个一般的例子。用点对点下载的朋友估计都跟我一样,在Linux上用azureus,Amule来下载东西吧。

接下来以azureus为例,介召如何在FC5里追加一个azureus.pp模块。我们在追加azureus.pp模块之前,azureus是在系统给用户设好的user_t domain里运行。

[fu@python azureus]$ ps -efZ|grep azureus

user_u:user_r:user_t fu 1751 1732 0 22:28 pts/3 00:00:00 /bin/bash ./azureus

接下来我们在追加3个文件。

1)azureus.fc

在这里我只定义一个文件,实际要是真的用的,还要定义azureus_t能写的目录等。

[root@python apps]# more azureus.fc

/home/fu/azureus -- gen_context(user_u:object_r:azureus_exec_t,s0)

2)azureus.te

[root@python apps]# more azureus.te

policy_module(azureus,1.0.0)

type azureus_t;

type azureus_exec_t;

role user_r types azureus_t;

require {

type user_t;

};

domain_type(azureus_t)

domain_entry_file(azureus_t, azureus_exec_t)

domain_auto_trans(user_t, azureus_exec_t, azureus_t)

3)azureus.if

实际上没有别的模块要调用azureus,所以这个文件就是空文件也不要紧。

[root@python apps]# more azureus.if

# policy/modules/apps/azureus.if

## Myapp example policy

##

## Execute a domain transition to run azureus.

##

##

## Domain allowed to transition.

##

interface(`azureus_domtrans',`

gen_requires(`

type azureus_t, azureus_exec_t;

')

domain_auto_trans($1,azureus_exec_t,azureus_t)

allow $1 azureus_t:fd use;

allow azureus_t $1:fd use;

allow $1 azureus_t:fifo_file rw_file_perms; allow $1 azureus_t:process sigchld;

')

在/etc/selinux/refpolicy/src/policy/policy/module.conf 里加入下面一行

[root@python policy]# tail -1 modules.conf

azureus = module

确认/etc/selinux/refpolicy/src/policy里MONOLITHIC=n

最后make , make load

[root@python policy]# pwd /etc/selinux/refpolicy/src/policy

[root@python policy]# make;make load

正常终了后,我们可以用semodule命令来确认azureus.pp下载下去了没有。

[root@python policy]# semodule -l |grep azureus

azureus 1.0.0

看样子是没有问题。好了我们再看看/home/fu/azureus/azureus的security context,我们刚才在azureus.fc里是期望它是user_u:object_r:azureus_exec_t ,可是它这个时候还是继承了默认的user_u:object_r:user_home_t ,如果不是我们期望的文件标签的话,domain是无法从user_t迁移到azureus_t的,因为relabel的话,会对整个文件系统进行重新设标签,很花时间,所以我们用在上面介绍过文件标签更改的命令chcon命令来改标签。

[root@python azureus]# chcon -t azureus_exec_t azureus

再看看这次的新标签,果然如我们期望的,变成azureus_exec_t了。

[root@python policy]# ls -lZ /home/fu/azureus/

-rwxr-xr-x fu fu user_u:object_r:azureus_exec_t azureus

-rw-r--r-- fu fu user_u:object_r:user_home_t Azureus2.jar

接下来退出ROOT用户,以用户fu登录,运行azureus命令。

[root@python azureus]# ps -efZ|grep azureus

user_u:user_r:azureus_t fu 8703 8647 0 23:23 pts/1 00:00:00 /bin/bash ./azureus

user_u:user_r:azureus_t fu 8717 8703 4 23:24 pts/1 00:01:29 java-D java.ext.dirs=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre/lib/ext -Xms16m -Xmx128m -cp /home/fu/azureus/Azureus2.jar:/home/fu/azureus/swt.jar -Djava.library.path=/home/fu/azureus -Dazureus.install.path=/home/fu/azureus org.gudy.azureus2.ui.swt.Main

user_u:user_r:user_t root 9347 1956 0 23:59 pts/2 00:00:00 grep azureus

高兴吧!成功了。

在这里我只是演示如何让domain迁移,至于azureus的严格的access vector的设置我都忽略了。

5.3 给自己增加个专用的ROLE

在这里我们要增加一个叫madia的ROLE,在追加时要对一些文件进行修改。

5.3.1 /etc/selinux/refpolicy/src/policy/policy/modules/kernel下的文件修改

1) kernel.te

[root@python kernel]# vi kernel.te

在role user_r 的下面加上一行

role madia_r;

2) domain.te

[root@python kernel]# vi domain.te

在role user_r types domain; 的下面加上一行

role madia_r type domain;

5.3.2 /etc/selinux/refpolicy/src/policy/policy/modules/system下的文件修改

[root@python system]# vi userdomain.te

在第5行追加madia_r,如下所示:

role sysadm_r, staff_r, user_r,madia_r;

在unpriv_user_template(user)下面加上下面的一行。

unpriv_user_template(madia)

5.3.3 /etc/selinux/refpolicy/src/policy/policy下的文件修改1)user

users和策略1.X里的users差不多。定义用户能利用的ROLE。

[root@python policy]# vi users

gen_user(madia, madia, madia_r, s0, s0)

2)rolemap

[root@python policy]# vi rolemap

在user_r user user_t下面加上一行

madia_r madia madia_t

5.3.4 重新make 策略

[root@python policy]# make load

5.3.5 /etc/selinux/refpolicy/seusers 文件的修改

Seusers是系统一般用户和SELinux的用户映射。

[root@python refpolicy]# vi seusers

madia:madia

5.3.6 /etc/selinux/refpolicy/contexts下的文件修改

1)default_type

决定用户登录时的默认ROLE。

[root@python refpolicy]# vi contexts/default_type

madia_r:madia_t

2)default_contexts

决定用户登录时的默认security context

[root@python refpolicy]# vi contexts/default_contexts

system_r:local_login_t madia_r:madia_t staff_r:staff_t user_r:user_t sysadm_r:sysadm_t 5.3.7 以madia用户重新登录

最后以用户madia登录,查看是不是进入madia_t了。

[madia@python ~]$ id

uid=501(madia) gid=501(madia) groups=501(madia) context=madia:madia_r:madia_t 以上我们可以看出,madia用户确实是进入了madia_t 运行了。

我们在以上的操作中,实际上还有修改遗漏的地方,每当重新make的时候,seusers都会回到原来的设定,有兴趣的朋友可以自己找出哪里还需要修改。

6.最后

我们现在主要还是targeted策略,因为我们的服务器,基本上也就跑apache,postgresql,tomcat,bind,postfix这几个服务。Targeted能够保护它。我们的目标是将一些影响比较小的,服务比较单一的服务器移植到能运行strict策略的服务器上。当然,即使我们用SELinux,对于系统的安全也不能掉以轻心,认为有了SELinux就100%安全。

比如targeted里有unconfined_t,任何在这个domain里运行的都是不被保护的。还有,系统管理员对TE的设置错误造成不能很好的保护,还内核的漏洞,Dos攻击等,SELinux也是无能为力的。

除了SELinux外,还有LIDS ,TOMOYO LINUX,AppArmor等安全操作系统。大家对LIDS和Apparmor有可能比较熟悉,TOMOYO是日本NTT数据公司开发的。也许有朋友在选择的时候不知道该用那个好。

安全级别高<----------------------------------->易用性高

SELINUX >> TOMOYO >> LIDS >> Apparmor

个人觉得,SELinux虽然配置起来麻烦了点,但是能达到军事安全级别,要玩的就话,还是SELinux有魅力。

现在也有人在开发策略的GUI编辑器,如SEEDIT,是日本日立软件工程公司的一个叫中村雄一为中心开发的。有了这些GUI的工具,将来定制策略会越来越容易的。

selinux学习理解

selinux学习理解 一、什么是selinux。 selinux全称是security enhanced linux,安全强化linux,是MAC (mandatory access control,强制访问控制系统)的一个实现,目的在于明确的知名某个程序可以访问哪些资源(程序,端口)。它的用户在于防范0—DAY攻击(利用尚未公开的漏洞实现攻击),所以它不是防火墙和ACL的替代品,功能也不重复。 举例来说,系统上Apache被发现存在一个漏洞,使得远程用户可以访问系统上的敏感文件(比如/etc/passwd),且修复该漏洞的补丁尚未发布,此时selinux可以起到弥补漏洞的方法。因为/etc/passwd 不具有apache的访问标签,所以Apache对于/etc/passwd的访问会被selinux阻止。 相比其他强制访问系统,selinux有如下访问优势: 1.控制策略是可以查询,而非程序比可见的。 2.可以热更改策略,无需或停止服务。 3.可以从程序初始化、继承、执行三个方面,使用策略进行控制。 4.控制范围广,包括:文件系统,目录,文件,文件启动描述符, 端口,消息接口,网络接口。 二、了解和配置selinux。 1、获取当前selinux运行状态 getenforce:可能返回三种结果

Enforcing:记录报警且阻止可疑行为。 Permissive:记录告警,不阻止可以行为。 Disable:关闭selinux。 默认是Enforcing 2、改变selinux状态。 setenforce 1|0 1代表Enforcing,0代表Permissive。此时不需要重启系统就可以实现。 要永久改变selinxu的状态,在/etc/sysconfig/selinux实现。当从disable切换到enforcing或permissive时,要重启系统并为整个文件系统重新创建安全标签。 3、selinux运行策略。 配置文件/etc/sysconfig/seilnux还包含了selinux运行策略的信息,通过改变SELINUXTYPE值实现,该值有两种可能:targeted代表仅针对预制的几种网络服务和访问请求都要使用selinux。strict代表所有网络服务和访问请求要经过selinux。默认为targeted,包含了几乎所有的网络服务的selinux策略配置,已经默认安装并且无需更改可以直接使用。 4、coreutils工具的selinux模式 常见的属于coreutils的工具如ps\ls等,可以通增加-Z的方式查看selinux的信息。 例:ls -Z /etc/ 查看目录ps -auxZ 查看进程 三、Apache selinux配置实例

CentOS上的SELinux实验

SELinux实验 一、环境搭建 因为实验室的Ubuntu系统本身不带SELinux,加上没有源和网速问题,安装不上。因此建议在虚拟机中用CentOS做。 CentOS下载地址: 中国科学技术大学开源镜像站:https://www.sodocs.net/doc/957173084.html,/centos/6/isos/x86_64/ 网易开源镜像站:https://www.sodocs.net/doc/957173084.html,/centos/6/isos/x86_64/ 大家选择CentOS-6.5-x86_64-LiveCD.iso下载就好,650MB左右。 机房的电脑默认没开Intel-VT技术,开机按F12,选择System Setup,然后在Virtualization 选项下开起虚拟化支持。 最后用VMware player或者VirtualBox新建虚拟机即可。 二、实验内容 CentOS已经安装好了SELinux,而且默认开启,用sestatus命令查看SELinux状态, 然后用yum install httpd服务, 在/var/www/html/目录下建立a.html文件,内容随意写点什么。然后重启httpd服务, 在浏览器中访问127.0.0.1/a.html,结果如下:

然后在root目录下建立b.html,内容随意,建立好后把b.html文件移动到/var/www/html/目录下,重启httpd服务。 在浏览器中访问b.html,会提示没有权限,如下图所示: 在终端中用ls–Z命令查看/var/www/html/目录下的文件安全上下文:

可以看见区别,因为b.html文件是root用户创建的,因此没有权限访问。 用chcon -t 命令更改文件的上下文环境: 再次在浏览器中访问b.html,可见可以访问了: 大家可以同理完成“修改/var/www/整个目录的上下文环境,使其为httpd不允许访问的类型”,然后在浏览器中测试。

2.1.5 节点防火墙和SELinux配置.

2.1.5 节点防火墙和SELinux配置 1.防火墙设置 在控制和计算节点上分别执行以下操作进行防火墙设置。(1)停止iptables服务。 [root@controller ~]# service iptables stop iptables: Setting chains to policy ACCEPT: filter [ OK ] iptables: Flushing firewall rules: [ OK ] iptables: Unloading modules: [ OK ] (2)将iptables服务配置为开机不自动启动。 [root@controller ~]# chkconfig iptables off 2.SELinux设置 在控制和计算节点上分别执行以下操作进行SELinux设置。(1)编辑SELinux的配置文件。 [root@controller ~]# vi /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=permissive # 将SELinux配置为允许模式 # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted 配置完成后,重新启动控制节点和计算节点。

什么是SELinux

SELinux(Security-Enhanced Linux) 是美国国家安全局(NAS)对于强制访问控制的实现,是 Linux? 上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。SELinux 默认安装在 Fedora 和 Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到。 SELinux 是 2.6 版本的 Linux 内核中提供的强制访问控制 (MAC)系统。对于目前可用的Linux 安全模块来说,SELinux 是功能最全面,而且测试最充分的,它是在 20 年的 MAC 研究基础上建立的。SELinux 在类型强制服务器中合并了多级安全性或一种可选的多类策略,并采用了基于角色的访问控制概念。 大部分使用 SELinux 的人使用的都是 SELinux 就绪的发行版,例如 Fedora、Red Hat Enterprise Linux (RHEL)、Debian 或 Gentoo。它们都是在内核中启用 SELinux 的,并且提供一个可定制的安全策略,还提供很多用户层的库和工具,它们都可以使用 SELinux 的功能。 SELinux是一种基于域-类型模型(domain-type)的强制访问控制(MAC)安全系统,它由NSA编写并设计成内核模块包含到内核中,相应的某些安全相关的应用也被打了SELinux 的补丁,最后还有一个相应的安全策略。 众所周知,标准的UNIX安全模型是"任意的访问控制"DAC。就是说,任何程序对其资源享有完全的控制权。假设某个程序打算把含有潜在重要信息的文件仍到/tmp目录下,那么在DAC 情况下没人能阻止他! 而MAC情况下的安全策略完全控制着对所有资源的访问。这是MAC和DAC本质的区别。SELinux提供了比传统的UNIX权限更好的访问控制。 1.背景 SELinux是「Security-Enhanced Linux」的简称,是美国国家安全局「NSA=The National Security Agency」和SCC(Secure Computing Corporation)开发的 Linux的一个扩张强制访问控制安全模块。原先是在Fluke上开发的,2000年以 GNU GPL 发布。 现在以Linux作为因特网服务器是越来越普遍的事了。在我这几年作过的项目里,WEB的开发基本都是基于Linux的,这里有给大公司做的,也给政府部门做的,当然更多的是中小企业做的。这其中给政府做的,我们把SELinux作为一个卖点,接受了不少项目。 2.我们需要安全操作系统的理由 现在不论是政府还是民间企业,大家对信息安全问题是越来越关心了,因为企业的业务平台的服务器上存储着大量的商务机密,个人资料,个人资料它直接关系到个人的隐私问题。特别是我们政府的网站,作为信息公开的平台,它的安全就更显得重要了。这些连到互联网的服务器,不可避免的要受到来自世界各地的各种威胁。最坏的时候我们的服务器被入侵,主页文件被替换,机密文件被盗走。除了来自外部的威胁外,内部人员的不法访问,攻击也是不可忽视的。对于这些攻击或者说是威胁,当然有很多的办法,有防火墙,入侵检测系统,打补丁等等。因为Linux也和其他的商用UNIX一样,不断有各类的安全漏洞被发现。我们对付这些漏洞不得不花很多的人力来堵住它。在这些手段之中,提高OS系统自身的牢固性就显得非常的重要。 2.1传统的Linux OS的不足之处 虽然Linux 比起 Windows 来说,它的可靠性,稳定定要好得多,但是他也是和其他的UNIX 一样,有以下这些不足之处。 1)存在特权用户root 任何人只要得到root的权限,对于整个系统都可以为所欲为。这一点Windows也一样。2)对于文件的访问权的划分不够细

SELinux TE规则

1. 简介 SELinux策略语言主要描述policy.conf的相关语法,其相关部分如下图所示: 2. 类型强制概念 SELinux策略大部分内容都是由多条类型强制规则构成的,这些规则控制被允许的使用权,大多数默认转换标志,审核,以及固定部分的检查。 SELinux策略大部分都是一套声明和规则一起定义的类型强制(TE:Type Enforcement)策略,一个定义良好、严格的TE策略可能包括上千个TE规则,TE规则数量的巨大并不令人惊奇,因为它们表达了所有由内核暴露出的允许对资源的访问权,这就意味着每个进程对每个资源的访问尝试都必须至少要有一条允许的TE访问规则,如果我们仔细思考一下现代Linux操作系统中进程和资源的数量,就明白为什么在策略中有那么多的TE规则了。当我们添加由TE规则控制的审核配置和标志时,对于具有严格限制的SELinux策略,常常会见到它包含有上千条规则,在“创建和编写SELinux安全策略”中,我们将会讨论如何创建和管理这些大量的规则,本文旨在理解TE规则是如何工作的。 TE规则的绝对数量对理解SELinux策略是一个大的挑战,但是规则本身并不复杂,它们的分类相对较少,所有的规则基本上都属于两类范畴: ?访问向量(AV)规则 ?类型规则 我们使用AV规则允许或审核两个类型之间的访问权,我们在某些情况下使用类型规则控制默认的标记决定。 SELinux的一个重要概念是TE规则是将权限与程序的访问结合在一起,而不是结合用户。所有SELinux 策略语言特性都是处理主体(正常的运行中的进程)对客体(文件、目录和套接字等)的访问权的,主要集中于程序访问控制决策,这也是SELinux的主要益处,它允许SELinux策略编写者基于程序的功能和安

selinux试验

Selinux学习 学习目标:学习和掌握selinux相关管理命令。 学习效果:学会使用基础常用的selinux命令,来实现对selinux服务的管理和应用。一、SELinux简介 SELinux的全称是Security-Enhanced Linux,是由美国国家安全局NSA开发的访问控制体制。SELinux可以最大限度地保证Linux系统的安全。 至于它的作用到底有多大,举一个简单的例子可以证明:没有SELinux保护的Linux的安全级别和Windows一样,是C2级,但经过保护SELinux保护的Linux,安全级别则可以达到B1级。如:我们把/tmp目录下的所有文件和目录权限设置为0777,这样在没有SELinux保护的情况下,任何人都可以访问/tmp 下的内容。而在SELinux环境下,尽管目录权限允许你访问/tmp下的内容,但SELinux的安全策略会继续检查你是否可以访问。 NSA推出的SELinux安全体系结构称为 Flask,在这一结构中,安全性策略的逻辑和通用接口一起封装在与操作系统独立的组件中,这个单独的组件称为安全服务器。SELinux的安全服务器定义了一种混合的安全性策略,由类型实施 (TE)、基于角色的访问控制 (RBAC) 和多级安全(MLS) 组成。通过替换安全服务器,可以支持不同的安全策略。SELinux使用策略配置语言定义安全策略,然后通过checkpolicy 编译成二进制形式,存储在文件(如目标策略 /etc/selinux/targeted/policy/policy.18)中,在内核引导时读到内核空间。这意味着安全性策略在每次系统引导时都会有所不同。 SELinux的策略分为两种,一个是目标(targeted)策略,另一个是严格(strict)策略。有限策略仅针对部分系统网络服务和进程执行SELinux策略,而严厉策略是执行全局的NSA默认策略。有限策略模式下,9个(可能更多)系统服务受SELinux监控,几乎所有的网络服务都受控。 配置文件是/etc/selinux/config,一般测试过程中使用“permissive”模式,这样仅会在违反SELinux规则时发出警告,然后修改规则,最后由用户觉得是否执行严格“enforcing”的策略,禁止违反规则策略的行为。规则决定SELinux 的工作行为和方式,策略决定具体的安全细节如文件系统,文件一致性。 二、使用设置

Selinux配置详解

Selinux配置详解 1.背景 SELinux是「Security-Enhanced Linux」的简称,是美国国家安全局「NSA=The National Security Agency」和SCC(Secure Computing Corporation)开发的Linux的一个扩张强制访问控制安全模块。原先是在Fluke上开发的,2000年以GNU GPL 发布。 现在以Linux作为因特网服务器是越来越普遍的事了。在我这几年作过的项目里,WEB的开发基本都是基于Linux的,这里有给大公司做的,也给政府部门做的,当然更多的是中小企业做的。这其中给政府做的,我们把SELinux作为一个卖点,接受了不少项目。 2.我们需要安全操作系统的理由 现在不论是政府还是民间企业,大家对信息安全问题是越来越关心了,因为企业的业务平台的服务器上存储着大量的商务机密,个人资料,个人资料它直接关系到个人的隐私问题。特别是我们政府的网站,作为信息公开的平台,它的安全就更显得重要了。这些连到互联网的服务器,不可避免的要受到来自世界各地的各种威胁。最坏的时候我们的服务器被入侵,主页文件被替换,机密文件被盗走。除了来自外部的威胁外,内部人员的不法访问,攻击也是不可忽视的。对于这些攻击或者说是威胁,当然有很多的办法,有防火墙,入侵检测系统,打补丁等等。因为Linux也和其他的商用UNIX一样,不断有各类的安全漏洞被发现。我们对付这些漏洞不得不花很多的人力来堵住它。在这些手段之中,提高OS 系统自身的牢固性就显得非常的重要。 2.1传统的Linux OS的不足之处 虽然Linux 比起Windows 来说,它的可靠性,稳定定要好得多,但是他也是和其他的UNIX 一样,有以下这些不足之处。 1)存在特权用户root 任何人只要得到root的权限,对于整个系统都可以为所欲为。这一点Windows也一样。 2)对于文件的访问权的划分不够细 在linux系统里,对于文件的操作,只有「所有者」,「所有组」,「其他」这3类的划分。 对于「其他」这一类里的用户再细细的划分的话就没有办法了。 3)SUID程序的权限升级 如果设置了SUID权限的程序有了漏洞的话,很容易被攻击者所利用。

Linux安全中阶教程之SElinux(适合有一定水平的管理员) ...

Linux安全中阶教程之SElinux(适合有一定水平的管理员) 一:SElinux(安全增强linux简介) 1:使用SElinux可以将进程放入在特定的SElinux域,同时赋予系统上的资源(如文件,网络套接字,系统调用等)SElinux上下文。装入SElinux的策略(通常作为系统启动过程的一部分),然后决定哪个进程域可以访问哪些资源上下文。 2:在红帽企业版linux 5中,有关SElinux的选择有下面几种: (1) 我是否需要启用SElinux (2) 一旦启用,我需要SElinux处于允许(permissive)还是强制(enforcing)状态。 (3) 我需要在文件上赋予什么样的SElinux上下文。 3:在实际工作中,红帽企业版linux 5支持一种SElinux策略,叫目标策略(targeted).这个策略在大多数应用之中。在目标策略之中,只有目标进程受到SElinux的影响。而其他进程运行在非限制模式下。目标策略只影响常用的网络应用程序。受到限制的服务在200个以上,有增加的趋势。SElinux限制的典型应用程序如下: (1) dhcp (2) httpd (3) mysqld (4) named (5) nscd (???) (6) ntpd (???) (7) portmap (8) postgres (???) (9) snmpd (???) (10) squid (11)

syslogd 4:启用SElinux /etc/sysconfig/selinux setenforce getenforce /etc/sysconfig/selinux (1) 强制(enforcing):任何违法SElinux的操作都被禁止。 (2) 允许(permissive):任何违反SElinux的操作都会受到一个警告信息。但是行动可以继续。 (3) 停用(disabled):不启用SElinux策略。 Setenforce和getenforce命令 Setenforce 0/1 0 表示允许;1 表示强制 Getenforce 查看当前SElinux的状态。 5:查看SElinux上下文 使用命令 ps –Z 和 ls –Z 每个进程都属于个SElinux域; 每个文件都被赋予一个SElinux上下文。 相关的域和上下文可以使用ls和ps命令的命令选项–Z 来显示 进程SElinux域和SElinux上下文,具有以下格式: System_u:object_r:httpd_exec:s0 说明: 上面的字段以冒号作为分隔符, 第一个字段:用户 第二个字段:角色 第三个字段:类型 第四个字段:与MLS,MCS有关 说明: SEliunx目标策略只于第三个字段有关,即类型字段(TYPE). 二:SElinux介绍 SElinux是美国国家安全局为linux系统设计的一项开放源码项目,主要是希望将其作为系统的最后一道防线,来抵御黑客的攻击和入侵系统。 1. 常见的读取控制 1.1 DAC (Discretionary Access Control)”任意式读取控制”。在DAC的架构下,每个对像都会记录一个拥有者的信息。只要是对象的拥有者,就可以获得该对象的完全控制权限。DAC 允许拥有者完全权限。其他需要读取该对象时候,必须授予适当的权限。但是每个对象仅有一组拥有者的信息,如果需要更复杂的读取控制能力,必须使用ACL。ACL的全名是“访问

SELinux服务器不关闭配置 samba的方法

SELinux服务器不关闭配置samba的方法https://www.sodocs.net/doc/957173084.html, 2010-03-02 10:28 佚名 CSDN 我要评论() ?摘要:点击一看,是SELinux报警,报警时间与每次客户机访问samba时间一致,估计是SELinux 太严谨的问题,将客户机的错误信息在网上搜索,查找到果然是samba与SELinux冲突的问题。 ?标签:SELinux ? 限时报名参加“甲骨文全球大会·2010·北京”及“JavaOne和甲骨文开发者大会2010” 给大家推荐一款很不错的SELinux系统很有学习价值,这里我主要讲解SELinux系统的应用,包括介绍SELinux知识等方面。前段时间在实验室的4*4核服务器上安装Samba 服务器,解决了服务器安装的硬件问题后,在服务器上配好了Samba,但在客户机访问Samba 时,显示错误。查看到主机机器上右上方有红色感叹号显示。 点击一看,是SELinux报警,报警时间与每次客户机访问samba时间一致,估计是SELinux太严谨的问题,将客户机的错误信息在网上搜索,查找到果然是samba与SELinux 冲突的问题。 PS:曹老师开始用挂载的方法配NSF时也没配成功,同样是SELinux的问题,关闭后可解决。方法一:关闭SELinux,并修改配置文件,使系统启动时不启动SELinux。(我采用的是这种方法) 1.Disable selinux 2.[root@Jie ~]# vi /etc/sysconfig/selinux 3.# This file controls the state of SELinux on the system. 4.# SELINUX= can take one of these three values: 5.# enforcing - SELinux security policy is enforced. 6.# permissive - SELinux prints warnings instead of enforcing. 7.# disabled - SELinux is fully disabled. 8.SELINUX=enforcing 9.# SELINUXTYPE= type of policy in use. Possible values are: 10.# targeted - Only targeted network daemons are protected. 11.# strict - Full SELinux protection. 12.SELINUXTYPE=targeted 把SELINUX设定为disable, 下次启动系统后将会停止SElinux。Linux核心参数(Kernel Parameter)或者可以在核心参数后加上:selinux=0 (停止)或selinux=1 (开启)参数档案/boot/grub/menu.lst 1.title Fedora Core ( 2.6.18-1.2798.fc6) 2.root (hd0,0)

selinux设置出错解决办法

1 永久方法–需要重启服务器 修改/etc/selinux/config文件中设置SELINUX=disabled ,然后重启服务器。 2 临时方法–设置系统参数 使用命令setenforce 0 禁用SELinux时配置错误导致rhel不能够启动的一种解决方法造成此次问题的原因: 1. 2. linux版本是RHEL5,关闭SELinux时,在修改配置文件 /etc/selinux/config过程中, 3. 4.本应设置: 5.# SELINUX=enforcing 6.SELINUX=disabled 7. 8. 9.不慎设置了SELINUXTYPE参数: 10.#SELINUXTYPE=targeted 11.SELINUXTYPE=disabled 12.重启RHEL的时候,提示: 13.unable to load selinux policy. machine is in enforcing mode. ha lting now. kernel panic-not syncing:attempted to kill init! 14.解决方法: 15. 16.系统启动的时候,按下‘e’键进入grub编辑界面,编辑grub菜单,选 择“kernel /vmlinuz- 2.6.2 3.1-42.fc8 ro root=/dev/vogroup00/logvol00 rhgb quiet”一 栏,按‘e’键进入编辑,在末尾增加selinux=0,即: 17.kernel /vmlinuz-2.6.23.1-42.fc8 ro root=/dev/vogroup00/logvol00 rhgb quiet enforcing=0 18.按‘b’键继续引导,顺利引导

selinux 中文手册

Getting Started with SE Linux HOWTO: the new SE Linux (简体中文版)

Getting Started with SE Linux HOWTO: the new SE Linux (译者注:本文的最原始版本为2004年3月所写,此份HOWTO是作者在今年2月根据最 新的SE Linux所作的修改后的版本。新的SE Linux与以前的有比较大的变化,而且这项技 术本身也正在飞速的发展,并未最后成熟。阅读本文是需要对Linux本身有一定深度的了解 作为基础的。本文并不是Linux的初级教程,但却是SE Linux技术的初级教程。) 原著:Faye Coker, March 2004. faye@https://www.sodocs.net/doc/957173084.html, 中文译者:邹立巍, 2006年7月 mini.jerry@https://www.sodocs.net/doc/957173084.html,; 重要的提示!注意! 我正在根据最新的SE Linux来根本的升级这份文档。我用了很长时间来做这件事情,不过 看来我好像永远没有足够的时间作完它。我现在正在继续做,请相信我! Faye Coker, Feb 04, 2006 (译者注:本人技术出身,英语实在比较差。翻译如有不当之处,敬请指正!) 这份文档已经根据最新的SE Linux做了更改。旧的"Getting Started with SE Linux HOWTO" 的内容将保留在此份文档里,不过绝大多数的内容是根据最新的SE Linux的特点作了修改。新的SE Linux是基于2.6.*内核的,但是仍然支持2.4.*的内核。这份文档的大部分内容是原 来的,我在需要修改的地方做了调整。 这份文档是美国国家安全局的安全加强的Linux(NSA SE Linux)的概述性的说明。我们主 要的环境是基于Debian Linux的,而且大部分的软件包的操作命令实例都是基于Debian的。这份文档主要是针对那些想要基础了解SE Linux的人,所以这里没有对SE Linux比较进介 的介绍。你可以在附录的资源部分找到其它介绍SE Linux的资料。 这份文档已经被Ivan Pesin翻译成了俄文。你可以在 https://www.sodocs.net/doc/957173084.html,/rus/articles/intro_selinux.html找到俄文的版本。谢谢Ivan做了这些。 目录 1.介绍 1.1.欢迎反馈! 1.2.注意! 1.3.最新的SE Linux的特色 1.4.Fedora用户的策略(policy)源代码目录介绍 2.概览 2.1.为什么要使用SE Linux?

selinux管理和应用

1.1 SElinux概述 SELinux(Security-Enhanced Linux) 是美国国家安全局(NAS)对于强制访问控制的实现,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。大部分使用SELinux 的人使用的都是SELinux就绪的发行版,例如Fedora、Red Hat Enterprise Linux (RHEL)、Debian 或Gentoo。它们都是在内核中启用SELinux 的,并且提供一个可定制的安全策略,还提供很多用户层的库和工具,它们都可以使用 SELinux 的功能。 1.1.1 SElinux特点 1.MAC 对访问的控制彻底化,对所有的文件、目录、端口的访问都是基于策略设定的,可由管理员时行设定。 2.RBAC 对于用户只赋予最小权限。用户被划分成了一些role(角色),即使是root 用户,如果不具有sysadm_r角色的话,也不是执行相关的管理。哪里role可以执行哪些domain,也是可以修改的。 3.安全上下文 当启动selinux的时候,所有文件与对象都有安全上下文。进程的安全上下文是域,安全上下文由用户:角色:类型表示。 (1)系统根据pam子系统中的pam_selinux.so模块设定登录者运行程序的安全上下文 (2)rpm包安装会根据rpm包内记录来生成安全上下文, (3)如果是手工他建的,会根据policy中规定来设置安全上下文, (4)如果是cp,会重新生成安全上下文。 (5)如果是mv,安全上下文不变。 1.1.2 安全上下文格式 安全上下文由user:role:type三部分组成,下面分别说明其作用: https://www.sodocs.net/doc/957173084.html,er identity:类似linux系统中的UID,提供身份识别,安全上下文中的一部分。 三种常见的user: user_u-: 普通用户登录系统后预设; system_u-:开机过程中系统进程的预设; root-: root登录后预设; 在targeted policy中users不是很重要; 在strict policy中比较重要,的有预设的selinux users都以"_u"结尾,root除外。 2.role

SELinux概述

SELinux使用了分级的强制访问控制,是Linux核的重要安全措施。SELinux的安全策略工具可从oss.tresys./projects下载。本章分析了SELinux的安全机制,介绍了安全策略配置语言、核策略库的结构,简述了SELinux核模块的实现,还分析了用户空间的客体管理器。 3.1SELinux概述 SELinux是安全增强了的Linux,是Security-enhanced Linux的简写,SELinux改进了对核对象和服务的访问控制,改进了对进程初始化、继承和程序执行的访问控制,改进了对文件系统、目录、文件和打开文件描述的访问控制,还改进了对端口、信息和网络接口的访问控制。早期的Linux核只提供了经典的UNIX自主访问控制(root用户,用户ID,模式位安全机制),以及部分地支持了POSIX.1e标准草案中的capabilities安全机制,这对于Linux系统的安全性是不够的,NSA(the National Security Agency)和SCC(Secure Computing Corporation)共同开发了强大的基于类型加强(Type Enforcement)的强制访问控制(mandatory access control,简称MAC)机制,提供了动态的安全策略机制。 Linux核增加了一个通用的安全访问控制框架,它通过hook函数来控制程序的执行,这个框架就是Linux安全模块(LSM),在LSM上可使用各种安全控制机制(如:Flask机制)来实现对程序的控制。 SELinux应用了类型加强(Type Enforcement,TE)和基于角色访问控制(role-based access control,RBAC)技术。 TE给每个主体(进程)和系统中的客体定义了一个类型,这些类型定义在SELinux的安全策略文件中,以安全标签形式存放在文件本身的扩展属性(extended attributes,简称xattrs)里。 当一个类型与一个进程相关时,这个类型称为域(domain),例如:后台进程httpd的域为httpd_t。 主体(subject)对客体(object)的操作在SELinux中默认下是不允许的,而由策略定义允许的操作。TE使用主体的域和客体类型从策略文件中查找操作许可。例如:策略中的一条规则如下: allow httpd_t net_conf_t:file { read getattr lock ioctl }; 这条规则表示httpd_t域对net_conf_t类型客体的文件有“{}”中所表示的操作权限。SELinux的访问控制规则存放在安全策略文件中,策略文件分为二进制和源代码文件,源代码以策略配置语言的形式描述,由编程者创建和维护。源代码经策略配置工具编译后生成二进制文件。二进制策略被装载到核空间,形成在存中的策略库及缓存,核就可以使用访问控制规则了。 SELinux可以实现非常小颗粒的访问控制,这些细小颗粒的访问控制也造成了安全策略的复杂性。 Linux核的SELinux安全体系由Flask和LSM框架共同组成,LSM是由hook函数组成的安全控制框架,Flask框架将SElinux的策略规则转换成访问控制许可。 在安全策略配置语言中经常用到的名称术语说明如下。 subject 主体,常指一个进程 object 客体,常指一个文件 object class客体的类 permission 许可 context上下文 user用户 role角色 type 类型

linux-SElinux命令详解setsebool命令

配置VSFTPD时本地用户无法切换 用到命令 setsebool -P ftpd_disable_trans=1 setsebool命令查询了相关的资料 是selinux的相关设置项 这是SELinux的设置命令. 其实 man 一下setsebool也知道了: NAME setsebool– set SELinuxboolean value 在不熟悉SELnux前,把SELinux关掉也可以的。有时间研究下SELinux。 Redhat从FC3开始,就使用了SELinux来增强安全,但是使用起来有时候太繁琐,就想关闭它,但是如果安装服务器的时候开始没有图形界面,还真很难找到地方可以关闭。 正确方法如下:修改/etc/selinux/config文件中的SELINUX=”" 为 disabled ,然后重启。 2009年8。22更新 下面是一些收集来的设置命令 ===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 booleanallow_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

Selinux的了解

Selinux的了解 1.背景 SELinux是「Security-Enhanced Linux」的简称,是美国国家安全局「NSA=The National Security Agency」和SCC(Secure Computing Corporation)开发的Linux的一个扩张强制访问控制安全模块。原先是在Fluke上开发的,2000年以GNU GPL 发布。 现在以Linux作为因特网服务器是越来越普遍的事了。在我这几年作过的项目里,WEB的开发基本都是基于Linux的,这里有给大公司做的,也给政府部门做的,当然更多的是中小企业做的。这其中给政府做的,我们把SELinux作为一个卖点,接受了不少项目。 2.我们需要安全操作系统的理由 现在不论是政府还是民间企业,大家对信息安全问题是越来越关心了,因为企业的业务平台的服务器上存储着大量的商务机密,个人资料,个人资料它直接关系到个人的隐私问题。特别是我们政府的网站,作为信息公开的平台,它的安全就更显得重要了。这些连到互联网的服务器,不可避免的要受到来自世界各地的各种威胁。最坏的时候我们的服务器被入侵,主页文件被替换,机密文件被盗走。除了来自外部的威胁外,内部人员的不法访问,攻击也是不可忽视的。对于这些攻击或者说是威胁,当然有很多的办法,有防火墙,入侵检测系统,打补丁等等。因为Linux也和其他的商用UNIX一样,不断有各类的安全漏洞被发现。我们对付这些漏洞不得不花很多的人力来堵住它。在这些手段之中,提高OS 系统自身的牢固性就显得非常的重要。 2.1传统的Linux OS的不足之处 虽然Linux 比起Windows 来说,它的可靠性,稳定定要好得多,但是他也是和其他的UNIX 一样,有以下这些不足之处。 1)存在特权用户root 任何人只要得到root的权限,对于整个系统都可以为所欲为。这一点Windows也一样。 2)对于文件的访问权的划分不够细 在linux系统里,对于文件的操作,只有「所有者」,「所有组」,「其他」这3类的划分。 对于「其他」这一类里的用户再细细的划分的话就没有办法了。 3)SUID程序的权限升级 如果设置了SUID权限的程序有了漏洞的话,很容易被攻击者所利用。

实验11 selinux

实验11 SELinux 一、实验要求 掌握SELinux的配置方法。 掌握SELinux三种模式的切换方法。 掌握SELinux在ftp服务中的应用。 二、实验过程 1查看selinux状态 查看文件的security context值 这个就是我们文件的security context值 system_u:object_r:admin_home_t system_u指的是SElinux用户,root表示root账户身份,user_u表示普通用户无特权用户,system_u表示系统进程,通过用户可以确认身份类型,一般搭配角色使用。身份和不同的角色搭配时有权限不同,虽然可以使用su命令切换用户但对于SElinux的用户并没有发生改变,账户之间切换时此用户身份不变,在targeted策略环境下用户标识没有实质性作用。 object_r object_r一般为文件目录的角色、system_r一般为进程的角色,在targeted策略环境中用户的角色一般为system_r。用户的角色类似用户组的概念,不同的角色具有不同的身份权限,一个用户可以具备多个角色,但是同一时间只能使用一个角色。在targeted策略环境下角色没有实质作用,在targeted策略环境中所有的进程文件的角色都是system_r角色。 admin_home文件和进程都有一个类型,SElinux依据类型的相关组合来限制存取权限。 context值的类型会随着文件在不同的位置,会跟着发生变化。 大家进入到/home目录创建文件1,查看该文件的安全值,然后将该文件移动到/root目录下,再查看安全值,安全值是否发生变化。

从头开始生成 SELinux

从头开始生成SELinux 构建一个SELinux 就绪的Gentoo 系统 Serge E. Hallyn (sergeh@https://www.sodocs.net/doc/957173084.html,), 专职程序员, EMC Serge Hallyn 是IBM Linux Technology Center 安全团队的一名专职程序员。他从College of William and Mary 获得了计算机科学博士学位。他实现了几个安全模型(dte、bsdjail),并对其他的安全模型(seclvl) 和SELinux 贡献了自己的力量。他实现了DTE 及相应的配置文件和分析工具,并在Type Enforcement(SELinux 中的主要技术)方面具有丰富的经验。 简介: SELinux 是美国国家安全局对于强制访问控制的实现,是Linux? 上最杰出的新安全子系统。SELinux 默认安装在Fedora 和Red Hat Enterprise Linux 上,也可以作为其他发行版上容易安装的包得到。本文将向您展示如何手工转换一个非SELinux 的系统,目的是展示SELinux 是如何集成到系统中的。 SELinux 是 2.6 版本的Linux 内核中提供的强制访问控制(MAC)系统。对于目前可用的Linux 安全模块来说,SELinux 是功能最全面,而且测试最充分的,它是在20 年的MAC 研究基础上建立的。SELinux 在类型强制服务器中合并了多级安全性或一种可选的多类策略,并采用了基于角色的访问控制概念。有关这些主题的更多信息的链接,请参见本文后面的参考资料部分。 大部分使用SELinux 的人使用的都是SELinux 就绪的发行版,例如Fedora、Red Hat Enterprise Linux (RHEL)、Debian 或Gentoo。它们

SElinux以及防火墙的关闭

SElinux以及防火墙的关闭 关闭SELinux的方法: 修改/etc/selinux/config文件中的SELINUX="" 为disabled ,然后重启。 如果不想重启系统,使用命令setenforce 0 注: setenforce 1 设置SELinux 成为enforcing模式 setenforce 0 设置SELinux 成为permissive模式 在lilo或者grub的启动参数中增加:selinux=0,也可以关闭selinux #--------------------------------------------------------------- 查看selinux状态: /usr/bin/setstatus -v 如下: SELinux status: enabled SELinuxfs mount: /selinux Current mode: permissive Mode from config file: enforcing Policy version: 21 Policy from config file: targeted getenforce/setenforce查看和设置SELinux的当前工作模式。 Linux关闭防火墙 1) 重启后永久性生效: 开启:chkconfig iptables on 关闭:chkconfig iptables off 2) 即时生效,重启后失效: 开启:service iptables start 关闭:service iptables stop 需要说明的是对于Linux下的其它服务都可以用以上命令执行开启和关闭操作。 在开启了防火墙时,做如下设置,开启相关端口, 修改/etc/sysconfig/iptables 文件,添加以下内容: -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT 或者: /etc/init.d/iptables status 会得到一系列信息,说明防火墙开着。 /etc/rc.d/init.d/iptables stop 关闭防火墙 建议的关闭防火墙命令是 iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT iptables -F 注: fedora下:

相关主题