linux 权限_Linux权限简介 (译)

Linux permissions 101

https://opensource.com/article/19/8/linux-permissions-101#comments

作者:Alex Juarez

时间:2019-08-01

知道如何控制用户对文件的访问是一项基本的系统管理技能。 Knowing how to control users' access to files is a fundamental system administration skill. a0ac0a40dfe4cd4f9b148476a4dccbf5.png 图片来源:网络档案图书图片。由 Opensource.com修改。抄送BY-SA 4.0 了解 Linux 权限以及如何控制哪些用户可以访问文件是系统管理的基本技能。 本文将介绍标准的 Linux 文件系统权限,深入研究特殊权限,最后解释使用 umask 的默认权限。

1.了解ls命令输出

在讨论如何修改权限之前,我们需要知道如何查看权限。带有长列表参数( -l )的 ls 命令提供了有关文件的许多信息。 c45042b70a3d4956bd35ffc42fe06c83.png                        为了理解该命令输出结果表示的含义,我们把有关权限部分分解为几个节,单独分析每一节更加容易。 查看上面输出中最后一行的每一节: 84a8a20fcb304dd8ed1567c7df050be3.png
第1节第2节第3节第4节第5节第6节第7节
drwxrwxrwx.rootroot
第 1 节(最左边)表示文件的类型。 11a59be60c01c38b7e6538bd68d72a1b.png ls 的 info 页面包含不同文件类型的完整列表。 每个文件有三种访问模式:
  • 用户主
  • 组群
  • 其他用户
第 2 、 3 和 4 节指的是用户主、组群和其他用户的权限。每节可以包括 r (读)、 w (写)和 x (可执行)权限的组合。 每个权限还分配了一个数值,这在讨论权限的八进制表示时非常重要。 cf0a2eeadb7d4b419c3cc613111e5e0d.png 第 5 节说明任何可选的访问方法,如 SELinux 或文件访问控制列表( FACL )。 a82fc28d48d149eaa9080559edc7e0b4.png 第 6 节和第 7 节分别是用户主和组群的名称。

2.使用chownchmod命令

2.1 chown命令

chown (更改所有者)命令用于更改文件的用户主和组群的所有权。 要将文件 foo 的用户和组群的所有权都更改为 root ,可以使用以下命令: 89d87796d73f6c6f4f9a5633d0b81dc3.png 运行该命令时,若在用户名后跟冒号(:)即可同时设置用户主和组群的所有权。(上面两条命令的执行是等价的) 若仅将文件 foo 的用户主所有权设置为根用户,则执行下列命令: 3d343dad4e5964547f1dfaad99d86c90.png 若仅更改文件 foo 的组群所有权,请在组群名前面加一个冒号 (:) 。 397f11ee4187b82dc3554c1556034013.png

2.2 chmod命令

chmod (更改模式)命令控制用户主、组群和其他用户的文件权限。其他用户是指,既不是该文件的所有者,也不是与该文件关联的组群的成员。 chmod 命令可以使用八进制(如 755 、 644 等)和符号格式(如 u+rwx 、 g-rwx 、 o=rw )设置权限。 八进制表示法设定 4 个 “ 点 ” 为 “ 读 ” , 2 个 “ 点 ” 为 “ 写 ” , 1 个点为 “ 执行 ” 。如果要给用户主分配 “ 读 ” 权限,则在第一个位置设置 4 ,但是如果想增加 “ 写 ” 权限,则必须加 2 。如果想增加 “ 执行 ” ,则要加 1 。我们对每种权限类型(用户主、组群和其他)执行此操作。 例如,如果我们要给文件的所有者以读、写和执行的权限,给组群和其他用户可读、可执行权限,则用八进制格式表示为 755 。这是用户主的所有权限位: 4+2+1=7 ,群组和其他用户只有 4 和 1 的权限,即 4+1=5 。 细分为: 4+2+1=7 ; 4+1=5 ;和 4+1=5 。 如果我们想给文件的所有者分配读和写的权限,给组群和其他用户只读权限,我们可以使用如下所示 chmod 命令。 9cdea81dc33ff698a9dfbbb9b8b8207e.png 在下面的例子中,我们在不同的分组中使用符号表示法。注意字母 u 、 g 和 o 分别表示用户主、组群和其他用户。我们将 u 、 g 和 o 与 + 、 - 或 = 结合使用来添加、删除或设置权限位。 给用户主增加可执行权限。 6946afffe0ef76e908c7017f365602a4.png 从组群权限中删除读、写和执行权限。 01b2392dfd7bf391a4880f6346377c64.png 给其他用户设置读写权限。 d36093c42936d63d9d44a532b4b18efe.png

3.特殊位:Set UIDSet GIDsticky

除了标准权限之外,还有一些特殊权限位具有一定使用价值。

3.1 设置用户ID(suid)

当某个文件设置了 suid 权限时,该文件将以文件的所有者身份来执行,而非以用户身份运行文件。一个很好的例子就是 passwd 命令,它需要设置 suid 位,以便用户使用 root 权限更改密码。 6623718ce1cd5c11f78bc22b603826b5.png  

设置suid位的示例如下:

7568d08bf6e1afe13013f20f90d81e04.png 译者注:在为文件设置SUID权限时,该文件必须是二进制可执行程序,即必须具有x权限,否则s权限无法生效,因为chmod命令不进行完整性检查,即使文件不具有x权限也可以设置为s权限。当我们用“ ls –l”命令查看时,若看到文件的权限为“rwS”时,则说明s权限未生效。 另外,SUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效。

3.2 设置组ID(sgid)

sgid位与suid位类似,用户执行命令是以目录的组群所有权身份完成的,而非用户身份执行命令。 使用 sgid 的一个例子是,如果多个用户在同一个目录中工作,并且在该目录中创建的每个文件都需要具有相同的组权限。下面的示例创建名为 collab_dir 的目录,设置 sgid 位,并将组所有权更改为 webdev 。 4f704955b3e7a09e70ad0a8256ee5d02.png 现在,在目录中创建的任何文件都将拥有webdev的组所有权,而不是创建该文件的用户。 f0ccb84c5659ad5eed604a39fc831d5c.png 译者注: SGID权限与SUID权限相类似,所不同的是SGID用户在执行具有SGID权限的二进制可执行程序时,以该程序所属组的组身份执行程序。例如, wall命令用于向系统当前所有打开的终端输出信息。 通过wall命令可将信息发送给每位同意接收公众信息的终端机用户。 我们查看它的权限如下图。 18849829c88b29f489a495acbc46d36c.png wall的所属组权限为r-s,即wall命令具有SGID权限。 wall命令用于向系统当前所有打开的终端上输出信息。 当普通用户使用wall命令向其他终端发送信息时以该命令所属组tty的身份执行命令。

3.3 “粘滞”位

粘滞位表示只有文件的所有者才能删除文件,即使组权限允许其他用户删除。 此设置通常在公共或协作目录(如/tmp)上最有意义。 在下面的示例中,其他用户权限的执行栏设置为t表示已经可以使用粘滞位。 f86a9d023c5fec7e95867fd921f61220.png 请记住,这并不妨碍某人编辑文件; 它只是防止他们删除目录的内容。 我们设置粘滞位为: a0ceb6a49d196c01fb30fe1a612c16e4.png 您可以自己尝试在目录上设置粘滞位,并赋予它完整的组权限,以便在同一个组中的多个用户可以在目录上进行读、写和执行。 接着,以每个用户的身份创建文件,然后尝试以另一个用户的身份删除它们。 如果所有配置都正确,则一个用户不能删除另一个用户(的文件)。 注意,这些位中的每一位也可以设置为八进制格式,SUID=4,SGID=2,Sticky=1。 802ce02c58cc3aa205e9692f40bd1df8.png

3.4 大写还是小写?

如果您设置特殊位显示的不是小写而是大写的S或T(正如我们之前所见),那是因为底层的执行位不存在。 下面我们创建一个带有粘滞位的文件为例来说明这点。 我们通过增加/删除该文件的执行权限演示特殊位大小写字母的变换。 f843ec1d0e5023e1874ea71c6e88ebf5.png

3.5 有条件地设置执行位

至此,我们没有任何疑问地设置执行位为小写x。 我们还有另外一个选择: 如果权限组中执行位已经设置,那么使用大写X代替小写来设置执行位。 这可能是一个难以解释的概念,但下面的演示将有助于说明它。 请注意,在尝试将执行位添加到组特权之后,该位没被设置上。 e676f9b6106c5464416d0c95a4d500d5.png

 在这个类似的例子中,我们首先使用小写的x给组权限增加执行位,然后使用大写X给其他用户添加权限。这次,大写的X添加成功。

180020ebc2bfb02eaac47697d6600e77.png

4. 理解umask

在创建文件或目录时,系统会为它们设置默认的权限集,但 umask 可以屏蔽(或 “ 阻止 ” )默认权限中的某些位。例如,在 umask 中的 2 表示至少在默认情况下它阻止文件拥有写权限。 使用不带任何参数的umask命令可以查看当前的umask设置。 共有四列: 第一列是为特殊的suid、sgid或sticky位保留的,其余三列代表所有者、组和其他用户的权限。 9768f00fa486b76e98b007abfbea1aaf.png 为了理解这意味着什么,我们可以用-S(如下所示)执行umask以获得掩蔽位的结果。 例如,由于组和其他用户的第三列中有2个值,屏蔽了可写位,即对于组和其他用户只能分配读和执行权限。 6be2e36bc2f170b0fe7a54ee4222e824.png 为了明白文件和目录的默认权限集,让我们将umask设置为全零。 这意味着我们在创建文件时不会被屏蔽任何位。   eb20ebeaabeb6ebde0869108a6c59306.png 现在,我们来创建一个文件,可以看到所有节的默认权限是可读(4)和可(2),即八进制的666。 对于目录执行同样的操作,可看到它的默认权限是777。 我们需要在目录上有执行位以便对目录进行遍历。 8cc90fdc5fc0ae7f4bdd80237b270ff9.png

结论

管理员可以通过很多其他方式控制访问系统中的文件。 对Linux系统来说,这些权限是基础,我们可以在这些基础方面进行构建。 如果您的工作带您进入FACLs或SELinux,您将会明白它们也是建立在文件访问这些首要规则上。

About the author

Alex Juarez - Alex Juarez is a Principal Engineer atRackspace, touting 11 years with the company. Alex enjoys all things open-source as well as training and mentoring others, and is incredibly qualified to do so as an RHCA/RHCI. Alex has spoken at a number regional and nation wide open source conferences sharing knowledge and encouraging people to learn more. When Alex isn't helping others he's studying for the cicerone examand trying to find places to eatand things to see in San Antonio, TX.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值