跳至内容

LPI Linux 认证/管理文件权限和所有权

来自维基教科书,开放书籍,开放世界

详细目标

[编辑 | 编辑源代码]

(LPIC-1 版本 5.0)

权重: 3

描述
考生应该能够通过正确使用权限和所有权来控制文件访问。

关键知识领域

  • 管理常规文件和特殊文件以及目录的访问权限。
  • 使用 suid、sgid 和粘滞位等访问模式来维护安全。
  • 了解如何更改文件创建掩码。
  • 使用组字段授予组成员文件访问权限。

以下是使用过的文件、术语和实用程序的部分列表

  • chmod
  • umask
  • chown
  • chgrp

更改文件所有者和组

[编辑 | 编辑源代码]

要更改文件或目录的所有者,请使用 chown。

chown yann mon_fichier.txt

要更改文件或目录的组,请使用 chgrp。

chgrp dialout caller

gpasswd 和 yast2 程序允许您管理组。

gpasswd [-A 用户名,...] [-M 用户名,...] 组名

-A: 添加具有组管理员权限的用户。
-M: 添加组成员。

组管理员可以添加或删除组成员

gpasswd -d toto users
gpasswd -a toto users

组管理员可以设置或删除组的密码。

gpasswd users
gpasswd -r users

更多权限

[编辑 | 编辑源代码]

当用户执行特定脚本或程序时,可以通过设置文件的 uid 或 gid 位来赋予用户更多权限。

如果设置了该位,进程将继承文件所有者的权限,而不是用户的权限。要设置有效 uid 或 gid,请使用 chmod。

chmod 2640 [file] # (2) gid is inheritable for group.
chmod 4640 [file] # (4) uid is inheritable for user.

/bin/passwd 是此类程序的示例。

粘滞位也可以设置,可以使程序文本段驻留在 RAM 中。chmod 1640 [文件] (1) 文件程序保留在 RAM 中。


文件和目录权限

[编辑 | 编辑源代码]

可以使用 ls -l 查看文件或目录的权限。

文件权限示例

ls -l readme
-rwxrw---- 1 toto users 14 Jul 5 10:00 readme

这意味着用户 toto 具有读、写和执行权限,组 users 的成员具有读和写权限。其他人没有权限。(0760)

ls -l /etc/hosts
-rw-r--r-- 1 root root 14 Jul 5 10:00 /etc/hosts

这意味着用户 root 具有读和写权限,组 root 的成员和所有其他人具有读权限。(0644)

目录权限示例

ls -ld /bin
drwxr-xr-x 2 root root 4096 Jul 5 10:00 /bin

这意味着用户 root 具有读、写和执行权限,组 root 的成员和其他人具有读和执行权限。(0755)

ls -l /home/toto
drwxr-xr-x 10 toto  users 4096 Jul 5 1:00 /home/toto

这意味着用户 toto 具有读、写和执行权限,组 users 的成员和其他人具有读和执行权限。(0755)

默认权限

[编辑 | 编辑源代码]

创建文件的默认权限为 0666,创建目录的默认权限为 0777。大多数系统在启动时使用 umask 程序覆盖此权限。通常,掩码值为 022。这意味着组和其他的写权限将被阻止。要检查或更改掩码值,请执行

umask 
umask 066  

文件示例

default: rw- rw- rw- (0666)
umask: 0 2 2 (0022) Block
result: rw- r-- r-- (0644)

目录示例

default: rwx rwx rwx (0777)
umask: 0 2 2 (0022) Block
result: rwx r-x r-x (0755)

计算 umask

[编辑 | 编辑源代码]

找到正确的 umask 并非易事,但 certainly 是可以做到的。文件的最终权限是 umask 的否定和默认权限的逻辑与运算的结果。(目录也是如此)

为了可视化这一点,我们首先将八进制默认权限转换为二进制形式

 octal: 0666
 binary: 000 110 110 110
 octal: 0777
 binary: 000 111 111 111

然后我们取 umask。这次我们将使用 0027 作为我们的 umask 并将其转换为二进制。然后将其反转 (~)。

 octal:  0027
 binary: 000 000 010 111
 ~:      111 111 101 000

现在,要获得文件的实际权限,我们将其与默认权限进行逻辑与运算,然后转换回八进制

 default permission: 000 110 110 110
 ~ umask:            111 111 101 000
 logical AND:        000 110 100 000
 octal representation: 0640

目录也是如此

 default permission: 000 111 111 111
 ~ umask:             111 111 101 000
 logical AND:        000 111 101 000
 octal representation: 0750

更改文件权限

[编辑 | 编辑源代码]

要更改文件或目录的权限,请使用 chmod。要覆盖现有权限,请执行

chmod 0755 /tmp #rwx for user, rx for group and others

要更改添加或取消一些权限而不覆盖所有现有权限,请执行

chmod u+w readme  # Add write permission for user
chmod +r readme  # Add read permission for everybody
chmod -r readme  # Remove read permission for everybody
chmod u+x,g=r readme  # Add execution for user and set read for group
chmod u=rwx,go=rx readme  # Set read write and execution for user, read and execution for group and others

要在递归模式下更改,请使用 -R 选项。

chmod -R +x /sbin/*


1) 使用字母编写 chmod 命令行来设置以下权限

rwxrwxr-x :
rwxr--r-- :
r--r----- :
rwxr-xr-x :
rwxr-xr-x :
r-x--x--x :
-w-r----x :
-----xrwx :

2) 使用八进制数字编写 chmod 命令行来设置以下权限

rwxrwxrwx :
--x--x--x :
r---w---x :
-w------- :
rw-r----- :
rwx--x--x :

3) 对于以下 umask 值,文件和目录的创建权限将是什么?

umask = 0027
File permissions:
Directory permissions:
umask = 0011
File permissions:
Directory permissions:
umask = 0541
File permissions:
Directory permissions:
umask = 0777
File permissions:
Directory permissions:

4) 创建两个用户帐户

登录 ID: tst1,组 users,使用 bash shell,主目录 /home/tst1
登录 ID: tst2,组 public,使用 bash shell,主目录 /home/tst2
为这两个帐户设置密码。

以 tst1 用户身份登录并复制 /bin/ls 到 tst1 的主目录中,命名为 myls。将 myls 的所有者更改为 tst1,并将权限更改为 0710。此权限值意味着什么?

以 tst2 用户身份登录并尝试使用 /home/tst1/myls 列出当前目录。它能正常工作吗?

在 /etc/group 和 /etc/gshadow 中创建一个新的组 labo,包含 tst1 和 tst2。将 myls 的所有者组更改为 labo。

再次从 tst2 帐户尝试执行 /home/tst1/myls 来列出当前目录。它能正常工作吗?


练习结果

华夏公益教科书