|
目录
1. 介绍
1.1. 欢迎反馈!
1.2. 注意!
1.3. 最新的SE Linux的特色
1.4. Fedora用户的策略(policy)源代码目录介绍
2. 概览
2.1. 为什么要使用SE Linux?
2.2. 术语的使用
2.2.1. 身份(identity)
2.2.2. 域(domain)
2.2.3. 类型(type)
2.2.4. 角色(role)
2.2.5. 安全上下文(security context)
2.2.6. 转换(transition)
2.2.7. 策略(policy)
3.安装
3.1. 基于Debian的安装
3.1.1. 修改Debian包管理工具
3.2. 基于Fedora的安装
4.登录 4.1. 在登录时提供用户上下文 4.2. 用 newrole -r 命令改变上下文 4.3. 在sysadm_t域中执行命令 4.4. Permissive 和 Enforcing 模式 4.5. 不同角色运行命令的比较
5.建立用户帐户 5.1. 建立一个新的用户 5.2. 给用户分配角色和申请改变 5.3. 给用户设置缺省的安全上下文 5.4. 重新标记用户主目录
6.添加新的用户域 6.1. 编辑用户的域文件 6.2. 在此建立一个新的测试用户
7.日志文件信息的说明
8.资源
1. 介绍
这份文档是一个SE Linux的简介,可以指导一部分人初步的学会SE Linux。它涵盖和解释了SE Linux 的各方面的术语,安装和添加用户并且涵盖了一小部分别的知识。一个更高级的帮助文档将会在不久发布(译者注:正在翻译中), 包含了如何编辑策略等内容。 (which causes a little too much information overload with users new to SE Linux and is not included here).
1.1. 欢迎反馈!
我们欢迎对这份文档的反馈信息,请发邮件给faye@lurking-grue.org (中文的就给我吧!;)mini.jerry@gmail.com)
1.2. 注意!
这份文档只是一份指导。我强烈的建议你在实际工作的机器上应用之前先找一台试验机器来做练习 。
1.3. 最新的SE Linux的特点
最新的SE Linux有一些新的特点,下面先介绍一下:
/selinux 文件系统 加入了一个/selinux 文件系统. 因此有些安装程序需要你编辑/etc/fstab 文件。 /selinux文件系统和 /proc 文件系统类似,都是虚拟的文件系统。你可以用ls -l /selinux 命令来显示。
total 0
-rw-rw-rw- 1 root root 0 Nov 25 11:27 access
-rw-rw-rw- 1 root root 0 Nov 25 11:27 context
-rw-rw-rw- 1 root root 0 Nov 25 11:27 create
-rw------- 1 root root 0 Nov 25 14:19 enforce
-rw------- 1 root root 0 Nov 25 11:27 load
-r--r--r-- 1 root root 0 Nov 25 11:27 policyvers
-rw-rw-rw- 1 root root 0 Nov 25 11:27 relabel
-rw-rw-rw- 1 root root 0 Nov 25 11:27 user
运行cat 命令查看 "enforce"文件将会显示一个值,代表SE Linux当前的状态,1 代表 enforcing状态, 0代表permissive 状态。
使用了文件系统的扩展属性 新的 SE Linux使用了文件系统的扩展属性(Extended attributes)来存放安全上下文(security contexts)。你必须让你的内核支持这种扩展属性属性。 扩展属性是一个 名称—数据 元组 (name-data tuple)-- 举个例子说, security.selinux 就是一个属性的名称,安全上下文(security context)就是要存的数据。 当SE Linux正在运行时,你可以用 ls --context filename 命令来查看一个文件的安全上下文(我们将在后面进一步解释这个命令),无论SE Linux是否打开,你都可以用getfattr 命令查看文件系统的扩展属性。不过你要先装支持 attr 的软件包并且通过 getfattr命令的manpage学会使用它。这个命令的运行方法是:
faye@kaos:~$ getfattr -m . -d /etc/passwd
getfattr: Removing leading '/' from absolute path names
# file: etc/passwd
security.selinux="system_u bject_r:etc_t\000"
你所查看的文件的 security.selinux 属性中储存了此文件的安全上下文, 所以上面例子中的上下文就是 system_u bject_r:etc_t 。所有运行了SE Linux的ext2/3文件系统上都有 security.selinux 这个属性(这个新特性的关键). 如果你引导了一个没有 SE Linux 的内核, 你将仍然看到这个扩展属性. 当你用make relabel 操作设置了文件的安全上下文期间,扩展属性就被setfiles 设置了。
从init加载SE Linux策略 打开了SE Linux的系统在引导时,init进程既要挂载 /selinux 文件系统,并在那之后载入SE Linux的策略。
安全ID(SIDs) 和 父进程安全ID(PSIDs) 不再使用 SIDs (安全ID) 在旧的 SE Linux 是用户进程的内核接口. PSIDs (父进程安全ID SIDs) 是内核映射(设置)磁盘上的文件的上下文的根据(译者注:这里的概念可能不是很清晰,总的来说就是SID和PSID在旧的SE Linux中起着标记安全上下文的作用)。 请看NSA的 Configuring the SELinux Policy 获得更多的帮助。 在新的SE Linux中, 扩展属性记录了安全上下文,所以SIDs和PSIDs 也就不必要了。
-Z 参数 -Z 可以替代 --context 命令参数,比如ls -Z 和 ps -Z.
用 chcon 命令替代了chsid命令 chsid 命令在旧的SE Linux中用来设置文件的安全上下文。新的SE Linux 中用chcon 命令来设置。 chcon 在旧的SE Linux 中已经可以使用,但是在新的SE Linux中的设置用户或类型方面得到了进一步改善。可以查看manpage 获得更多的提示。
1.4. Fedora 用户的策略(Policy)源代码目录介绍
在Debian中, 策略的源代码目录是/etc/selinux. 在Fedora 中是/etc/security/selinux/src/policy。 在这份文档中我市参照 Debian的源代码目录做的操作, 如果你是Fedora用户, 请用 /etc/security/selinux/src/policy替换。
2. 总揽
接下来是有关在什么情况下你该使用SE Linux和它的基本使用的简短介绍。 2.2 部分规定了后面章节将常使用的的术语。, 所以请熟悉他们。
2.1 为什么使用SE Linux?
SE Linux 可以为你的系统提供较棒的安全防护。 使用者能被分配预先定义好的角色,以便他们不能存取文件或者访问他们不拥有的程序。 这可不是简单的 " chmod 777" 同等物操作。 这在角色, 或他所在的安全上下文已经限制接触的文件和其他的资源的使用者定义中是不同于一般的 Unix 许可权限的,除了在一种比较受约束的流行之外。 带一个用户的.rhosts 文件在一个一般的 Unix 系统上申请。 如果他们使它成为任何人可写入 , 那么任何能登录的人都可以作危险的操作。 在 SE Linux 之下,你能控制其它用户是否有能力改变他们的.rhosts文件, 以及阻止其他的人写入 , 就算拥有者已经使它成为任何人可写入。
一个通常的疑问是 SE Linux 的权限设置如何与标准的 Unix 的权限设置共存。 当你做特定的操作的时候, Unix 权限首先被检查。 如果他们允许你的操作 , 那么然后, SE Linux 将会检查并且允许或拒绝使用者的使用。 但是如果 Unix 许可不让你做某事,在那里的运行的操作被禁止和 SE Linux 检查没关系。
另外的一个例子是,如果有一个设置了SUID的可执行文件,如/usr/bin/passwd 他可以运行命令chmod 666 /etc/shadow,SE Linux 会阻止任何人非法的这样设置文件。
2.2 术语
接下来的术语将在本文当中经常出现, 也是来自SE Linux的基本概念. It is somewhat tricky to define one word without including the other terms so I realise my definitions include things that need defining(译者注:这句实在不敢乱译,sorry。不过不耽误学习;-)) ;)
2.2.1 (身份)identity
在 SE Linux 中,身份的概念不同于传统的Unix uid (user id). 它们可以共存于一个系统, 但却是十分不同的概念。 在SE Linux中的身份是安全上下文的一部分,它会影响哪个域可以进入,也就是本质上的可以被执行。一个SE Linux 的身份(identity)会跟标准的Unix登录名有很相似的文本表示 (大部分情况下它们是这样), 无论如何,了解它们是两个完全不同的概念是很重要的。 运行su 命令不会改变SE Linux中的身份(identity)。(译者注:我在红帽系统中做的实验却不是这样,不过这无所谓,可能红帽系统的策略设置不同,我目前还没来得及研究具体是什么问题,只是猜测。)
举例: 一个无特权用户 faye 运行 id 命令 (在启动SE Linux的情况下) 可以看到用户的安全上下文:
context=faye:user_r:user_t
安全上下文中的身份部分就是 "faye"。 现在, 如果 faye su切换成 root 再运行id, 他将发现安全上下文仍然是:
context=faye:user_r:user_t
身份保持相同, 跟没切换到root时一样。, 不管怎样,如果faye 身份被允许进入sysadm_r 角色并转换成了sysadm_r (这里可以使用newrole -r 命令),再运行id 命令,他将看到:
context=fayeysadm_rysadm_t
身份字段保持一样但是角色和域(第二和第三字段)的字段已经变了。这样保持身份的方式是用户职责所必需的。身份将影响系统决定哪个角色和域可以被什么身份所使用,这将对系统安全期决定性的作用。
2.2.2 域
所有进程都在域中运行。域直接决定了进程的访问。 域基本上是一个进程允许做的操作的列表, 或者说它决定了一个进程可以对哪些类型进行操作。 域就好像一个标准UNIX的uid的概念。 假设一个属于root用户的可执行程序被设置了setuid。 在这个系统上的任何用户,只要可以执行这个程序,它就有可能获得root的权限。这是一个很大的安全漏洞。 再有SE Linux的系统上, 如果一个正在执行的进程想要转换进入特权域执行时,如果这个进程的角色被设置成不允许进入特权与的话, 这个进程就不能执行。
常见的例子是sysadm_t是系统管理域, user_t 是无特权用户域。 Init运行在init_t 域, named 运行在 named_t 域。
2.2.3 类型
类型分配给一个对象并决定谁可以访问这个对象。 它的定义和域基本相同, 不同就是域是对进程的应用而类型是分配给目录,文件,和套接字的。
2.2.4 角色
角色决定了那些域可以使用。 有关哪些与可以被哪些角色使用可以预先定义在策略的配置文件里。如果一个策略数据库中定义了一个角色不可以使用一个域, 它将被拒绝。
例子: 如果允许一个属于 user_t 域 (无特权用户域) 的用户执行passwd 命令, 那么必需在相关的策略配置文件中进行如下设置:
role user_r types user_passwd_t
这样设置了一个属于user_r角色的用户允许进入user_passwd_t域。也就是说他可以执行 passwd 命令。
2.2.5 安全上下文
安全上下文包括了所有事情的属性的描述,包括文件, 目录, 进程, TCP sockets 何以上所有的东西。安全上下文包括了身份,角色和域或者类型。在SE Linux系统上你可以用id 命令来查看你当前用户的安全上下文。
一件很重要的事情是我们需要明白的是域和类型是有区别的, 如果不明白这一点的话,将使你产生困惑。
域是为进程设置的。 当你查看一个进程的安全上下文的时候 (举个例子,你可以查看后面"转换"中的解释), 最后一个字段的设置,例如user_passwd_t 就是这个进程的域(如果你运行了passwd 命令)。
一个像文件,目录,套接字等这样的对象会有一个类型。 当你运行了 ls --context 命令时, 最后一个字段就是类型的设置, 比如 user_home_t 这个类型就是一个有user_r 角色的用户在他的主目录下建立的文件的类型。
总的来说,域是分配给进程的,而类型是分配给除进程外其他对象的。那么在这里会有一个小小的混淆,就是/proc文件系统。我们知道/proc文件系统是虚拟的文件系统。并且里面的以数字命名的目录就是代表了各个进程,数字就是他们的pid。那么这里如果我们用 ls –context 显示/proc目录下的1这个目录,它会显示:
dr-xr-xr-x root root system_uystem_r:init_t 1
那么这个安全上下文中显示的类型为init_t。在这里的含义就是pid为1的这个进程的域也就是init_t 。(译者注:这样的区分不知道能不能说清楚?)
另一个需要说明的是 chsid 命令(改变安全 id) 和 chcon 命令(改变安全上下文) 不能在 /proc 文件系统上使用,就是说 /proc 文件系统不支持这种标记的改变。
文件的安全上下文是会根据创建这个文件的进程的域而改变的。默认情况下,一个文件或者目录的安全上下文是从它们父目录那里继承来的,当然我们可以通过策略的改变来改变这种设置。
例子: faye用户在他的主目录下建立了一个叫做test 的文件。 运行 ls --context test 可以看到 :
-rw-r--r-- faye faye faye bject_r:user_home_t test
他又在 /tmp 下建立了一个叫做tmptest的文件,再次运行ls --context /tmp/tmptest 这次显示的是:
-rw-r--r-- faye faye faye bject_r:user_tmp_t /tmp/tmptest
第一个例子,安全上下文中的类型是 "user_home_t" 这是一个user_r 角色的无特权用户默认的主目录设置。 在第二次运行了ls --context 命令后, 你可以发现类型变成了 user_tmp_t ,这是由于执行建立文件命令的进程的域是user_t, 并且在/tmp下的文件类型要继承 tmp_t 类型。
2.2.6 转换
是否发生转换,主要要根据安全上下文来判断。有两种主要的转换。 第一种, 当你执行了一个被限定了类型的程序时会发生进程域的转换。第二种, 在特殊的目录下创建文件时会发生文件类型的转换。
例子: 对于第二种转换 (文件类型的转换), 参照“安全上下文”部分中的例子。当运行了 ls --context 命令之后你会看到文件被标记成了什么样的类型(也就是上面例子中的 user_home_t 和user_tmp_t)。我们也可以看到当在/tmp下建立一个文件时,新的文件的类型为user_tmp_t。
对于进程域的转换, 请参考以下的例子。 以无特权用户的身份运行ssh, 或者说我们就是运行了一个 user_t 域的进程 (你可以用id命令查看你的安全上下文)。运行 ps ax --context 查看谁在运行 ssh。 假设是用户 faye, 他将看到:
faye:user_r:user_ssh_t
这是显示的一部分。由于可执行程序的类型是 ssh_exec_t 并且我们用户的角色 user_r 允许访问user_ssh_t 域,所以ssh进程就运行在了 user_ssh_t域中。
2.2.7 策略
策略就是可以设置的规则,决定了例如一个角色的用户可以访问什么; 哪个角色可以进入哪个域 and 哪个域可以访问哪个类型等这样的问题。 你可以根据你想要建立的系统的特点来决定设置什么样的策略。
转载地址:http://mm.7zai.com/t/%E5%B9%BF%E ... 91%98/1186519304361 |
|