Linux支持的文件系统种类繁多,为用户的数据存储和管理提供了良好的操作和使用界面。在文件系统中,需要考虑文件/目录访问权限管理和控制、加密文件系统等安全机制和问题。本文将详细介绍以确保Linux安全文件系统的技术和方法。
Linux中文件系统类型
随着Linux随着不断发展,其支持的文件格式系统也在迅速扩展。Linux2.6核心正式启动后,包括日志文件系统在内的大量新文件系统出现了Ext4、Ext3、ReiserFS、XFS、JFS以及其他文件系统。Linux系统核心可支持十多种文件系统类型:JFS、ReiserFS、Ext、Ext2、Ext3、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。
比较文件系统的安全性
从自动修复损坏的文件系统来看,ext2、ext3所有损坏的文件系统都可以在启动时自动修复。ext2和ext3默认情况下,文件系统是“文件系统每21次或每180天自动检测一次。从实践的角度来看ext2和ext3自动检测存在风险。有时文件系统在启动后进入单用户模式,并将整个系统“扔”进lost found要恢复系统,必须使用目录fsck修理;当然fsck也有风险;所以对ext2和ext3对于新手来说,使用文件系统确实需要做好准备;毕竟,修复损坏的文件ext2和ext3另外,文件系统有困难;ext2和ext3文件系统对于意外关机和断电,也可能导致文件系统损坏,所以我们在使用过程中,必须是合法关机;比如执行poweroff命令关闭机器。
从文件系统的反删除来看,ext2支持反删除对普通用户来说应该是安全的,但对保密单位来说可能意味着不安全。从反删除的角度解释文件系统的安全性也有两个方面。如果用户从事更机密的工作,请使用它ext3因为ext3文件一旦删除,是不可恢复的,因为反删除可以恢复相应的秘密数据泄露,所以ext3可能更适合机密用户。
新型的Ext4文件系统
Ext4是Linux内核版本2.6.28它是Linux文件系统的革命。在很多方面,Ext4相对于Ext3进步远远超过Ext3相对于Ext2的进步。Ext3相对于Ext2改进主要在于日志,但是Ext4相对于Ext3文件系统的数据结构得到了更深层次的改进和优化。一个高效、优秀、可靠、独特的文件系统诞生了。目前,文件系统还不是所有的Linux发行套件完全普及,仍处于初始测试阶段。
安全设置文件/目录访问权限
Linux系统中的每个文件和目录都有访问许可证,以确定谁可以访问和操作文件和目录。以下是文件/目录访问的方法和命令。
文件或目录的访问权限分为三种:只读、只写和可执行。以文件为例,只读权限表示只允许读取其内容,禁止更改;只写权限允许修改文件;可执行权限表示允许文件作为程序执行。文件创建时,文件所有者自动拥有阅读、写作和执行文件的权限,以便阅读和修改文件。用户还可以根据需要将访问权限设置为所需的任何组合。
有三种不同类型的用户可以访问文件或目录:文件所有者、同组用户和其他用户。所有者通常是文件的创建者。它允许同组用户访问文件,并将文件访问权授予系统中的其他用户。在这种情况下,系统中的每个用户都可以访问用户拥有的文件或目录。
每个文件或目录有三组访问权限,每组有三个表示,即文件所有者的阅读、写作和执行权限;与所有者同组的用户的阅读、写作和执行权限;系统中其他用户的阅读、写作和执行权限(如图1所示)。当使用时ls-l当命令显示文件或目录的详细信息时,最左边的列为文件的访问权限。
横线代表空许可(即表示没有权限)。r代表只读,w代表写,x代表可以执行。注:这里有10个位置。第一个字符指定了文件类型。一般来说,目录也是文件。如果第一个字符是横线,则表示为非目录文件。d,这意味着它是一个目录。每三个字符组成一组,依次表示文件所有者、组用户和其他用户对文件的访问权。
例如:
表示文件sobsrc.tgz访问权限,说明sobsrc.tgz是普通文件;sobsrc.tgz属主有读写权限;与sobsrc.tgz属于主同组的用户只读权限;其他用户只读权限。
在确定文件的访问权限后,用户可以使用它Linux系统提供的chmod命令重新设置不同的访问权限。也可以使用chown命令所有者更改文件或目录。
▲图1.文件/目录访问权限示意图
1、更改文件/目录的访问权限
chmod这是一个非常重要的系统命令,用于改变文件或目录的访问权限。用户可以使用其控制文件或目录的访问权限。
该命令有两种用法。一种是包含字母和操作符表达式的文本设置法;另一种是包含数字的数字设置法。
文字设定法
文字设置法的一般使用形式如下:chmod[who][ |-|=][mode]文件名。其中,操作对象who它可以是以下任何字母或每个字母的组合:
表示“用户(user)”,即文件或目录的所有者。
表示“同组(group)用户”,也就是说,与文件同的组ID所有用户。
表示“其他(others)用户”。
表示“所有(all)用户”。它是系统默认值。
操作符号可以是:
添加一个权限。
取消某限。
赋予给定权限并取消其他所有权限(如有)。
设置mode所表示的权限可以任意组合以下字母:
可读。
可写。
可执行。只有当目标文件可以执行给某些用户或目标文件是目录时,才会添加x属性。
在执行文件时,主或组进程ID该文件的文件属主。“u s”用户设置文件ID位,“g s”设置组ID位。
在交换设备上保存程序文本。
拥有与文件所有者相同的权限。
与文件属于主同组的用户具有相同的权限。
拥有与其他用户相同的权限。
若在命令行中可给出多种权限方式,则用逗号隔开。图2给出了使用该设置方法的例子:
▲图2.chmod使用命令文本设使用示例
首先,设置文件test1属性为:文件属主(u)增加执行权限;与文件属于主同组的用户(g)增加执行权限;其他用户;(o)增加执行权限的命令如下:
然后,设置文件test2属性为:文件属主(u)增加写作权限;与文件属于主同组的用户(g)增加写作权限;其他用户;(o)删除执行权限的命令如下:
最后,对可执行文件test3添加s执行该文件的用户暂时拥有该文件所有者的权限:
#p#
在上述例子中,当其他用户执行时test3在这个程序中,他的身份会因为这个程序而暂时变成这个程序test3程序所有者(因为chmod使用命令s因此,他可以读取选项test3.c文件(虽然文件设置为他人没有任何权限)s功能。特别是在整个系统中root最好不要设置太多这种类型的文件(除非有必要),这样可以保证系统的安全,避免因为某些程序而bug入侵系统。
数字设定法
数字设置法是一种等同于文本设置法功能的设置方法,但比文本设置法更简单。数字表示的属性意味着:0表示无权限,1表示可执行权限,2表示可写权限,4表示可读权限限制,然后加起来。因此,数字属性的格式应该是从0到7的三个八进制数,顺序是(u)、(g)、(o)。其他与文字设置法基本一致。
如果想让某个文件的属主有“读/写”两个权限,4(可读) 2(可写)=6(读/写)。
数字设置法的一般形式如下:chmod[mode]文件名。图3给出使用该数字设定法的例子:
▲图3.chmod命令数字设置法示意
可见图3中设置的文件test1属性为:文件属主(u)有读写权限;与文件属于主同组用户(g)有读书权限;别人(o)并设置有读取权限test2本文件的属性为:文件所有者本人(u)可读/可写/可执行权;与文件主同组(g)可读/可执行权;其他人;(o)没有权限。
2、更改文件/目录的所有权
该命令用于更改文件或目录的属主和属组。root用户将自己的文件复制给用户xu,为了让用户xu本文件可以存取,root本文件的设本文件的主要属xu,否则,用户xu本文件无法存取。
该命令的使用形式为:chown用户或组文件
Chown该功能是将指定文件的所有者改为指定的用户或组。用户可以是用户名或用户名ID。组可以是组名或组名ID。支持通配符的文件列表是一个需要改变权限的文件列表。该命令的选项是:
R:变更指定目录及以下所有子目录和文件的所有者。
v:显示chown命令所做的工作。
图4给出了使用该命令的例子,作者给出了文件test1业主改为super,把目录./test_dir以下所有文件和子目录的所有主要转换为super,属组改成super。
▲图4.chown使用命令示意
3、改变文件的执行权限
通过前面的介绍,我们知道,Linux系统中的每个文件都有一个所有者,表示该文件是由谁创建的。同时,文件中还有一个组号,表示文件所属的组通常是文件所有者所属的组。一般来说,我们也可以通过设置文件的权限来控制相关操作。
在这种情况下,如果是可执行文件,那么在执行时,文件通常只有用户有权调用文件。setuid/setgid可以更改此设置:
setuid:设置使文件在执行阶段具有文件所有者的权限。典型的文件是/usr/bin/passwd。如果一般用户执行该文件,则在执行过程中,该文件可以获得root权限可以更改用户的密码
setgid:该权限仅对目录有效。目录设置在该位置后,任何用户在该目录下创建的文件都有与该目录所属组相同的组。
stickybit:该位可以理解为防删除位。一个文件是否可以被某用户删除,主要取决于该文件所属的组是否对该用户具有写权限。如果没有写权限,则这个目录下的所有文件都不能被删除,同时也不能添加新的文件。如果希望用户能够添加文件但同时不能删除文件。则可以对文件使用stickybit位置。设置位置后,j即使用户对目录有写作权限,也不能删除文件。
在此之前,我们讨论了通过文本设置和数字设置设置文件/目录访问权限的问题。同样,让我们通过这两种方法来介绍如何操作这些标志。操作这些标志的命令与操作文件权限的命令相同,并使用它们chmod命令进行:
文字设定法
chmodu sfilename:为文件filename加上setuid标志。
chmodg sdirname:为目录dirname目录加上setgid标志。
chmodo tfilename:为文件filename加上sticky标志。
数字设定法
标记一般文件,如444、777、644等。如果设置了这些特殊标志,则在这组数字之前添加一组八进制数字。如466、4777等。这组八进制数字的三位意义如下:
setuid位置:如果位置为1,则显示为“S”,则表示设置setuid,它显示在原来的x标志位上;
setgid位置:如果位置为1,则显示为“S”,则表示设置setgid,它显示在原来的x标志位上;
sticky位置:如果位置为1,则显示为“T”,则表示设置sticky,它显示在原来的x标志位上。
设置这些标志后,可以使用ls–l命令来查看。若有这些标志,则将显示在原执行标志的位置。如下所示:
r-srw-r--:表示有setuid标志;
rwxrwsrw-:表示有setgid标志;
rwxrw-rwt:表示有sticky标志。
假如本来在这个位置上有x,这些特殊标志显示为小写字母(s,s,t)。否则,显示为大写字母(S,S,T)。
另外值得读者注意的是,虽然setuid/setgid该机制非常方便实用,但由于执行权限的提高,不可避免地存在许多安全风险和风险,因此作者不同意读者的广泛使用,在实际的系统管理过程中,我们经常需要找到设置这些标志的文件,并检查和清理它们,因此,我们可以使用以下命令来搜索系统中的特殊标志文件:
#p#
使用额外属性保护ext3安全的文件系统
1、ext3中间的额外属性
从Linux的1.1系列内核开始,ext2文件系统开始为文件和目录支持一些额外的标记或属性(attribute)。在2.2和2.4内核系列及其高版本,ext3文件系统支持以下属性的设置和查询(如表1所示):
▲表1.ext3文件系统支持的属性意义
虽然文件系统能够接受并保留指示每个属性的标志,但是这些属性不一定有效,这依赖于内核和各种应用程序的版本。表2显示了Linux每个版本内核支持的属性标志的具体情况,包括:
OK:允许设置此标志并使设置生效;
POK:允许设置此标志,但忽略其值;
——:表示完全忽略了这个标志。
▲表2.Linux各核版本对属性的支持
从上表可以看出,虽然早期的核版本支持安全删除特征,但从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命令
lsattr命令只支持很少的选项,其选项如下:
a:列出目录中的所有文件,包括.开头的文件。
d:列出与文件相同的目录,并显示其内容。
R:列出目录的属性及其内容。
v:列出文件版本(用于网络文件系统)NFS)。
Chattr命令
chattr以下三种方式执行命令:
chattr Sifilename:将同步和不可变属性添加到文件中。
chattr-aifilename:只扩展文件(append-only)去掉属性和不可变属性。
chattr=aiAfilenamet:使文件只有a、i和A属性。
最后,支持每个命令-R用于递归地操作目录及其子目录的选项。
3、ext3属性与文件权限的区别
几乎所有的系统管理员都理解Linux风格文件系统的权限和所有者ls如图5所示:
▲图5.ls显示结果
从ls根据输出结果,这些文件属于用户super,而super用户组是super。用户super本人和super用户组成员是对的test2和test3有权修改文件,而其他用户有权修改文件test1、test2、test3均只有读取文件的权限。图6给出了与图5对比的lsattr命令输出:
▲图6.lsattr显示结果
输出结果显示,test2只能添加,而且test1不得修改文件Linux如果系统中有用户root无法控制文件系统登录的权限root用户和以root任何限制权限运行的过程。Linux如果攻击者通过远程或本地攻击获得类操作系统root权限可能会对系统造成严重损害。ext3文件系统可以作为最后一道防线,最大限度地减少系统的破坏,并保留攻击者的下落。ext3属性是由sys_open()和sys_truncate()系统调用检查和赋予的,不受用户识别号等因素的影响,在任何情况下都是不可修改的(immutable)任何修改属性文件都会失败,无论是否root修改用户。
但另一个问题是,root权限用户可以删除i属性修改文件。这种保护只是为了获得root权力的攻击者只是增加了一点麻烦,系统的安全性并没有从根本上提高。
在2.1在之前的核版本中,有一个安全层(securelevel)特点。使用安全层可以解决上述问题,因为如果系统的安全层大于0,核心将不允许任何文件i修改属性。这些版本的核心是由sysctl命令的"kernel.securelevel"控制变量。如果启动时该变量值设置为1或更大值,则不允许内核具有i属性和a除非国旗移动到单用户状态,否则修改属性文件。然而,由于引入了更灵活的核能特征(kernelcapabilities),以后的内核不再支持安全层。使用内核能力,也可以实现类似的限制。工具lcap用于查询和调整内核能力约束集(kernelcapabilitiesboundingset)。在启动脚本中添加以下命令可以实现i属性和a保护属性文件:
第一个命令删除任何用户(包括超级用户)i修改标志的能力。第二个命令删除任何用户(主要针对超级用户)对块设备的原始访问(rawaccess)能力,防止一些熟练的攻击者直接修改文件系统索引节点immutable域。BTW,当系统启动时,CAP_SYS_RAWIO能力应该直接删除,这个能力是一个非常大的潜在威胁。高明的攻击者获得了超级用户权限之后,通过/dev/kmem设备可以直接修改内核内存。这样可以破坏系统的内核能力约束集(kernelcapabilitiesbounding)。如果没有参数,将列出当前有效的内核支持能力和内核能力。一旦删除了力,只有在系统重新启动并进入单用户模式时才能删除能力限制。
使用chattr
Linux主机直接暴露Internet或者在其他危险的环境中,有很多shell帐户或提供HTTP和FTP安装配置完成后,应使用以下网络服务:
如果帐户很少添加、更改或删除,请删除/home本身设置为immutable属性不会造成任何问题。在许多情况下,整个/usr目录树也应具有不可改变的属性。事实上,除了对/usr目录使用chattr-R ii/usr除了命令,也可以在//etc/fstab文件中使用ro选项,使/usr目录所在的分区仅通过阅读加载。此外,系统日志文件设置为只能添加属性(append-only),会使入侵者无法消除自己的痕迹。当然,如果使用这种安全措施,系统管理员需要修改管理模式。
由于软件管理程序需要添加和删除某些文件和目录,因此在安装和升级软件之前需要删除某些目录和文件immutable和append-only属性。对于Linux一般使用系统rpm管理软件包,用户可以使用以下命令查看要安装或者升级的软件包都有哪些文件:
然后删除相关目录和文件immutable和append-only属性。大多数软件包都需要。rpm下列目录的一个或多个命令被编写
值得注意的是,如果用户需要升级/usr/sbin/someprogram,应该去掉someprogram文件、目录/usr/sbin的immutable属性。#p#
使用加密文件系统(EFS)
下面将详细介绍使用情况dm-crypt创建加密文件系统的方法。与创建加密文件系统的其他方法相比,dm-crypt该系统具有无可比拟的优势:速度更快,易用性更强。此外,它还具有广泛的应用,可以在各种块设备上运行,即使使使用了这些设备RAID和LVM也毫无障碍。dm-crypt该系统具有这些优点的主要原因是该技术是基于它的2.6版本内核的device-mapper以上特征。device-mapper为了方便开发人员实现镜像、快照、级联、加密等处理,设计用于在实际块设备上添加虚拟层。dm-crypt内核密码应用编程界面采用透明加密,兼容cryptloop系统。
1、内核准备
dm-crypt使用内核密码应用程序接口完成密码操作。一般来说,内核通常以模块的形式加载各种加密程序。AES就安全强度而言,即使用来保护绝密数据也足够了。为了确保用户的核心已经加载AES请根据图7所示的命令检查密码模块:
▲图7.检查AES成功加载模块
否则,可以使用modprobe来手工加载AES命令如下:模块:
接下来,用户安装dmsetup软件包含配置device-mapper所需工具如下命令所示:
为检查dmsetup软件包是否建立了设备图像程序,输入以下命令:
然后需要使用以下命令加载dm-crypt内核模块:
dm-crypt加载后,它会使用evice-mapper自动注册。如果再次检查,device-mapper已能识别dm-crypt,并且把crypt添加到可用对象中。执行上述步骤后,用户应能够根据下列命令看到crypt如图8所示:
▲图8.成功展示装载加密设备
这表明系统已经准备好装载加密设备。接下来,让我们先建立一个加密设备。
2、创建加密设备
创建加密设备装载的文件系统有两种选择:一种是建立磁盘图像,然后作为回收设备加载;另一种是使用物理设备。在这种情况下,除了建立和捆绑回收设备外,其他操作过程也相似。
3、建立回送磁盘图像
如果用户没有用于加密的物理设备存储棒或其他磁盘分区)作为替换,您可以使用命令dd建立空磁盘图像,然后装载图像作为回送设备,仍然可以使用。以下是一个例子:
在这里,我们新建了一个大小100MB磁盘图像的名字是virtual.img。它的大小可以改变count的值。
接下来,我们利用losetup命令将图像与回送设备联系起来:
现在,我们已经得到了位于/的虚拟块设备dev/loop0,我们可以像使用其他设备一样使用它。
4、设置块设备
准备好物理块设备(如/dev/hda1),或者虚拟块设备(像前一样建立回送图像,并使用它device-mapper作为加密逻辑卷加载),我们可以配置块设备。
下面我们用cryptsetup建立逻辑卷并与块设备捆绑:
其中,ly_EFS是新逻辑卷的名称。最后一个参数device_name必须是用作加密卷的块设备。因此,如果要使用之前建立的回送图像作为虚拟块设备,应操作以下命令:
无论是物理块设备还是虚拟块设备,程序都需要输入逻辑卷的密码,-y它的功能是让你输入两个密码,以确保它是正确的。这一点非常重要,因为一旦密码错误,您将锁定您的数据,如图9所示:
▲图9.为EFS输入密码#p#
为确认逻辑卷是否已建立,可使用以下命令进行检查:
只要命令列出了逻辑卷,就意味着逻辑卷已经成功建立。但设备号可能因机器而异,如图10所示:
▲图10.显示成功建立的逻辑卷
device-mapper将其虚拟设备装载到/dev/mapper下面,您的虚拟块设备应该是/dev/mapper/ly_EFS,虽然用起来和其它设备没什么区别,但其实是透明加密的。
如同物理设备一样,用户也可以在虚拟设备上创建文件系统:
现在为新的虚拟块设备建立一个装载点,然后将其装载。命令如下所示:
用户可以使用以下命令查看装载后的情况,如图11所示:
▲图11.EFS成功装载后的显示
通过上述步骤后,用户可以看到装载的文件系统。虽然它看起来和其他文件系统一样,但它实际上是写的/mnt/ly_EFS/所有数据在数据写入之前都是通过透明的加密处理写入磁盘,所以从这里读取的数据都是密文。
5、卸载加密设备
卸载加密文件系统和通常的方法没有什么不同:
即使设备已经卸载,也在dm-crypt它仍然被视为虚拟设备。如果不相信,用户可以再次运行如图10所示的命令dmsetupls验证一下,你会发现设备仍然会列出。dm-crypt缓存密码,因此机器上的其他用户可以在不知道密码的情况下重新装载设备。为了避免这种情况,用户必须卸载设备dm-crypt删除中显式设备。具体命令如下:
此后,它将被彻底清除,用户必须再次输入密码才能再次装载。
6、重新装载加密设备
卸载加密设备后,用户可能需要作为普通用户装载。为了简化这项工作,需要/etc/fstab以下内容添加到文件中:
此外,用户还可以为我们建立脚本dm-crypt创建设备和装载卷的方法是用实际设备的名称或文件路径代替/dev/DEVICENAME:
如果用户使用回送设备,用户也可以使用脚本设备,脚本如下:
7、在Linux安装系统时使用EFS
上面介绍了使用情况dm-crypt对于初级用户来说,创建加密文件系统的方法可能有点复杂和难以理解。然后,本节将介绍一种非常简单的使用方法EFS文件系统Fedora10以安装步骤为例,选择相关选项进行安装即可方便使用。
用户可以在空闲空间新建分区,也可以选择某个分区进行编辑,还可以删除某些分区。在图12中,需要选中[加密文件系统]选项,并且,根据系统要求,输入访问EFS所需的密码如图13所示。然后,根据第三章的介绍,系统可以根据系统提示逐步安装。然后,在系统安装成功后,用户有一个安全的加密文件系统,系统要求用户输入图13所示步骤中设置的密码进行安全访问。
▲图12.安装时选择[加密系统(E)]选项
▲图13.输入EFS所需的密码
【编辑推荐】