自 20 世纪 90 年代初期推出以来,Linux 一直是一种多用户系统。 它支持任意数目的用户同时操作。 用户在自己的工作站上启动会话之前必须先登录到系统中。 每个用户都有一个用户名及对应的密码。 设置用户名和密码可以确保未经授权的用户无法查看他们无权查看的文件。 而且,进行这种设置后,通常也不可能对系统进行较大改动(如安装新程序),或者限制普通用户执行此类操作。 只有根用户或超级用户才能不受限制地对系统进行更改并且不受限制地访问所有文件。 有效运用这种概念的用户只在必要时才使用不受限制的根用户权限登录,这样可以减小意外丢失数据的风险。 由于一般情况下只有根用户才能删除系统文件或格式化硬盘,所以来自特洛伊木马的威胁或意外输入破坏性命令的风险得以显著降低。
一般而言,Linux 文件系统中的每个文件都属于某个用户和某个组。 可以为这些专有组和其他所有组授予读、写或执行这些文件的权限。
在这种情况下,可以将组定义为具有特定集合权限的一组相互连接的用户。 例如,可以将共同处理某个项目的组称为 project3 。 Linux 系统中的每个用户都是至少一个专有组(通常是 users)的成员。 可以根据需要设置系统中组的数目,但只有根用户才能添加组。 每个用户都可以使用 groups 命令查出自己所属的组。
文件系统中的权限组织结构不同于文件和目录的组织结构。 使用 ls -l 命令可以显示文件权限信息。 命令输出可能如 例 15.1 “显示文件权限的示例输出” 中所示。
如第三列中所示,此文件属于用户 tux。 该文件被指派给组 project3。 要确定 Roadmap 文件的用户权限,必须仔细检查第一列。
|
- |
rw- |
r-- |
--- |
|
类型 |
用户权限 |
组权限 |
其他用户的权限 |
此列含有一个前置字符,后接九个字符,每三个字符为一组。 这十个字符中的第一个字符代表文件系统组件的类型。 连字符 (–) 表示这是一个文件。 也可以用 d 表示目录、l 表示链接、b 表示块设备,或指明字符设备。
后面的三组字符遵循标准模式。 前三个字符表示该文件可读 (r) 还是不可读 (–)。 中间的 w 表示可以编辑相应的对象,而连字符 (–) 意味着不能写入该文件。 排在第三位的 x 表示可以执行该对象。 由于本例中的文件是不可执行的文本文件,所以不必为这个特定文件授予可执行权限。
在本例中,作为文件 Roadmap 的拥有者,tux 有权读 (r) 写 (w) 该文件,但无法执行它 (x)。 project3 组中的成员可以读取该文件,但不能修改或执行它。 其他用户无权访问此文件。 通过 ACL(Access Control List,访问控制列表)可以指派其他权限。
目录的访问权限类型用 d 来表示。 对目录而言,各种权限的含义稍有不同。
在 例 15.2 “显示目录权限的示例输出” 中,很容易识别出目录 ProjectData 的拥有者 (tux) 和所属组 (project3)。 与 文件访问
中的文件访问权限相比,设置读权限 (r) 表示可以显示该目录的内容。 写权限 (w) 表示可以创建新文件。 执行权限 (x) 表示用户可以转到此目录。 上例中,用户 tux 及组 project3 中的成员可以转到 ProjectData 目录 (x)、查看其中的内容 (r) 并添加或删除文件 (w)。 其他用户的权限则受到限制。 他们可以进入目录 (x) 并浏览其中的内容 (r),但不能插入任何新文件 (w)。
文件或目录的访问权限可以由拥有者更改,当然也可以由 root 用户更改;更改时要使用命令chmod,后接更改权限的参数及一个或多个文件名。 参数可归为四类:
用户相关参数
u(用户)- 文件的拥有者
g(组)- 文件所属的组
o(其他)- 其他用户(如果未指定参数,更改将应用到所有类别)
用于删除 (-)、设置 (=) 或插入 (+) 的字符
缩写
r—读
w—写
x—执行
一个文件名或由空格分隔的多个文件名
例如,在 例 15.2 “显示目录权限的示例输出” 中,如果用户 tux 还想授予其他用户写入 (w) 目录 ProjectData 的权限,则可以使用命令 chmod o+w ProjectData 执行该操作。
不过,如果该用户不希望任何用户具有写权限(其本人除外),则可以输入命令 chmod go-w ProjectData 执行该操作。 要防止所有用户向 ProjectData 添加新文件,请输入 chmod -w ProjectData。 现在,如果不首先重建写许可权,则即使拥有者也无法在目录中创建新文件。
另有一些重要的命令可用来控制文件系统组件的所有权和权限,这些命令包括 chown(更改拥有者)和 chgrp(更改组)。 使用命令 chown 可将文件所有权转让给另一用户。 不过,只有根用户才有权执行该操作。
假定 例 15.2 “显示目录权限的示例输出” 中的文件 Roadmap 不应再属于 tux,而应属于用户 geeko,则根用户应该输入 chown geeko Roadmap。
chgrp 用于更改文件的组所有权。 不过,文件的拥有者必须是新组的成员。 这样,使用命令 chgrp project4 ProjectData,例 15.1 “显示文件权限的示例输出” 中的用户 tux 即可将文件 ProjectData 所属的组改换为 project4,只要该用户是这个新组的成员。