一、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 账号文件结构与解析

  1. /etc/passwd文件:以冒号分隔,包含七个字段,具体含义如下:
  • 账号名称:用户登录系统使用的名称。
    • 密码:早期存储加密密码,现已移至/etc/shadow,此处通常为x
  • UID:用户标识符,唯一标识用户。
    • GID:用户初始群组的 ID。
    • 使用者信息说明栏:可记录用户相关信息,如姓名等。
    • 家目录所在处:用户登录后的默认工作目录。
    • 预设登入时所取得的 shell 名称:用户登录后默认使用的 shell。
  1. /etc/shadow文件:同样以冒号分隔成九个字段,用于存储用户密码及相关安全信息,如密码加密格式、密码有效期等。

  2. /etc/group文件:分为四个字段,包括群组名称、群组密码(目前很少使用)、GID 以及加入此群组的账号(使用逗号分隔)。

二、账号与群组管理

2.1 账号创建与配置

使用useradd命令创建新账号时,系统会自动进行一系列操作:

  1. 分配UID:取当前最大的UID + 1作为新用户的UID
  2. 创建家目录:在/home目录下创建与账号同名的目录作为用户家目录。
  3. 设置默认 shell:通常为bash
  4. 建立群组:创建与账号同名的群组,并将用户加入该群组。
  5. 密码配置:依据预设值为账号设置密码相关限制信息。

这些操作的参考依据来自/etc/default/useradd/etc/login.defs文件,通过修改这两个文件可调整账号创建的默认参数,但一般建议通过手动修改用户相关参数来满足特殊需求,避免随意更改默认配置文件。

2.2 账号管理命令实践

  1. passwd命令:用于管理用户密码,可查看密码状态、设置密码存活时间、警告期限以及锁定 / 解锁账号等操作。
  2. chage命令:专注于密码相关属性的修改,如密码有效期、警告期限等。
  3. usermod命令:可修改用户的各种属性,如所属群组、登录 shell 等。
  4. userdel命令:用于删除账号,加上-r选项可同时删除用户家目录及相关文件,避免残留无归属文件。

三、bash shell script 的循环控制

3.1 for 循环基础语法

bash shell script 中,for循环是实现批量操作的常用结构,基本语法如下:

1
2
3
4
for 变量名 in 内容1 内容2 内容3...
do
执行的指令码
done

循环过程中,变量名会依次取in后面列出的内容,执行dodone之间的指令码。

四、预设权限 umask

4.1 umask 的作用与原理

umask用于设置用户新建文件和目录时的默认权限,其本质是指定要去除的权限位。在 RockyLinux 环境中,root 用户和普通用户的默认umask均为0022。通过umask命令可查看和修改当前的默认权限设置。

4.2 权限计算与实践操作

  1. 新建文件和目录的默认权限计算:根据umask值和权限分配规则,计算新建文件和目录的实际权限。例如,当umask0022时,普通用户新建目录的默认权限为775777 - 002),新建文件的默认权限为664666 - 002)。
  2. 修改 umask 实现特殊权限需求:若希望同群组用户对新建目录有完全操作权限,而其他用户无权限,可将umask设置为0007。若要使设置永久生效,可将umask命令添加到~/.bashrc文件中。

五、账号管理实务

5.1 新建用户环境定制

通过修改/etc/skel目录下的文件和目录结构,可定制新建用户的家目录环境。例如,为所有新建用户在其家目录中创建bin子目录,修改.bashrc文件使HISTSIZE达到10000,并为cprmmv命令设置-i选项的别名。

5.2 特殊用途账号创建

  1. 邮件专用账号:使用 shell script 脚本批量创建仅用于邮件收发的账号(如mailuser1 - mailuser5),设置不可登录系统的 shell(/sbin/nologin),生成随机密码并记录到文件中。
  2. 指定 UID 和群组的账号:根据软件特殊需求,创建具有特定 UID(如399)和所属群组(如users)的账号,并设置密码。

5.3 共享目录权限设置

为同一项目的用户(如pro1pro2pro3)创建共享目录(如/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 的设置与管理

  1. 设置 ACL 权限:使用setfacl -m命令针对个人(u:账号名称:rwx-)或群组(g:群组名称:rwx-)设置权限,如setfacl -m u:student:rx /srv/projecta,使student用户对/srv/projecta目录拥有读和执行权限。
  2. 查看 ACL 设置:使用getfacl命令查看目录或文件的 ACL 设置信息。
  3. 管理 ACL 权限:通过setfacl -m修改权限,setfacl -x取消特定用户或群组的权限,setfacl -b删除所有 ACL 设置。