Linux文件访问权限中[apue]具体有哪些操作细节?

摘要:史上最全的关于 linux 文件权限的总结,出于经典而胜于经典,经过重新梳理,辅以 shell 脚本用例,以全新的视角呈现在你面前
前言 说到 linux 上的文件权限,其实我们在说两个实体,一是文件,二是进程。一个进程能不能访问一个文件,其实由三部分内容决定: 文件的所有者、所在的组; 文件对所有者、组用户、其它用户设置的权限访问位; 启动进程的用户、所在的组、有效用户、有效用户组。 下面先简单说明一下这些基本概念,最后再说明它们是如何相互作用并影响进程访问文件的。 用户与组 用户 ID 唯一标识一个登录用户,记录在口令文件 (/etc/passwd) 中。ID 为 0 的用户为超级用户或根用户 (root),具有绕过文件权限检查的特权。 组 ID 用于将一类用户组织在一起,记录在组文件 (/etc/group) 中。下面这段 shell 脚本用来演示如何创建用户并将它们添加到组中: 1 #! /bin/bash 2 useradd lippman 3 useradd steven 4 useradd caveman 5 useradd paperman 6 echo "create user ok" 7 8 groupadd men 9 groupadd share 10 echo "create group ok" 11 12 usermod -a -G share lippman 13 usermod -a -G share steven 14 usermod -a -G men lippman 15 usermod -a -G men caveman 16 usermod -a -G men paperman 17 echo "add user to group ok" 18 19 groups lippman steven caveman paperman 20 echo "show user and their group ok" 21 22 groupdel men 23 groupdel share 24 echo "delete group ok" 25 26 groups lippman steven caveman paperman 27 echo "show user and their group ok" 28 29 userdel lippman 30 userdel steven 31 userdel caveman 32 userdel paperman 33 echo "delete user ok" 34 35 rm -rf /home/lippman 36 rm -rf /home/steven 37 rm -rf /home/caveman 38 rm -rf /home/paperman 39 echo "remve user home dir ok" 这段脚本需要有管理员权限,请确保当前用户为 root 用户或属于 sudoer 用户组并使用 sudo 运行。下面是脚本的输出: $ sudo ./user_init.sh create user ok create group ok add user to group ok lippman : lippman men share steven : steven share caveman : caveman men paperman : paperman men show user and their group ok delete group ok lippman : lippman steven : steven caveman : caveman paperman : paperman show user and their group ok delete user ok remve user home dir ok 在你的机器上执行这段脚本的时候要特别小心,确保不会有同名的用户或组已经存在,否则可能会将数据误删除。特别是删除用户时,用户的工作目录是不会一并删除的,为了防止下次执行脚本时报警 (工作目录已存在),这里同时删除用户的工作目录 (line 35-38)。groups 命令为参数列表中的每个用户罗列它们所在的组,一个用户可以属于多个组,它创建时所在的组称为初始组,其它组称为附加组,一个用户最多可以添加的附加组数量上限可以通过 sysconf (_SC_NGROUPS_MAX) api 获取 (或通过 getconf NGROUPS_MAX 命令获取),在我的机器上这个值是 65536。关于系统限制值,可以参考我之前写的这篇文章:《[apue] 一个快速确定新系统上各类限制值的工具 》。 从上面两组高亮的输出可以看出,附加组是可以先于用户删除的,删除之后用户就不在组中了。
阅读全文