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 并非易事,但 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 来列出当前目录。它能正常工作吗?