学习 Linux,302(混合环境): Linux 文件系统和共享/服务权限

了解 Linux 文件系统中的文件权限

本文旨在帮助系统管理员准备 Linux Professional Institute Certification 考试 LPI-302,了解 Samba 如何与 Linux 文件系统交互以及如何管理权限。

Sean A. Walberg, 高级网络工程师

Sean Walberg 是一位网络工程师,撰写了两本关于网络的图书。他的工作经历跨几个行业,其中包括医疗保健和媒体。



2012 年 2 月 03 日

关于本系列

本系列文章帮助您了解 Linux 系统管理任务。您可以使用本系列文章的资料准备 Linux Professional Institute Certification 级别 3 (LPIC-3) 考试

参见我们的 学习 Linux, 302(混合环境):LPI-302 路线图,查看本系列中各篇文章的介绍和链接。路线图目前仍在更新中,目前反映的最新内容是 LPIC-3 考试的最新目标(2010 年 11 月)。在完成每篇文章之后,我们都会将其添加到路线图中。

在本文中,将了解这些概念:

  • 有效地使用文件和目录的权限控制
  • Samba 与 Linux 文件系统权限交互

本文帮助您准备 Linux Professional Institute (LPI) 的混合环境专业考试(302)的主题 315 下的目标 315.1。该目标的权值为 3。

先决条件

为了最有效地利用本系列中的文章,您应该具备高级 Linux 知识,并需要准备一个 Linux 系统,用它来练习本文介绍的命令。


回顾 Linux 文件权限

Samba 与 Linux 文件系统的集成在很大程度上依赖于 Linux 文件权限的概念。

基本操作

关于选修的 LPI-302 考试

与其他许多认证一样,Linux Professional Institute Certificatio (LPIC) 提供了多个不同级别,每个级别都比前一个级别要求更多知识和经验。LPI-302 考试是 LPIC 3 级中的一个可选专业考试,要求具有高级 Linux 系统管理知识。

要通过 LPIC 3 级 (LPIC-3) 认证,则必须通过两个 1 级考试(101 和 102)、两个 2 级考试(201 和 202),以及 LPIC-3 核心考试(301)。在到达这个级别之后,才能参加一些可选专业考试,比如 LPI-302。

Linux 有一种比较简单的方式来控制对文件的访问。文件有两个所有者:首先是用户,其次是组。权限会分配给用户、组和其他(其他所有人)。

文件权限控制三项基本操作:读、写和执行。读访问控制查看一个文件或目录的内容。写访问允许所有者删除或修改文件,或者在目录中创建新文件。执行访问是运行一个二进制文件或 shell 脚本,或在目录环境下进入一个目录所必需的。

Shell 脚本是文件权限中的一个有趣例子。普通的二进制文件有执行权限但没有读权限,因此用户能运行程序但无法查看其内容。shell 脚本不是这样的:用户必须有对 shell 脚本的读访问,才能读取脚本并执行。有了执行权限后,用户可以使用 ./myscript.sh 等命令运行脚本。

Linux 文件权限以一组八进制数字(以 8 为基数)表示,这称为文件的模式。每个数字都是加密某一组用户的读/写/执行权限。第一个数字对应拥有该文件的用户;第二个数字对应拥有该文件的组;最后一个数字是其他组的权限。有时会看到四位数字的权限。在这种情况下,第一个数字是对文件某些特殊的属性加密,最后三位数字表示用户、组和其他组,和前面一样。

要了解加密的权限,必须借助于二进制。一个八进制数字可以由三个二进制位来表示:

  • 001. 执行位
  • 010. 写位
  • 100. 读位

将这些位加在一起,就得到一个组合的权限。可以读取和执行的文件的二进制位数是 101,八进制是 5。三个二进制位是 111,则八进制是 7。反过来,八进制 6 就是二进制 110,它可以读写但不可执行。

适用于所有三个组,文件模式 644 是拥有此文件的用户有读/写权限,而组和其他所有人有只读权限。组权限优先于其他权限,因此文件模式 604 可以在其他用户读取文件时阻止所有组读取文件。模式 640 能让所有者读写,所有组读取,但其他用户无法进行任何操作。

在命令行中操作文件权限

构建您自己的提要

您可以构建一个自定义 RSS、Atom 或 HTML 提要,以便在我们添加新文章或更新内容时收到通知。请访问 developerWorks RSS 提要。选择 Linux 作为专区,选择 Articles 作为类型,输入 Linux Professional Institute 作为关键字。然后选择您想要的提要类型。

chmod 命令可以更改文件的模式。因此,chmod 700 foo 命令会将 foo 的权限更改为 700,无论之前是什么。

您还可以从命令行设置或清空权限。除了提供八进制权限,还可以用 [ugoa][[+-=][rwx] 格式设置相对权限。第一个字符是 ugoa 中的一个,它们分别表示用户、组、其他所有。还可以选择添加(+)、删除(-)或设置(=)读/写/执行位。

例如,chmod u+x foo 可设置 foo 的执行位,并保持其他位不变。chmod g-rw something 可以移除组的读和写权限。

另一种使用 chmod 的方法是使用 --reference 参数。输入 chmod --reference file1 file2 可以让 file2 的权限与 file1 一样。

要更改文件的所有权,使用 chown 命令。例如,chown sean foo 命令可将 foo 的所有权更改为 sean。只有根用户可以修改文件的所有者。

chgrp 命令可以更改文件的组。普通用户必须属于新的组。

屏蔽

由于文件权限本来就是二进制的,因此可以运用一些二进位算术计算来设置或清除位数。这里可用到的二进制操作有 ORAND。二进制操作可以用真值表来表示,比如 图 1 所示。

图 1. OR 和 AND 的真值表
OR 和 AND 运算符的真值表

如果有一个操作数是 1,OR 操作结果是真(1)。只有两个输入都为假时,结果才为假(0)。AND 运算符相反:两个数都为真,则结果为真;否则结果为假。需要注意的是,这与操作数的顺序无关:A OR BB OR A 一样。

当包含多个二进制数时,会分别计算每个数。即,01 AND 1101。第一个数是 0,因为 0 AND 1 是 0。第二个数是 1,因为 1 AND 1 是 1。为了进一步简化文件权限中的二进制屏蔽,使用 OR 运算符强制设置位数,使用 AND 运算符清除位数。

回到八进制,如果想在任何文件模式为 600 中使用 OR,那么就会对所有用户设置读写位数,无论当前权限是什么。使用 775 进行 AND 操作将会清除其他用户的写权限,因为 5 的二进制是 101,而写权限位是 010。


Samba 如何与文件权限进行交互

与 Samba 服务器的每一个连接都作为单独的进程运行,由连接用户所有。因此,Samba 进程的文件权限与用户直接登录到服务器的权限一样。然后,如果用户通过 Samba 创建文件或目录,该目录将会归此用户所有。如果用户通过 Windows® Explorer 更改文件权限,那么这些权限将会转换为文件模式,就和用户使用 chmod 命令一样。

Samba 有一系列参数来控制在各种情况下如何设置权限。对于处理文件权限的参数,您会看到有一个参数用来设置位数,一个参数清空位数。所有这些参数都可以在共享层使用或全局层使用,从而能影响所有共享对象。与其他全局参数一样,全局行为会在共享层被覆盖。

创建文件和目录

新创建的文件肯定有一组权限。同样,在 Windows Explorer 中通过 New Folder 命令创建的目录必须赋予一个初始模式。这两种情况由不同的 Samba 参数进行处理。

Samba 首先将创建文件的请求转换为文件模式。然后它使用清空位数的 create mask 参数值进行 AND 操作。默认的屏蔽值是 0744,它能有效地移除组和其他用户的写和执行权限。接着,对 force create mode 命令和结果模式进行 OR 操作,设置所需的位数。force create mode 默认值是 000,它不会改变权限。

创建目录的流程与此相同,除了将初始权限与 directory mask 进行 AND 操作,然后与 force directory mode 参数进行 OR 操作。清单 1 提供了一些更改文件和目录创建方式的示例配置。

清单 1. 使用参数更改新文件和目录的权限
[global]
create mask = 770
force create mode = 600
directory mask = 777
force directory mode = 711

[public]
create mask = 777
force create mode = 666

清单 1 中的参数分为两个部分。[global] 部分中有文件和目录的参数。由于 create mask 中最后一位是 0 ,因此文件的其中一些位数会被清空,而其他位数由于对应位是 7 将会得以通过。其结果将会与 600 进行 OR 操作, 以确保用户获取自己文件的读和写权限。

目录的模式会与 777 进行 AND 操作,这会通过所有的权限位,然后与 711 进行 OR 操作,这会赋予所有者读、写和执行权限,其他所有人至少是执行权限。而共享的 public 的限制较为宽松。每个用户至少会获得共享文件的读和写权限。

修改文件和目录权限

如果在 Windows Explorer 中查看文件的安全属性,那么您能看到能够修改可访问您文件的用户。默认情况下,您可以看到表示 Linux 权限的权限,但已映射到 Microsoft® Windows NT® 组中。如果更改了这些权限,那么它们会重新映射到 Linux 文件权限中。另一组参数负责在更改文件权限时而非创建文件时设置和清空位数。

更改文件权限时用到的参数有:

  • security mask 与文件权限进行 AND 操作
  • force security mode 与文件权限进行 OR 操作
  • directory security mask 与目录权限进行 AND 操作
  • force directory security mode 与目录权限进行 OR 操作

模式相关参数总结

表 1 总结了与设置或屏蔽模式位相关的参数,以方便查阅。记住,这些位数要先清空,然后再设置。

表 1. 操作文件模式的 Samba 参数
情景设置位数(OR)清空位数(AND)
文件已创建force create modecreate mask
目录已创建force directory modedirectory mask
客户更改文件的权限force security modesecurity mask
客户更改目录的权限force directory security modedirectory security mask

设置用户和组所有权

之前讨论的所有参数都能修改文件模式,从而改变所有者用户、所有组和其他所有人的读、写和执行权限。默认情况下,文件归创建用户和用户组所有。有时可能还想让其他用户或组拥有文件,比如项目组或一般用户。这在让用户组使用的共享文件中会很有用。

Samba 提供了两个参数 —force userforce group—可将文件的所有者和所有组设置为任何人。可以在全局环境下使用这些参数,但在共享层更加实用。例如,可以用 force group = projecta 配置共享,让所有的文件属于 projecta 组。

force group 参数的另一种形式是在组名前添一个加号(+),比如 force group = +admins。加号不是字面上理解的意思:它是告诉 Samba 只有当用户已经属于一个组,比如次要组时,才把组设置为管理员。不在管理员的用户将继续使用主要组访问新创建的文件。


Samba 文件和目录权限总结

Samba 提供了几个影响文件权限计算方式的参数。这些参数采用八进制屏蔽的形式,与目标权限进行 AND 操作,清空不需要的位数,然后进行 OR 操作设置需要的位。要分别为文件和目录设置位,然后为新的文件和权限修改进行操作,总共有八个不同的参数。最后,您可以设置文件的用户和组获得共享。

虽然 Samba 灵活性非常强,但使用这些特性仍要小心,因为它们很可能与用户的期望相反。

参考资料

学习

讨论

  • 加入 developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Linux
ArticleID=791362
ArticleTitle=学习 Linux,302(混合环境): Linux 文件系统和共享/服务权限
publish-date=02032012