Username: Password:

用chattr提高Linux ext3文档系统的安全
来源: ChinaUnix博客  作者: 发布时间:2007-01-01 22:17:00

从Linux的1.1系列内核开始,ext2文档系统就开始支持一些针对文档和目录的额外标记或叫作属性(attribute)。在2.2和2.4系列的内 核中,ext3文档系统支持以下属性的配置和查询:
  A
  Atime。告诉系统不要修改对这个文档的最后访问时间。
  S
  Sync。一旦应用程式对这个文档执行了写操作,使系统立即把修改的结果写到磁盘。
  a
  Append Only。系统只允许在这个文档之后追加数据,不允许任何进程覆盖或截断这个文档。假如目录具备这个属性,系统将 只允许在这个目录下建立和修改文档,而不允许删除任何文档。
  i
  Immutable。系统不允许对这个文档进行任何的修改。假如目录具备这个属性,那么任何的进程只能修改目录之下的文档,不允 许建立和删除文档。
  d
  No dump。在进行文档系统备份时,dump程式将忽略这个文档。
  c
  Compress。系统以透明的方式压缩这个文档。从这个文档读取时,返回的是解压之后的数据;而向这个文档中写入数据时,数 据首先被压缩之后,才写入磁盘。
  s
  Secure Delete。让系统在删除这个文档时,使用0填充文档所在的区域。
  u
  Undelete。当一个应用程式请求删除这个文档,系统会保留其数据块以便以后能够恢复删除这个文档。
  但是,虽然文档系统能够接受并保留指示每个属性的标志,但是这些属性不一定有效,这依赖于内核和各种应用程式的版本。下表显示每个版本支持的属性标志:
  * 允许配置这个标志并使配置生效
  i 允许配置这个标志但忽略其值
  - 完全忽略这个标志
  1.0 1.2 2.0 2.2 2.4
  A - - * * *
  S * * * * *
  a - * * * *
  i - * * * *
  d - * * * *
  c i i i i i
  s * * i i i
  u i i i i i
  
  虽然早期的内核版本支持安全删除特征,但是从1.3系列的内核开始,研发者抛弃的对这个特征的实现,因为他似乎只能够提高一点点 的安全性,而糟糕的是他会给不熟悉安全删除继承问题的用户造成安全的假象。
  在对具备A属性的文档进行操作时,A属性能够提高一定的性能。而S属性能够最大限度的保障文档的完整性。
  本文将主要讨论a属性和i属性,因为这两个属性对于提高文档系统的安全性和保障文档系统的完整性有很大的好处。同样,一些开放 源码的BSD系统(如:FreeBSD和OpenBSD),在其UFS或FFS实现中也支持类似的特征。
  2.使用什么命令配置和显示ext3文档系统的属性
  在任何情况下,标准的ls命令都不会一个文档或目录的扩展属性。ext3文档系统工具包中有两个工具--chattr和lsattr,专门用来配置 和查询文档属性。因为ext3是标准的Linux文档系统,因此几乎任何的发布都有e2fsprogs工具包。假如由于某些原因,系统中没有这个 工具,您能够从以下地址下载这个工具包的源代码编译并安装:http://sourceforge.net/projects/e2fsprogs
  lsattr命令只支持很少的选项,其选项如下:
  -a
  列出目录中的任何文档,包括以.开头的文档。
  -d
  以和文档相同的方式列出目录,并显示其包含的内容。
  -R
  以递归的方式列出目录的属性及其内容。
  -v
  列出文档版本(用于网络文档系统NFS)。
  chattr命令能够通过以下三种方式执行:
  chattr +Si test.txt
  给test.txt文档添加同步和不可变属性。
  chattr -ai test.txt
  把文档的只扩展(append-only)属性和不可变属性去掉。
  chattr =aiA test.txt
  使test.txt文档只有a、i和A属性。
  
  最后,每个命令都支持-R选项,用于递归地对目录和其子目录进行操作。
  3.ext3属性和文档权限的区分
  几乎任何的系统管理员都理解UNIX风格文档系统的权限和任何者连同ls命令的显示,例如
  [root@typhoid nixe0n]# ls -al test*
  -rw-rw-r-- 1 nixe0n users 0 Nov 17 17:02 test.conf
  -rw-rw-r-- 1 nixe0n users 0 Nov 17 17:02 test.log
  -rw-rw-r-- 1 nixe0n users 0 Nov 16 19:41 test.txt
  从ls的输出结果看,这些文档属于用户nixe0n,而nixe0n所在的用户组是users。用户nixe0n本人和users用户组的成员尉有具备对文档 的修改权限,而其他的用户只有读取文档的权限。下面是lsattr命令的输出:
输出结果显示,test.log只能被添加,而test.conf文档不准修改。在UNIX系统中,假如一个用户以root的权限登录,文档系统的权限控 制将无法对root用户和以root权限运行的进程进行任何的限制。这样对于UNIX类的操作系统,假如攻击者通过远程或本地攻击获得 root权限将可能对系统造成严重的破坏。而ext2文档系统能够作为最后一道防线,最大限度地减小系统被破坏的程度,并保存攻击者的 行踪。ext2属性是由sys_open()和sys_truncate()等系统调用检查和赋予的,不受用户识别号和其他因素的影响,在任何情况下,对具备 不可修改(immutable)属性的文档的进行任何修改都会失败,不管是否是root用户进行的修改。
但是,更有一个问题是root权限的用户能够通过删除i属性实现对文档的修改。这种防护只但是给获得root权限的攻击者加了一点小麻烦 罢了,系统的安全性并没有根本性的提高。
在2.1之前的内核版本中,存在一个安全层(securelevel)的特征。使用安全层能够解决上述问题,因为假如系统的安全层大于0,内核将 不允许对任何文档的i属性进行修改。这些版本的内核由sysctl命令的"kernel.securelevel"变量进行控制。假如在启动时,这个变量 的值被配置为1或更大的值,内核将不允许对具备i属性和a属性文档进行修改,除非国旗动到单用户状态。
  但是,由于引入了更为灵活的内核能力特征(kernel capabilities),以后的内核不再支持安全层。使用内核能力,也能够实现类似的 限制。工具lcap用来查询和调整内核能力约束集(kernel capabilities bounding set)。在启动脚本中加入以下命令,就能够实现对具备i属 性和a属性文档的保护: lcap CAP_LINUX_IMMUTABLE
lcap CAP_SYS_RAWIO
  第一个命令删除任何用户(包括终极用户)对i标志的修改能力。第二个命令删除任何用户(主要针对终极用户)对块设备的原始访问 (raw access)能力,防止一些技术高超的攻击者直接修改文档系统索引节点的immutable域。BTW,在系统启动时,CAP_SYS_RAWIO能 力应该直接删除,这个能力是个很大的潜在威胁。高明的攻击者获得了终极用户权限之后,通过/dev/kmem设备能够直接修改内核 内存。通过这种方式,能够破坏系统的内核能力约束集(kernel capabilities bounding)。假如没有任何参数,会列出内核支持的能力和目 前生效的内核能力。
  一旦一个内核能力被删除,就只有在系统重新启动,进入到单用户模式才能删除能力限制。
  感兴趣的读者,能够从下面的连接中获得更为周详的能力方面的知识:
LCAP - Linux内核能力约束集编辑器(Linux Kernel Capabilities Bounding Set Editor)
http://pw1.netcom.com/~spoon/lcap/
  4.我们应该使用chattr做什么?
  主机直接暴露在Internet或位于其他危险的环境,有很多shell帐户或提供HTTP和FTP等网络服务,一般应该在安装配置完成后使用 如下命令: chattr -R +i /bin /boot /etc /lib /sbin
chattr -R +i /usr/bin /usr/include /usr/lib /usr/sbin
chattr +a /var/log/messages /var/log/secure (...)
  假如很少对帐户进行添加、变更或删除,把/home本身配置为immutable属性也不会造成什么问题。在很多情况下,整个/usr目录树也 应该具备不可改变属性。实际上,除了对/usr目录使用chattr -R +ii /usr/命令外,还能够在/etc/fstab文档中使用ro选项,使/usr目录所在 的分区以只读的方式加载。另外,把系统日志文档配置为只能添加属性(append-only),将使入侵者无法擦除自己的踪迹。
当然,假如使用这种安全措施,需要系统管理员修改管理方式。
  安装、升级软件
  由于软件管理程式需要加入和删除某些文档和目录,因此在进行软件安装和升级之前需要删除某些目录和文档的immutable和append- only属性。对于Linux系统,我们一般使用rpm管理软件包,您能够使用以下命令查看要安装或升级的软件包都有哪些文档: rpm -qipl foopackage.rpm
  然后曲调有关目录和文档的immutable和append-only属性。大多数软件包需要rpm命令对以下目录的一个或多个进行写操作: /bin
/sbin
/usr/bin
/usr/sbin
/usr/man
/lib
/etc
  注意,假如您需要升级/usr/sbin/someprogram,您应该去掉someprogram文档连同目录/usr/sbin的immutable属性。

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅