翻译:中国科学技术大学信息安全专业老师 第二部分实践 第六章Unix的安全 现在,我们已经考察了各种独立的安全机制。在真正的实现中,它们是互相依赖的。例如,访问控制和授权必须 协同工作,缺了任何一方,另一方都不能有效地工作。所以,我们现在转入对操作系统提供的安全机制的考察。Unix 是我们的第一个例子,它让我们有机会在一个相当具体的层次上考察安全机制。 目标: 理解一个典型的操作系统提供的安全特性 介绍Unx安全基础 明白一般的安全原则在一个实际系统中是如何实现的 懂得在持续变化的环境中进行安全管理的任务。 6概述 操作系统通过组合诸如识别、验证、访问控制和审计等模块实现统一的安全控制。一旦我们决定提供灵活且特性 多样的安全策略,安全机制就会越来越复杂。在那些环境下,对内核来说,可信计算基础础(TCB)会显得太大。现在 我们在层次模型(图6.1)中,来考察操作系统这个层次所提供的安全控制。 当评价一个操作系统的安全时,下列问题可以指导分析过程 实现了哪些安全特征? 这些安全特征是怎么管理的? 这些安全特征的有效性如何保证? 应用 服务 操作系统 硬件 图6.1操作系统的保护 在大部分操作系统中,有一种一般模式指导安全控制的组织。用户(访问主体)的信息存储在用户帐号中。任何授 予用户的权限(特权, privilege)都可以存储在这个帐号中。识别(身份识别, identification)和验证(身份验证, authentication)检査(鉴定)用户的身份,使系统把用户的权限和用户所启动的进程联系起来。资源(对象(客体, object))舶的许可由系统管理员或者资源的属主设置。在决定是否允许或拒绝访问请求时,操作系统可以参考用户标识 (身份, identity)、用户权限和对象的许可(权限, permission)情况。 安全机制不仅负责防止非授权的行为,还负责检测这些行为。我们必须面对攻击者可能会绕过保护机制这样的事 实。必须采取措施记录用户的行为以便考察安全漏洞(破坏, breaches)或者追踪可能的攻击。所以,操作系统必须 保存并保护好安全相关事件的审计日志(审计索引(踪迹,tai))。 最后,如果运用不得法,再好的操作系统的安全特性也是没有价值的。一个系统必须开始于一个安全的状态,所 第1页共45页创建日期:2003-11
翻译:中国科学技术大学信息安全专业老师 第 1 页 共 45 页 创建日期:2003-11 第二部分 实践 第六章 Unix 的安全 现在,我们已经考察了各种独立的安全机制。在真正的实现中,它们是互相依赖的。例如,访问控制和授权必须 协同工作,缺了任何一方,另一方都不能有效地工作。所以,我们现在转入对操作系统提供的安全机制的考察。Unix 是我们的第一个例子,它让我们有机会在一个相当具体的层次上考察安全机制。 目标: ⚫ 理解一个典型的操作系统提供的安全特性; ⚫ 介绍 Unix 安全基础; ⚫ 明白一般的安全原则在一个实际系统中是如何实现的; ⚫ 懂得在持续变化的环境中进行安全管理的任务。 6.1 概述 操作系统通过组合诸如识别、验证、访问控制和审计等模块实现统一的安全控制。一旦我们决定提供灵活且特性 多样的安全策略,安全机制就会越来越复杂。在那些环境下,对内核来说,可信计算基础础 (TCB)会显得太大。现在 我们在层次模型(图 6.1)中,来考察操作系统这个层次所提供的安全控制。 当评价一个操作系统的安全时,下列问题可以指导分析过程: ⚫ 实现了哪些安全特征? ⚫ 这些安全特征是怎么管理的? ⚫ 这些安全特征的有效性如何保证? 在大部分操作系统中,有一种一般模式指导安全控制的组织。用户(访问主体)的信息存储在用户帐号中。任何授 予用户的权限(特权,privilege)都可以存储在这个帐号中。识别(身份识别,identification)和验证(身份验证, authentication)检查(鉴定)用户的身份,使系统把用户的权限和用户所启动的进程联系起来。资源(对象(客体, object))的许可由系统管理员或者资源的属主设置。在决定是否允许或拒绝访问请求时,操作系统可以参考用户标识 (身份,identity)、用户权限和对象的许可(权限,permission)情况。 安全机制不仅负责防止非授权的行为,还负责检测这些行为。我们必须面对攻击者可能会绕过保护机制这样的事 实。必须采取措施记录用户的行为以便考察安全漏洞(破坏,breaches)或者追踪可能的攻击。所以,操作系统必须 保存并保护好安全相关事件的审计日志(审计索引(踪迹,trail))。 最后,如果运用不得法,再好的操作系统的安全特性也是没有价值的。一个系统必须开始于一个安全的状态,所 应用 服务 操作系统 操作系统内核 硬件 图 6.1 操作系统的保护
翻译:中国科学技术大学信息安全专业老师 以,操作系统的安装和配置是很重要的问题。不当的缺省配置可能成为主要的安全弱点。操作系统是非常复杂且不断 演变的软件系统。所以,总是有可能在新的发行版本中检测到或者引入新的漏洞。警觉的系统管理员必须时常查阅 CERT( Computer Emergency Response Teams,计算机紧急事件响应小组),获得安全忠告,以便和现时的安全发展同 我们已经勾画出一个构建系统安全的框架: 登录和用户帐户 访问控制 审计 ●配置和管理 本章考察Unix系统的安全特性。由于历史原因,Unix显得不够可靠和安全(参见[102]),不过它确实提供了 套安全措施,如果使用得当,还是相当有效的。Unⅸ的版本很多,这些版本之间在技术和安全控制的执行上存在差别。 不过,现在正在尝试对Unⅸx安全进行标准化。 POSIX1003系列的标准定义了Unⅸx系统的通用接口,其中的 POSIX 1003.6就是涉及安全机制的。本章并不是对Un安全的完整的介绍,也不是指导如何建立安全的Unⅸ系统。我们的 介绍限于对Unⅸx安全基础的考察,同时突出可以阐明一般原则的安全特性。我们选择的角度较为接近人机标尺上的 机器端(图62)。 特殊的 普通的 复合的 简单的 集中于用户 集中于数据 用户端 机器端 图62人机标尺上的Unx安全 62Unix安全体系结构 大多数安全操作系统的安全体系结构解释了如何实施安全措施和安全相关数据的保存,而Unx却有一个版本分 分合合的历史。公正地反映了客观情况的是,安全特性并不作为一个原始设计目标,而是在有需求的时候才被加入系 统。随着Unix的发展,新的安全控制被加入,现存的控制机制得到加强。设计者在决定如何实现新的特性时,考虑 得最多的还是尽量避免触动Unⅸx现有的结构。 63登录和用户帐号 Unix通过用户名识别用户,通过口◇进行验证。许多Unx系统中的口令限制在八个字符内。口令由 crypto3)算 法加密,以全零数据块作为初始值,口令作为密钥,用稍做修改的DES算法重复计算25次,得到的密文存放在 etc/passwd文件中。文件中的条目格式如下 user name: encrypted password: user ID: group ID: ID string: home directory: login shell 字段 ID string是用户的全名。serD和 group ID会在稍后介绍。最后两个字段指明了用户的主目录和成功登录后可 用的shel(命令行解释器)。系统的行为在retc/ profile里指明。关于用户特定配置的进一步说明在用户主目录的 profile 文件中定义。用户最后一次登录记录放在/usr/ adm/lastlog中,可以通过 finger命令显示。用cat/ etc/passwd或者less /ec/ passwd显示口令文件时会有如下输出: dieter: RT. QSZE EsxT92: 10026: Dieter Gollman /home/staff/dieter: /usr/local/bin/bash 口令字段为空表示用户不需要在登录时提供口令。口令字段以一个星号开头,表示用户无法登录,因为对明文口令单 向加密不可能出现这样的值,这是禁止一个用户帐号的常用方法 用户可以通过 passwd(1)改变口令。这要求你首先提供旧口令,这是为了防止有人在你暂时离开机器的时候(这 可是个不好的习惯)改变你的口令。因为输入口令时字符不回显,所以你必须两次输入新口令来保证你想输入的和你 实际输入的保持一致。口令改变后,你可以重新登录或者用su(I) set user)命令确认变更 有些面向安全的Unⅸx版本提供进一步的措施来保证口令安全。口令可能被“盐化”( be salted)并保存在一个影子 口令文件中,比如 secure/ete/passwd。避免使用脆弱口令是选择口令时的好习惯,也可以设置口令的无效日期以及控 第2页共45页创建日期:2003-11
翻译:中国科学技术大学信息安全专业老师 第 2 页 共 45 页 创建日期:2003-11 以,操作系统的安装和配置是很重要的问题。不当的缺省配置可能成为主要的安全弱点。操作系统是非常复杂且不断 演变的软件系统。所以,总是有可能在新的发行版本中检测到或者引入新的漏洞。警觉的系统管理员必须时常查阅 CERT(Computer Emergency Response Teams,计算机紧急事件响应小组),获得安全忠告,以便和现时的安全发展同 步。 我们已经勾画出一个构建系统安全的框架: ⚫ 登录和用户帐户 ⚫ 访问控制 ⚫ 审计 ⚫ 配置和管理 本章考察 Unix 系统的安全特性。由于历史原因,Unix 显得不够可靠和安全(参见[102]),不过它确实提供了一 套安全措施,如果使用得当,还是相当有效的。Unix 的版本很多,这些版本之间在技术和安全控制的执行上存在差别。 不过,现在正在尝试对 Unix 安全进行标准化。POSIX 1003 系列的标准定义了 Unix 系统的通用接口,其中的 POSIX 1003.6 就是涉及安全机制的。本章并不是对 Unix 安全的完整的介绍,也不是指导如何建立安全的 Unix 系统。我们的 介绍限于对 Unix 安全基础的考察,同时突出可以阐明一般原则的安全特性。我们选择的角度较为接近人机标尺上的 机器端(图 6.2)。 特殊的 普通的 复合的 简单的 集中于用户 集中于数据 用户端 机器端 图 6.2 人机标尺上的 Unix 安全 6.2 Unix 安全体系结构 大多数安全操作系统的安全体系结构解释了如何实施安全措施和安全相关数据的保存,而 Unix 却有一个版本分 分合合的历史。公正地反映了客观情况的是,安全特性并不作为一个原始设计目标,而是在有需求的时候才被加入系 统。随着 Unix 的发展,新的安全控制被加入,现存的控制机制得到加强。设计者在决定如何实现新的特性时,考虑 得最多的还是尽量避免触动 Unix 现有的结构。 6.3 登录和用户帐号 Unix 通过用户名识别用户,通过口令进行验证。许多 Unix 系统中的口令限制在八个字符内。口令由 crypt(3)算 法加密,以全零数据块作为初始值,口令作为密钥,用稍做修改的 DES 算法重复计算 25 次,得到的密文存放在 /etc/passwd 文件中。文件中的条目格式如下: user name: encrypted password: user ID: group ID: ID string: home directory: login shell 字段 ID string 是用户的全名。user ID 和 group ID 会在稍后介绍。最后两个字段指明了用户的主目录和成功登录后可 用的 shell(命令行解释器)。系统的行为在/etc/profile 里指明。关于用户特定配置的进一步说明在用户主目录的.profile 文件中定义。用户最后一次登录记录放在/usr/adm/lastlog 中,可以通过 finger 命令显示。用 cat /etc/passwd 或者 less / etc/passwd 显示口令文件时会有如下输出: dieter:RT.QsZEEsxT92:10026:Dieter Gollman:/home/staff/dieter:/usr/local/bin/bash 口令字段为空表示用户不需要在登录时提供口令。口令字段以一个星号开头,表示用户无法登录,因为对明文口令单 向加密不可能出现这样的值,这是禁止一个用户帐号的常用方法。 用户可以通过 passwd(1)改变口令。这要求你首先提供旧口令,这是为了防止有人在你暂时离开机器的时候(这 可是个不好的习惯)改变你的口令。因为输入口令时字符不回显,所以你必须两次输入新口令来保证你想输入的和你 实际输入的保持一致。口令改变后,你可以重新登录或者用 su(1)(set user)命令确认变更。 有些面向安全的 Unix 版本提供进一步的措施来保证口令安全。口令可能被“盐化”(be salted)并保存在一个影子 口令文件中,比如/.secure/etc/passwd。避免使用脆弱口令是选择口令时的好习惯,也可以设置口令的无效日期以及控
翻译:中国科学技术大学信息安全专业老师 制旧口令的重用。以超级用户Root身份登录可被限制在! ete/ttys中指定的终端上进行。第三方Unix安全产品提供类 似的安全服务 631用户和超级用户 Unix用一个用户名代表用户,用户名最多有8个字符,内部表示为一个16位的数字,即用户 IDqUID)。UID和 用户名通过 /etc/passwd映射。Unix不区分拥有相同UID的用户。一些UID有特殊的意义,如图63所示 root daemon uucp games audit 图63特殊的用户ID 每个Unⅸ系统中都有一个特权用户,这个超级用户的UD为0,用户名通常为root。这个根帐号被操作系统用 来执行基本的任务,比如登录、记录审计信息或者访问LAO设备等。几乎所有的安全检查都对超级用户关闭,在执行 某些系统管理任务时根帐号也是必要的。系统管理员不应该把根帐号当成他的个人帐号。需要使用超级用户时可以通 过不指定用户名的/ ete/su命令变普通帐号为根帐号 超级用户几乎可以做任何事情。例如超级用户可以变为任何别的用户,可以改变系统时钟,可以绕过施加于他的 某些限制。例如,以只读模式挂上的文件系统本来是不能写的,超级用户却可以通过先卸下该文件系统再以可写模式 重新挂上它来绕过写的限制。不过超级用户不能解开口令,因为 crypt是单向函数。 超级用户如此强大,因此它也成为Unⅸ的一个主要弱点。处于超级用户状态的攻击者实际上接管了整个系统, 必须采取每一个可能的防范措施来控制普通用户获得超级用户状态。文件/etc/ passwd和/ etc/group必须有写保护。有 编辑/ etc/passwd文件能力的攻击者通过把UID变为0就可以成为超级用户。使用/ bin/su将普通用户改变为超级用户 则避免了让操作系统调用其他什么人的目录中的s。把所有su的调用试图连同调用者都记载在审计日志中。分散系 统管理者的工作职责,例如让uucp或者 daemon处理网络事务。特殊帐号中的一个出现问题不会造成全盘的损害。 6.32属组 用户隶属于一个或多个组。以组的方式来组织用户提供了访问控制决策的方便的基础。例如,把可以访问e-mail 的所有用户放进mai组,把可以进行所有操作的用户放进 operator组。每个用户都属于一个基本组 (primary group) primary组的标识符ID(GID)存储在 etc/passwd中。文件 etc/group包括了属组的列表。其中的表项格式如下 group name: group password: GID: list of users 例如,表项 infosecwww:*: 209: chez, af 告诉我们 infosecwww组没有口令,GID为209,并且有两个成员chez和af。图64列出了有特殊意义的组ID 在 System V Unix上,一个用户在一个时刻只能属于一个组。可以用 newer命令修改当前属组。用户可自由改 到他已为成员的组。否则,当用户试图改到一个他不是成员的属组时, newer会要求用户提供一个口令,如果组口 令正确,用户就会被收纳成为此组的暂时成员。在 Berkley Unix中,用户可以同时属于多个组,所以 newer命令是 不必要的 svstem/whee daemon men 7 terminal 图64有特殊意义的组ID 第3页共45页创建日期:2003-11
翻译:中国科学技术大学信息安全专业老师 第 3 页 共 45 页 创建日期:2003-11 制旧口令的重用。以超级用户 Root 身份登录可被限制在/etc/ttys 中指定的终端上进行。第三方 Unix 安全产品提供类 似的安全服务。 6.3.1 用户和超级用户 Unix 用一个用户名代表用户,用户名最多有 8 个字符,内部表示为一个 16 位的数字,即用户 ID(UID)。UID 和 用户名通过/etc/passwd 映射。Unix 不区分拥有相同 UID 的用户。一些 UID 有特殊的意义,如图 6.3 所示。 -2 nobody 0 root 1 daemon 2 uucp 3 bin 4 games 9 audit 图 6.3 特殊的用户 ID 每个 Unix 系统中都有一个特权用户,这个超级用户的 UID 为 0,用户名通常为 root。这个根帐号被操作系统用 来执行基本的任务,比如登录、记录审计信息或者访问 I/O 设备等。几乎所有的安全检查都对超级用户关闭,在执行 某些系统管理任务时根帐号也是必要的。系统管理员不应该把根帐号当成他的个人帐号。需要使用超级用户时可以通 过不指定用户名的/etc/su 命令变普通帐号为根帐号。 超级用户几乎可以做任何事情。例如超级用户可以变为任何别的用户,可以改变系统时钟,可以绕过施加于他的 某些限制。例如,以只读模式挂上的文件系统本来是不能写的,超级用户却可以通过先卸下该文件系统再以可写模式 重新挂上它来绕过写的限制。不过超级用户不能解开口令,因为 crypt 是单向函数。 超级用户如此强大,因此它也成为 Unix 的一个主要弱点。处于超级用户状态的攻击者实际上接管了整个系统, 必须采取每一个可能的防范措施来控制普通用户获得超级用户状态。文件/etc/passwd 和/etc/group 必须有写保护。有 编辑/etc/passwd 文件能力的攻击者通过把 UID 变为 0 就可以成为超级用户。使用/bin/su 将普通用户改变为超级用户 则避免了让操作系统调用其他什么人的目录中的 su。把所有 su 的调用试图连同调用者都记载在审计日志中。分散系 统管理者的工作职责,例如让 uucp 或者 daemon 处理网络事务。特殊帐号中的一个出现问题不会造成全盘的损害。 6.3.2 属组 用户隶属于一个或多个组。以组的方式来组织用户提供了访问控制决策的方便的基础。例如,把可以访问 e-mail 的所有用户放进 mail 组,把可以进行所有操作的用户放进 operator 组。每个用户都属于一个基本组(primary group)。 primary 组的标识符 ID(GID)存储在/etc/passwd 中。文件/etc/group 包括了属组的列表。其中的表项格式如下: group name: group password: GID: list of users 例如,表项 infosecwww: *: 209: chez,af 告诉我们 infosecwww 组没有口令,GID 为 209,并且有两个成员 chez 和 af。图 6.4 列出了有特殊意义的组 ID。 在 System V Unix 上,一个用户在一个时刻只能属于一个组。可以用 newgrp 命令修改当前属组。用户可自由改 到他已为成员的组。否则,当用户试图改到一个他不是成员的属组时,newgrp 会要求用户提供一个口令,如果组口 令正确,用户就会被收纳成为此组的暂时成员。在 Berkley Unix 中,用户可以同时属于多个组,所以 newgrp 命令是 不必要的。 0 system/wheel 1 daemon 2 uucp 3 men 4 bin 7 terminal 图 6.4 有特殊意义的组 ID
翻译:中国科学技术大学信息安全专业老师 633设置UID和GID 让我们回到我们最感兴趣的一个话题:调用控制。在执行某些系统调用时Unⅸx要求超级用户特权,但又不 能给普通用户以超级用户状态。所以必须找到满足这两个要求的方法。Uniⅸx采用的方法是提供设置用户标识符 SUID和设置组标识符SGID程序。这样的程序以属主或者属组的有效UID和有效GID运行,拥有暂时的或者 受限的访问权限,这些访问权限通常情况下是不赋予普通用户的。经常有这样的情况,如果root是SUID程序 的属主,这时运行这个程序的用户就会获得执行中的超级用户状态。重要的SUD程序有: /bin/passwd 改变口令 /bin/login 登录程序 /bin/at 提交批处理作业 /bin/su 改变UID程序 在这里我们照例要提出警告,既然用户拥有了运行时的SUID程序属主的特权,我们只应该让这个程序做其属主 打算做的事情。这一点对于属主是root的SUD程序尤其重要。一个可以改变SUID程序执行行为的攻击者,比如可 以中断程序执行的攻击者,不仅可以在攻击时获得超级用户权限,还可以改变系统使其在别的情况下同样具有这样的 权限。这方面的危险发生在有用户交互的SUID程序中。一个特别的漏洞是” shell escapes”,它使用户能以超级用户权 限运行 shell命令。除非实在必要,程序不应该被设置SUD。系统管理员应该注意监视SUD程序的完整性。参考文 献55给出了两个SUID程序被用作成功攻击的研究实例 64访问控制 访问控制是基于用户属性和资源(亦即文件、IO设备、内存等)属性之上的。标准的Unix系统以属主( owner)、属 组( group)、其他人( world)三个粒度进行控制。超级用户不受这种访问控制的限制。Unx以统一的方式处理所有的资源 它并不区分文件和设备 64.1Unix文件结构 Unⅸx以树型结构组织文件系统,这个系统包括文件和目录。目录里的每个文件条目是一个指针,指向一个叫做 i-结点(inde)的数据结构。图65给出了结点中与访问控制有关的字段。每个目录有一个指向自身的文件“”,还有 个指向它的父目录的文件“”。每个文件有一个属主,通常这个属主是建立文件的用户。每个文件都属于某个组。新 建文件有可能属于它的建立者的属组,也有可能属于它的目录的属组,取决于不同的Unix版本。 在讨论i-结点中的字段之前,我们先用ls-来考察一个目录,结果如下 rw-r--r-- 1 dieter staff 1617 Oct 2811: 01 adcryptex drwx-----. 2 dieter staff 512 Oct 2517: 44 ads/ 分析一下得到的信息: 第一个字符给出了文件的类型。“”表示是一个常规文件,“d”表示是一个目录,“b”代表一个块设备文件,而 “c”代表一个字符设备文件 接下来的九个字符给出了文件的许可位,下面还要讨论 后面的数字字段是链接计数器,它给出了链接到这个文件上的链接(指针)数目 接下来的两个字段是文件属主和属组的名字; 然后是文件的字节大小 接下来的时间和日期是 mtime,即最后修改的时间。ls-lu显示 atime,即最后访问的时间,ls-显示 itime 即最后对i-结点进行修改的时间 最后一个字段是文件的名字。ads后面的”表示是一个目录。 文件类型和访问权限 文件属主 d 文件属组 文件的最后访问时间 mtime 文件的最后修改时间 Itime 结点的最后修改时间 block count文件大小 物理位置 图6.5i结点中的精选字段 第4页共45页创建日期:2003-11
翻译:中国科学技术大学信息安全专业老师 第 4 页 共 45 页 创建日期:2003-11 6.3.3 设置 UID 和 GID 让我们回到我们最感兴趣的一个话题:调用控制。在执行某些系统调用时 Unix 要求超级用户特权,但又不 能给普通用户以超级用户状态。所以必须找到满足这两个要求的方法。Unix 采用的方法是提供设置用户标识符 SUID 和设置组标识符 SGID 程序。这样的程序以属主或者属组的有效 UID 和有效 GID 运行,拥有暂时的或者 受限的访问权限,这些访问权限通常情况下是不赋予普通用户的。经常有这样的情况,如果 root 是 SUID 程序 的属主,这时运行这个程序的用户就会获得执行中的超级用户状态。重要的 SUID 程序有: /bin/passwd 改变口令 /bin/login 登录程序 /bin/at 提交批处理作业 /bin/su 改变 UID 程序 在这里我们照例要提出警告,既然用户拥有了运行时的 SUID 程序属主的特权,我们只应该让这个程序做其属主 打算做的事情。这一点对于属主是 root 的 SUID 程序尤其重要。一个可以改变 SUID 程序执行行为的攻击者,比如可 以中断程序执行的攻击者,不仅可以在攻击时获得超级用户权限,还可以改变系统使其在别的情况下同样具有这样的 权限。这方面的危险发生在有用户交互的 SUID 程序中。一个特别的漏洞是”shell escapes”,它使用户能以超级用户权 限运行 shell 命令。除非实在必要,程序不应该被设置 SUID。系统管理员应该注意监视 SUID 程序的完整性。参考文 献 55 给出了两个 SUID 程序被用作成功攻击的研究实例。 6.4 访问控制 访问控制是基于用户属性和资源(亦即文件、I/O 设备、内存等)属性之上的。标准的 Unix 系统以属主(owner)、属 组(group)、其他人(world)三个粒度进行控制。超级用户不受这种访问控制的限制。Unix 以统一的方式处理所有的资源, 它并不区分文件和设备。 6.4.1 Unix 文件结构 Unix 以树型结构组织文件系统,这个系统包括文件和目录。目录里的每个文件条目是一个指针,指向一个叫做 i-结点(inode)的数据结构。图 6.5 给出了 i-结点中与访问控制有关的字段。每个目录有一个指向自身的文件“.”,还有一 个指向它的父目录的文件“..”。每个文件有一个属主,通常这个属主是建立文件的用户。每个文件都属于某个组。新 建文件有可能属于它的建立者的属组,也有可能属于它的目录的属组,取决于不同的 Unix 版本。 在讨论 i-结点中的字段之前,我们先用 ls –l 来考察一个目录,结果如下: -rw-r--r-- 1 dieter staff 1617 Oct 28 11:01 adcryp.tex drwx------ 2 dieter staff 512 Oct 25 17:44 ads/ 分析一下得到的信息: ⚫ 第一个字符给出了文件的类型。“-”表示是一个常规文件,“d”表示是一个目录,“b”代表一个块设备文件,而 “c”代表一个字符设备文件; ⚫ 接下来的九个字符给出了文件的许可位,下面还要讨论; ⚫ 后面的数字字段是链接计数器,它给出了链接到这个文件上的链接(指针)数目; ⚫ 接下来的两个字段是文件属主和属组的名字; ⚫ 然后是文件的字节大小; ⚫ 接下来的时间和日期是 mtime,即最后修改的时间。ls –lu 显示 atime,即最后访问的时间,ls –lc 显示 itime, 即最后对 i-结点进行修改的时间; ⚫ 最后一个字段是文件的名字。ads 后面的”/”表示是一个目录。 mode 文件类型和访问权限 uid 文件属主 gid 文件属组 atime 文件的最后访问时间 mtime 文件的最后修改时间 itime i-结点的最后修改时间 block count 文件大小 物理位置 图 6.5 i-结点中的精选字段
翻译:中国科学技术大学信息安全专业老师 文件访问许可位分为三组,分别定义了属主、属组和其他人的读、写和执行的权限。“表示权限没有被授予。所 以rwr-r-表示属主有读写权,属组和其他人有读权。rwx--表示属主有读写和执行的权力,属组和其他人没有任 何权利。 用ls-显示一个SUID程序的时候,属主的执行位用s,而不是用x表示: rws--X--3 root bin 16384 Nov 16 1996 passwd* 用ls-显示一个SGID程序的时候,属组的执行位用s,而不是用x表示 许可位以下面的次序检验: 如果你的uid指出你是文件的属主,那么属主许可位决定了你可否访问 如果你的ud表明你不是文件的属主,但是你的gid指出你的属组拥有这个文件,那么属组许可位决定了你可否 访问; 如果你既不是文件的属主,也不是拥有文件的属组的成员,那么其他人许可位决定了你可否访问。 所以,设置许可位让文件的属主比其他用户拥有更少的权力是可能的。也许这样不太合乎常理,但是却是相 当有价值的想法。不管是哪一种访问控制机制,你必须精确地知道不同的访间标准的校验次序 642改变许可 文件的许可位可以用 chmod命令修改,这个修改的执行者只能是文件的属主或者超级用户。这个命令有如下的 格式 hmod [] absolute file 指定所有许可位的值 chmod|- RI whol+ permission file添加许可 chmod|- RI whol- permission file删除许可 chmod- RI whol= permission file重置许可 在绝对模式中,文件许可由一个八进制数直接指定。这些数字的意义如图66所示。例如,许可rwr--用 chmod644 设置。对所有人授予所有权力用 chmod777设置。 40投子用户1执行权(见下文 2000授予组ID执行权(见下文) 1000设置粘住位(见下文) 0400属主有读权 0200属主有写权 0100属主有执行权 0040属组有读权 000属组有写权 0010属组有执行权 0004其他人有读权 002其他人有写权 001其他人有执行权 图6.6访问许可的八进制表示 在符号模式下,当前文件许可位被修改。参数who可以用以下值带入 改变属主许可 g改变属组许可 改变其他人许可 a改变所有人许可 permission参数可以用以下值带入 r读许可 第5页共45页创建日期:2003-11
翻译:中国科学技术大学信息安全专业老师 第 5 页 共 45 页 创建日期:2003-11 文件访问许可位分为三组,分别定义了属主、属组和其他人的读、写和执行的权限。“-”表示权限没有被授予。所 以 rw-r--r--表示属主有读写权,属组和其他人有读权。rwx------表示属主有读写和执行的权力,属组和其他人没有任 何权利。 用 ls –l 显示一个 SUID 程序的时候,属主的执行位用 s,而不是用 x 表示: -rws--x--3 root bin 16384 Nov 16 1996 passwd* 用 ls –l 显示一个 SGID 程序的时候,属组的执行位用 s,而不是用 x 表示: 许可位以下面的次序检验: ⚫ 如果你的 uid 指出你是文件的属主,那么属主许可位决定了你可否访问; ⚫ 如果你的 uid 表明你不是文件的属主,但是你的 gid 指出你的属组拥有这个文件,那么属组许可位决定了你可否 访问; ⚫ 如果你既不是文件的属主,也不是拥有文件的属组的成员,那么其他人许可位决定了你可否访问。 所以,设置许可位让文件的属主比其他用户拥有更少的权力是可能的。也许这样不太合乎常理,但是却是相 当有价值的想法。不管是哪一种访问控制机制,你必须精确地知道不同的访问标准的校验次序。 6.4.2 改变许可 文件的许可位可以用 chmod 命令修改,这个修改的执行者只能是文件的属主或者超级用户。这个命令有如下的 格式: chmod [-fR] absolute file 指定所有许可位的值 chmod [-fR] [who] +permission file 添加许可 chmod [-fR] [who] - permission file 删除许可 chmod [-fR] [who] = permission file 重置许可 在绝对模式中,文件许可由一个八进制数直接指定。这些数字的意义如图 6.6 所示。例如,许可 rw-r--r--用 chmod 644 设置。对所有人授予所有权力用 chmod 777 设置。 4000 授予用户 ID 执行权(见下文) 2000 授予组 ID 执行权(见下文) 1000 设置粘住位(见下文) 0400 属主有读权 0200 属主有写权 0100 属主有执行权 0040 属组有读权 0020 属组有写权 0010 属组有执行权 0004 其他人有读权 0002 其他人有写权 0001 其他人有执行权 图 6.6 访问许可的八进制表示 在符号模式下,当前文件许可位被修改。参数 who 可以用以下值带入: u 改变属主许可 g 改变属组许可 o 改变其他人许可 a 改变所有人许可 permission 参数可以用以下值带入: r 读许可