设为首页收藏本站language 语言切换
查看: 1799|回复: 6
收起左侧

[分享] 运维基础中ext3属性

[复制链接]
发表于 2021-9-26 00:05:20 | 显示全部楼层 |阅读模式
运维基础中ext3属性

ext3属性是啥?
从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实现中也支持类似的特征。

使用啥命令设置和显示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选项,用于递归地对目录和其子目录进行操作。

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命令的输出:

[root@typhoid nixe0n]# lsattr -a test*
---i-------- test.conf
----a------- test.log
------------ test.txt

输出结果显示,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 capabilitiesbounding)。
如果没有任何参数,会列出内核支持的能力和目前生效的内核能力。

一旦一个内核能力被删除,就只有在系统重新启动,进入到单用户模式才能删除能力限制。
-end-
加我 领取更多的学习资料.png
我是老杨,一个从事网工行业8年的中年吃货
关注我,和你每天聊几句关于网工的那些事儿

 楼主| 发表于 2021-10-8 12:33:45 | 显示全部楼层
有问题加我微信spotoa
5# 2021-10-8 12:33:45 回复 收起回复
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-20 19:06:27 | 显示全部楼层
1111111111111111111111
6# 2021-10-20 19:06:27 回复 收起回复
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-26 21:46 , Processed in 0.072731 second(s), 26 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表