鸟哥的私房菜:用户管理与 ACL 权限设置
一、Linux 账号之 UID 与 GID
1.1 账号信息存储与 UID/GID 范围
Linux 系统通过特定文件记录账号的 UID(用户标识符)与 GID(组标识符)信息。/etc/passwd
文件记录 UID,同时也包含 GID 相关信息;/etc/group
文件则专门记录 GID 以及组成员信息。
ID 范围 | 使用者特性 |
---|---|
0 | 系统管理员账号,拥有最高权限 |
1 - 999 | 系统账号,用于系统服务运行等,1 - 200 由系统发行版自行建立,201 - 999 可供用户按需创建系统账号 |
1000 - 60000 | 普通用户账号,供日常使用 |
1.2 账号文件结构与解析
/etc/passwd
文件:以冒号分隔,包含七个字段,具体含义如下:
- 账号名称:用户登录系统使用的名称。
- 密码:早期存储加密密码,现已移至
/etc/shadow
,此处通常为x
。
- 密码:早期存储加密密码,现已移至
- UID:用户标识符,唯一标识用户。
- GID:用户初始群组的 ID。
- 使用者信息说明栏:可记录用户相关信息,如姓名等。
- 家目录所在处:用户登录后的默认工作目录。
- 预设登入时所取得的 shell 名称:用户登录后默认使用的 shell。
/etc/shadow
文件:同样以冒号分隔成九个字段,用于存储用户密码及相关安全信息,如密码加密格式、密码有效期等。/etc/group
文件:分为四个字段,包括群组名称、群组密码(目前很少使用)、GID 以及加入此群组的账号(使用逗号分隔)。
二、账号与群组管理
2.1 账号创建与配置
使用useradd
命令创建新账号时,系统会自动进行一系列操作:
- 分配
UID
:取当前最大的UID + 1
作为新用户的UID
。 - 创建家目录:在
/home
目录下创建与账号同名的目录作为用户家目录。 - 设置默认 shell:通常为
bash
。 - 建立群组:创建与账号同名的群组,并将用户加入该群组。
- 密码配置:依据预设值为账号设置密码相关限制信息。
这些操作的参考依据来自/etc/default/useradd
和/etc/login.defs
文件,通过修改这两个文件可调整账号创建的默认参数,但一般建议通过手动修改用户相关参数来满足特殊需求,避免随意更改默认配置文件。
2.2 账号管理命令实践
passwd
命令:用于管理用户密码,可查看密码状态、设置密码存活时间、警告期限以及锁定 / 解锁账号等操作。chage
命令:专注于密码相关属性的修改,如密码有效期、警告期限等。usermod
命令:可修改用户的各种属性,如所属群组、登录 shell 等。userdel
命令:用于删除账号,加上-r
选项可同时删除用户家目录及相关文件,避免残留无归属文件。
三、bash shell script 的循环控制
3.1 for 循环基础语法
在 bash shell script
中,for
循环是实现批量操作的常用结构,基本语法如下:
1 | for 变量名 in 内容1 内容2 内容3... |
循环过程中,变量名会依次取in
后面列出的内容,执行do
与done
之间的指令码。
四、预设权限 umask
4.1 umask 的作用与原理
umask
用于设置用户新建文件和目录时的默认权限,其本质是指定要去除的权限位。在 RockyLinux 环境中,root 用户和普通用户的默认umask
均为0022
。通过umask
命令可查看和修改当前的默认权限设置。
4.2 权限计算与实践操作
- 新建文件和目录的默认权限计算:根据
umask
值和权限分配规则,计算新建文件和目录的实际权限。例如,当umask
为0022
时,普通用户新建目录的默认权限为775
(777 - 002
),新建文件的默认权限为664
(666 - 002
)。 - 修改 umask 实现特殊权限需求:若希望同群组用户对新建目录有完全操作权限,而其他用户无权限,可将
umask
设置为0007
。若要使设置永久生效,可将umask
命令添加到~/.bashrc
文件中。
五、账号管理实务
5.1 新建用户环境定制
通过修改/etc/skel
目录下的文件和目录结构,可定制新建用户的家目录环境。例如,为所有新建用户在其家目录中创建bin
子目录,修改.bashrc
文件使HISTSIZE
达到10000
,并为cp
、rm
、mv
命令设置-i
选项的别名。
5.2 特殊用途账号创建
- 邮件专用账号:使用 shell script 脚本批量创建仅用于邮件收发的账号(如
mailuser1
-mailuser5
),设置不可登录系统的 shell(/sbin/nologin
),生成随机密码并记录到文件中。 - 指定 UID 和群组的账号:根据软件特殊需求,创建具有特定 UID(如
399
)和所属群组(如users
)的账号,并设置密码。
5.3 共享目录权限设置
为同一项目的用户(如pro1
、pro2
、pro3
)创建共享目录(如/srv/projecta
),通过群组管理和权限设置,使项目成员在共享目录中拥有相应的操作权限,同时保证其他用户无法访问。
六、多人共管系统的环境:用 sudo
6.1 sudo 的优势与原理
相较于su
命令,sudo
允许用户以其他用户(通常是 root)的身份执行指令,且仅需输入自己的密码,提高了系统安全性。只有在/etc/sudoers
文件中被授权的用户才能使用sudo
。
6.2 sudo 的配置与使用
使用visudo
命令编辑/etc/sudoers
文件进行权限配置,配置格式为:使用者账号 登入者的来源主机=(可切换的身份) 可下达的指令
。例如,将student
账号添加到/etc/sudoers
文件中,使其能够以 root 身份执行部分系统管理命令。
七、主机的细部权限规划:ACL 的使用
7.1 ACL 的概念与支持
ACL(Access Control List,存取控制列表)用于提供传统权限(owner、group、others)之外的更细致权限设定,可针对单一用户、群组或目录进行读写执行权限的精确控制。RockyLinux 系统默认支持 ACL,可通过dmesg
命令查看系统是否已启用 ACL 支持。
7.2 ACL 的设置与管理
- 设置 ACL 权限:使用
setfacl -m
命令针对个人(u:账号名称:rwx-
)或群组(g:群组名称:rwx-
)设置权限,如setfacl -m u:student:rx /srv/projecta
,使student
用户对/srv/projecta
目录拥有读和执行权限。 - 查看 ACL 设置:使用
getfacl
命令查看目录或文件的 ACL 设置信息。 - 管理 ACL 权限:通过
setfacl -m
修改权限,setfacl -x
取消特定用户或群组的权限,setfacl -b
删除所有 ACL 设置。