Home Linux 学习 第十一章 获取用户账户
Post
Cancel

Linux 学习 第十一章 获取用户账户

第十一章 获取用户账户

用户账户保持了使用系统的人与运行在系统中的进程之间的边界,而组是一种将系统的权限一次性分配给多个用户的方法

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 命令完成了以下活动:

  1. 读取 /etc/login.defs 和 /etc/default/useradd 文件,获取创建账户所使用的默认值

  2. 检查命令行参数,找出哪些默认值被重写

  3. 根据默认值和命令行参数,在 /etc/passwd 和 /etc/shadow 文件中创建新用户条目

  4. 在 /etc/group 文件中创建新的组条目

  5. 在 /home 目录中根据用户名创建一个主目录

  6. 将 /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 -lsfind / -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
  1. 创建组协作目录 (设置 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

  1. 创建受限制的删除目录 (粘滞位)

命令: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 等

This post is licensed under CC BY 4.0 by the author.

Linux 学习 第十章 获取和管理软件

Linux 学习 第十二章 管理磁盘和文件系统