第十一章 获取用户账户
用户账户保持了使用系统的人与运行在系统中的进程之间的边界,而组是一种将系统的权限一次性分配给多个用户的方法
11.1 创建用户账户
每一个使用 Linux 系统的人都应该有一个单独的用户账户。通过拥有一个用户账户,可以提供用来完全存储文件的区域,以及调整用户界面 (GUI、路径、环境变量等) ,从而适合用户使用电脑的习惯
可以通过 Cockpit 使用 GUI 创建账户,若没有安装:
1
2
yum install cockpit -y
systemctl enable --now cockpit.socket
然后浏览器打开 localhost:9090
以操作
11.1.1 使用 useradd 命令添加用户
多数情况下使用 GUI 是比较麻烦的,所以可以使用 useradd
命令以添加用户 (root 权限) ,唯一必要的参数是用户的登录名,可用选项包括:
可用选项 | 描述 |
---|---|
-c “comment” | 提供了对新用户账户的描述。一般为用户的全名 |
-d home_dir | 设置账户所使用的主目录。默认使用登录名命名并放入 /home 目录 |
-D | 并不创建新账户,而是将所提供的信息保存作为创建新用户的默认设置 |
-e expire_date | 以 YYYY-MM-DD 格式分配账户的有效期限。例如:-e 2024-08-01 |
-f -1 | 设置密码过期后多少天,便永久封禁该账户。默认值 -1 表示禁用此选项 |
-g group | 设置用户所在的主组 (必须已存在于 /etc/group 文件中) 。若没有该选项,将创建一个新组 (使用用户名作为组名) ,并将其作为用户的主组 |
-G grouplist | 将新用户添加到以逗号分隔的增补组列表中。例如:-G wheel, sales, tech |
-k skel_dir | 设置用户主目录的文件,复制自 skel_dir ,默认为 /etc/skel |
-m | 自动创建用户的主目录。对于 Fedora 和 RHEL 该选项是默认的,但对于 Ubuntu 来说不是 |
-M | 不创建用户主目录,尽管有 -m 选项也不创建 |
-n | 禁用创建一个与新用户名和用户 ID 相匹配的新组的默认行为 |
-o | 使用 -u uid 创建一个与另一个用户账户具有相同 UID 的用户账户 |
-p passwd | 设置密码 (使用 MD5 加密过后的) 。如果此时未设置,可以使用 passwd user 命令。使用 openssl passwd 以输出通过 MD5 加密后的密码 |
-s shell | 设置默认 shell 。例如:-s /bin/csh |
-u user_id | 为账户指定用户 ID 号,若没有则自动分配。自动分配给常规用户的 ID 从 1000 开始 |
一般情况使用:
1
2
3
# root 权限下
useradd yexca
passwd yexca
在创建 yexca
这个账户的过程中,useradd
命令完成了以下活动:
-
读取 /etc/login.defs 和 /etc/default/useradd 文件,获取创建账户所使用的默认值
-
检查命令行参数,找出哪些默认值被重写
-
根据默认值和命令行参数,在 /etc/passwd 和 /etc/shadow 文件中创建新用户条目
-
在 /etc/group 文件中创建新的组条目
-
在 /home 目录中根据用户名创建一个主目录
-
将 /etc/skel 目录中的所有文件复制到新的主目录中。其中通常包括登录和应用程序启动脚本
在 /etc/passwd 文件中的用户行:
yexca:x:1001:1001::/home/yexca:/bin/bash
字段之间以冒号分隔,分别为登录名、密码、用户 ID 、主组 ID 、注释字段、主目录、默认登录终端
密码字段为 x 是被加密存储在 /etc/shadow
在 /etc/group 文件中的组行:
yexca:x:1001:
同样以冒号分隔,分别为组名、组密码、组 ID 以及组中用户列表
11.1.2 设置用户默认值
useradd
命令通过读取 /etc/login.defs 和 /etc/default/useradd 文件确定默认值,所以可以修改文件以修改默认值
在不同 Linux 系统中 login.defs 不同,以下仅部分
1
2
3
4
5
6
7
8
9
10
11
12
13
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
UID_MIN 1000
UID_MAX 60000
SYS_UID_MIN 200
SYS_UID_MAX 999
GID_MIN 1000
GID_MAX 60000
SYS_GID_MIN 201
SYS_GID_MAX 999
CREATE_HOME yes
修改其他默认选项可以参阅 /etc/default/useradd 文件,可以通过 useradd -D
查看当前默认设置
也可以将 -D
与一些其他选项搭配使用以修改 /etc/default/useradd 文件
-
-b default_home — 设置所创建主目录所在目录。通常为 /home
-
-e default_expire_date — 设置禁用用户账户的默认的截止日期。应当使用 YYYY-MM-DD 的日期格式
-
-f default_inactive — 设置密码过期后多少天账户被禁用
-
-g default_group — 新用户默认所在的组。通常会创建与用户具有相同名称和 ID 号的新组
-
-s default_shell — 默认 shell
11.1.3 使用 usermod 修改用户
usermod
命令提供了一种简单明了的方法来更改账户参数
选项 | 描述 |
---|---|
-c “username” | 更改描述 |
-d home_dir | 更改主目录 |
-e expire_date | 分配一个 YYYY-MM-DD 格式的新过期时间 |
-f -1 | 更改密码过期之后多少天永久禁用账户。默认值 -1 表示禁用该选项 |
-g group | 更改用户所在主组 (需存在该组) |
-G grouplist | 将用户的附属组设置为以逗号分隔的组列表。如果想保留原先组,请使用 -Ga |
-l login_name | 更改登录名 |
-L | 锁定账户 (在 /etc/shadow 文件的加密密码前添加一个感叹号) |
-m | 将原主目录内容复制到新主目录。仅当 -d 选项被使用时该选项才有效 |
-o | 只能与 -u 一起使用以取消 UID 必须唯一的限制 |
-s shell | 更改 shell |
-u user_id | 更改用户 ID |
-U | 接触锁定 (将 /etc/shadow 文件的加密密码前的感叹号删除) |
11.1.4 使用 userdel 删除用户
例如命令 userdel -r yexca
将用户 yexca 把 /etc/passwd 文件删除,-r
表示将主目录 /home/yexca 也删除
在删除用户前可以先使用 find
命令查找用户遗留的文件,如:find / -user yexca -ls
或 find / -uid 1001 -ls
因为没有分配给用户的文件可能会是一个安全隐患,比较好的做法是分配给一个真实的账户,可以使用 find / -nouser -ls
命令找到不与任何用户关联的文件
11.2 了解组账户
如果要在多个用户中共享一组文件,那么组账户是非常有用的
通过 chgrp grpName fileOrDir
命令以更改文件或目录所属组
11.2.1 使用组账户
每一个用户都分配给一个主组,主组由 /etc/passwd 文件中每一条目的第三个字段的数字来表示
一个用户可以属于多个增补组,也可以不属于任何增补组。如果用户 yexca 是组 yexca 和组 hi 的一名成员,那么在 /etc/group 文件中的条目将如下所示:
yexca:x:1001:yexca
hi:x:1002:yexca
只有 root 权限的人才能改变分组,也就是普通用户无法更改自己的分组,也不能将其他用户添加到自己的组
如果想要以某组身份创建文件,可以使用 newgrp
命令以临时成为某一组成员
拥有 root 权限的用户可以使用 gpasswd
命令设置某组的组密码
11.2.2 创建组账户
创建:groupadd groupName
分配组号:groupadd -g gid groupName
或者更改某用户的组,可以使用组名或组号
groupmod -g gid userName
groupmod -n groupName userName
而如果改变增补组,参考 usermod
命令
11.3 在企业中管理用户
通过使用 ACL (Access Control Lists) 技术以使任何用户,可将文件或目录的特定权限分配给任何用户和组
11.3.1 使用 ACL 设置权限
两个命令,设置 setfacl
和获取 getfacl
某目录权限
设置时,通过 -m
修改或 -x
删除权限,例如
setfacl -m u:userName:rwx filename
11.3.2 为用户添加目录以便进行协作
当使用 chmod
命令更改权限时,一般会忽略一组特殊的三权限位,这些权限位可以在命令和目录上设置特殊权限
例如:chmod 775 /home/yexca/tmp.txt
,实际上权限为 0775
名称 | 数值 | 字母值 |
---|---|---|
设置用户 ID 位 | 4 | u+s |
设置组 ID 位 | 2 | g+s |
粘滞位 | 1 | o+t |
- 创建组协作目录 (设置 GID 位)
1
2
3
4
5
6
7
8
9
10
11
# 创建一个用于协作的组
groupadd -g 301 cooperation
# 添加一些用户
usermod -aG cooperation yexca
# 创建协作目录
mkdir /mnt/co-tmp
# 将组 cooperation 分配给该目录
chgrp cooperation /mnt/co-tmp
# 更改目录权限
chmod 2775 /mnt/co-tmp
# 此时如果查看该目录权限应该为 rwxrwsr-x
现在,若用户 yexca 在目录 /mnt/co-tmp 创建一个文件,该文件所属组为 cooperation,而不是 yexca
- 创建受限制的删除目录 (粘滞位)
命令:chmod 1775 /mnt/tmp
在受限制的删除目录中,除非是 root 用户或者目录的拥有者,不能删除其他用户的文件,即使拥有写入权限
例如 /tmp 目录就是一个受限制的删除目录 (权限为 rwxrwxrwt)
设置用户位 Set UID
拥有设置用户位的可执行文件 (rwsr-xr-x) 代表其他用户可执行,但执行命令进程为拥有该文件的用户
例如
su
命令,所有用户可执行,但执行的进程属于 root 用户
11.4 集中用户账户
Linux 默认验证用户的方法是根据 /etc/passwd 文件和 /etc/shadow 文件的密码,但也可以使用其他方式
例如 LDAP (Lightweight Directory Access Protocol)、NIS (Network Information Service)、Winbind 等