Linux 用户与组管理全解析
1. Linux 账户基础
在 Linux 系统中,账户对于系统的正常运行至关重要。通常,在 Linux 计算机上执行的大多数任务仅需要普通用户的权限,你可以使用自己的用户账户来处理这些任务。可以借助
whoami
、
id
、
who
和
w
等工具来识别自己的普通账户,还能了解还有哪些人正在使用这台计算机。
偶尔,你需要执行一些需要额外权限的管理任务。这时,你必须使用
root
账户,该账户拥有强大的权限,可以读写任何普通文件、以底层方式访问硬件、重新配置网络以及执行普通用户不被允许的其他任务。但由于
root
权限过大,使用时必须谨慎,以免因输入错误或其他意外情况导致严重问题。
2. 建议练习
-
查看普通用户账户状态
:依次输入
whoami和id命令,查看普通用户账户的状态。id命令可能会显示你是多个组的成员,你可以通过网络搜索了解每个组的作用。 -
查看计算机上定义的账户
:读取
/etc/passwd文件,或者输入getent passwd命令,查看计算机上定义了哪些账户。检查是否存在除你自己之外的普通用户账户(根据不同的发行版,普通用户的 UID 通常大于 500 或 1000),并尝试通过网络搜索了解一些系统账户(UID 小于 500 或 1000)的用途。
3. 复习问题
| 问题 | 选项 | 答案 |
|---|---|---|
| 系统账户 UID 为 0 的用途是什么? |
A. 它是系统管理账户。
B. 它是第一个普通用户的账户。 C. 无;UID 0 故意未定义。 D. 不同发行版有所不同。 E. 它是某些服务器默认使用的低权限账户。 | A |
普通用户账户在
/etc/passwd
文件中会包含哪些类型的信息?(多选)
|
A. 用户 ID(UID)编号
B. 用户所属的所有组的完整列表 C. 账户主目录的路径 D. 账户默认的 GUI 桌面环境的路径 E. 账户默认的文本模式 shell 的路径 | ACE |
你以普通用户身份登录,想要以
root
身份运行
iptables -L
命令。假设系统已配置为通过适当的命令让你获得
root
访问权限,以下哪个命令可以完成此任务?
|
A.
sudo iptables -L
B.
root iptables -L
C.
passwd iptables -L
D.
su iptables -L
E.
admin iptables -L
| A |
whoami
提供的信息比
id
更多,这句话对吗?
| 是/否 | 否 |
Linux 系统将其组信息存储在
/etc/groups
文件中,这句话对吗?
| 是/否 | 是 |
一般来说,以
root
身份运行程序时应该格外小心,这句话对吗?
| 是/否 | 是 |
| Linux 中关联用户名和 UID 编号的文件是 _ _ _。(请提供文件的完整路径) |
/etc/passwd
| |
| 若要了解当前哪些用户登录到计算机以及他们正在运行哪些程序,你可以输入 ____。 |
w
| |
| 根据不同的发行版,UID 小于 500 或 1000 的编号保留给 _ ___ 账户使用。 | 系统 |
4. 创建新账户
Linux 是多用户操作系统,一台 Linux 计算机可以支持多个用户,每个用户都有唯一的账户。因此,需要掌握用户账户的管理方法,包括创建、修改和删除账户,以及管理用户组。
4.1 确定组策略
Linux 组是用户的集合,可以使用组来控制对特定文件的访问权限。常见的组策略有两种:
-
用户组
:每个用户可以关联一个组,例如用户
luke
可以有一个名为
luke
的组。用户可以将自己文件的组所有权设置为
luke
,并设置所需的组权限,系统管理员可以将其他用户添加到
luke
组中。此后,
luke
组的成员可以根据
luke
用户设置的权限访问该组的文件。这种方法强调对单个用户文件的访问控制。
-
项目组
:根据工作项目、部门隶属关系或其他实际的用户分组来创建组。例如,为销售部门的用户创建一个名为
sales
的组。该组的成员如果想与组内其他成员共享文件,可以适当设置组所有权和权限,并将文件存储在商定的位置。当计算机被大量易于定义分组的用户使用时,这种方法效果最佳。
这两种方法并非相互排斥,你可以混合使用,也可以创建自己的方法。同时,用户可以是多个组的成员,这对于用户组方法的正常运行是必要的,否则组就会与账户重复。如果你采用项目组方法,需要考虑为新用户分配哪个组作为其主组,主组将默认分配给用户文件的组所有权。
4.2 选择好密码
创建账户时,通常需要为其设置密码。有时,用户可以在创建账户时输入密码;有时,你需要为用户选择一个密码,并指示用户尽快更改。无论哪种情况,都应该教育用户如何选择好的密码。
以下是一些常见但不安全的密码类型:
- 基于家庭成员、朋友和宠物的名字。
- 基于喜欢的书籍、电影、电视节目或其中的角色。
- 电话号码、街道地址或社会安全号码。
- 任何其他有意义的个人信息。
- 字典中能找到的任何单个单词(任何语言)。
- 任何简单的键盘或字母数字组合,如
qwerty
或
123456
。
最佳的密码是由字母、数字和标点符号组成的随机组合,但这样的密码难以记忆。一个合理的折衷方案是分两步构建密码:
1.
选择易记难猜的基础部分
:可以使用两个或多个不相关的单词,如
bun
和
pen
,然后将它们合并为
bunpen
;或者使用对用户有意义的短语的首字母,如 “yesterday I went to the dentist” 的首字母组成
yiwttd
。基础部分不应是任何语言中的单词,一般来说,密码越长越好。
2.
对基础部分进行修改以增加猜测难度
:
-
添加数字或标点
:在基础部分插入随机数字或标点,例如
bu3npe&n
或
y#i9wttd
,一般至少添加两个符号或数字。
-
混合大小写
:Linux 的密码区分大小写,打乱字母的大小写可以提高安全性,例如
Bu3nPE&n
和
y#i9WttD
。
-
反转顺序
:虽然单独使用此方法增强的安全性较弱,但与其他方法结合使用时可以增加一定的安全性。可以仅对两个单词基础部分中的一个单词进行反转,例如
Bu3nn&EP
和
DttW9i#y
。
-
增大密码长度
:增加密码的长度可以增加破解难度,可以使用更大的单词或短语,但这可能会使密码更难记忆和输入。即使只是重复单个字符来增加长度也会有所帮助,例如
Bu3nn&EPiiiiiiiiii
或
Dtt:::::::::::W9i#y
。
为帮助用户选择好的密码,你可以与他们分享以下见解:
- 恶意人员可能会根据已知信息或通过查找电话簿、网页等方式猜测密码。
- 虽然 Linux 会对密码进行内部加密,但存在一些程序可以将整个字典通过 Linux 的密码加密算法进行比对,如果匹配则密码被破解。
- 用户账户可能会被用作入侵整个计算机的第一步,或者作为攻击其他计算机的跳板。
- 用户绝不应将密码透露给他人,即使对方声称是系统管理员,真正的系统管理员不需要用户的密码。
- 不要在多个系统上使用相同的密码,否则一个账户被攻破可能会导致所有使用相同密码的账户都被攻破。
- 写下密码或通过电子邮件发送密码都是危险的做法,将密码写在粘在计算机显示器上的便签上尤其危险。
此外,一些常见的易猜密码,如 “password”、“123456” 等,很容易被暴力破解程序发现,应避免使用。
4.3 使用 GUI 工具创建账户
使用 GUI 工具创建账户是最简便的方法,但不同的 Linux 发行版访问这些工具的方式有所不同:
-
Fedora 16
:以
root
身份在 shell 提示符下输入
system-config-users
命令,启动用户管理器实用程序;或者使用类似于 Ubuntu 的更有限的系统设置实用程序。
-
openSUSE 12.1
:启动 YaST 配置工具,并在其中打开用户和组管理工具。
-
Ubuntu 11.10
:在桌面环境中打开系统设置实用程序,然后点击用户账户选项。在进行更改之前,必须点击锁图标并输入密码。
以 Fedora 的用户管理器实用程序为例,添加用户的步骤如下:
1. 点击“添加用户”,弹出“添加新用户”对话框。
2. 在“用户名”字段中输入用户名,这是用户在 Linux 登录提示时输入的名称。
3. 在“全名”字段中输入用户的全名,该信息将存储在
/etc/passwd
文件的注释字段中,并在各种工具中显示,例如用户登录 GNOME 时会显示在屏幕右上角。
4. 在“密码”字段和“确认密码”字段中分别输入密码。
5. 在大多数情况下,点击“确定”即可,因为其余选项的默认值通常是合适的(主目录字段将根据你输入的用户名自动填充)。不过,你也可以在点击“确定”之前自定义登录 shell、主目录位置等功能。
新账户将显示在用户管理器列表中,如有需要,你可以随后对其进行修改或删除。
4.4 使用命令行创建账户
在任何 Linux 发行版中,都可以使用
useradd
实用程序从命令行创建账户。使用该实用程序时,输入其名称和要为新账户关联的用户名,还可以在
useradd
和用户名之间包含选项,如下表所示:
| Option name | Option abbreviation | Effect |
|---|---|---|
| –comment comment | -c | 指定用户的注释字段(GUI 工具通常将其描述为“全名”)。 |
| –home home-dir | -d |
指定账户的主目录,默认为
/home/username
。
|
| –expiredate expire-date | -e |
设置账户禁用的日期,格式为
YYYY-MM-DD
,默认账户不会过期。
|
| –inactive inactive-days | -f | 设置密码过期后账户完全禁用的天数,值为 -1 表示禁用此功能,为默认值。 |
| –gid default-group | -g | 设置用户的默认组的名称或 GID,默认值是一个与用户同名的新组。 |
| –groups group[,…] | -G | 设置用户所属组的名称或 GID,可以用逗号分隔指定多个组。 |
| –create-home | -m |
包含此选项时,
useradd
会为用户创建主目录,此选项默认启用。
|
| –skel skeleton-dir | -k |
通常,默认用户配置文件从
/etc/skel
复制,但可以使用此选项指定另一个模板目录,此选项仅在与
-m
结合使用时有效。
|
| None | -M | 强制系统不自动创建主目录。 |
| –shell shell | -s |
设置用户的默认登录 shell,默认是
/bin/bash
。
|
| –uid UID | -u | 创建具有指定用户 ID 值(UID)的账户。 |
| –non-unique | -o | 允许重用单个 UID 编号,创建第二个或后续重用 UID 的账户时传递此选项。 |
| –system | -r |
指定创建系统账户,
useradd
不会为系统账户创建主目录,并为其分配小于 100 的 UID 值。
|
| –no-user-group | -N | 禁用为用户创建组。 |
一个完整的
useradd
命令示例如下:
# useradd -e 2012-12-31 -u 1012 pamela
此示例创建了一个用户名为
pamela
、UID 为 1012 的账户,该账户将于 2012 年 12 月 31 日过期。过期后,用户将无法登录该账户,但文件不会被删除,
root
可以重新激活该账户。
使用
useradd
创建的账户处于锁定状态,用户无法登录。要解锁账户,需要使用
passwd
命令。实际上,
useradd
(或其 GUI 前端)会修改
/etc/passwd
、
/etc/shadow
和
/etc/group
文件的内容。如果使用
--create-home
或
-m
选项(或该选项默认启用),程序会创建主目录并将
/etc/skel
中的文件复制到该位置。创建账户通常还会创建一个邮件假脱机文件,用于存储用户的传入电子邮件。
综上所述,无论是使用 GUI 工具还是命令行,都可以方便地在 Linux 系统中创建新账户。在创建过程中,合理选择组策略和设置强密码对于系统的安全性至关重要。同时,了解账户创建背后的文件修改和相关操作,有助于更好地管理 Linux 系统的用户和组。
5. 修改账户
在 Linux 系统中,创建好账户后,可能会因为各种原因需要对账户进行修改,比如更改用户的基本信息、密码、所属组等。以下介绍几种常见的修改账户的方法。
5.1 修改用户基本信息
可以使用
usermod
命令来修改用户的基本信息,该命令的选项与
useradd
有很多相似之处。例如,要修改用户
pamela
的主目录,可以使用以下命令:
# usermod -d /new/home/dir pamela
以下是
usermod
常用选项的说明:
| Option name | Option abbreviation | Effect |
| — | — | — |
| –comment comment | -c | 修改用户的注释字段(通常为全名)。 |
| –home home-dir | -d | 修改账户的主目录。 |
| –gid default-group | -g | 修改用户的默认组。 |
| –groups group[,…] | -G | 修改用户所属的组。 |
| –shell shell | -s | 修改用户的默认登录 shell。 |
| –uid UID | -u | 修改用户的 UID。 |
5.2 修改用户密码
修改用户密码是常见的操作,可以使用
passwd
命令。如果以
root
身份运行该命令,可以修改任何用户的密码;如果以普通用户身份运行,则只能修改自己的密码。
-
以 root 身份修改用户密码
:
# passwd pamela
输入该命令后,系统会提示你输入新密码并确认。
-
普通用户修改自己的密码
:
$ passwd
同样,系统会提示你输入当前密码(验证身份),然后输入新密码并确认。
5.3 修改账户过期信息
可以使用
chage
命令来修改账户的过期信息,例如设置密码过期时间、账户禁用日期等。以下是一些常见的用法:
- 设置用户
pamela
的密码在 30 天后过期:
# chage -M 30 pamela
-
设置用户
pamela的账户在 2024 - 12 - 31 过期:
# chage -E 2024-12-31 pamela
6. 删除账户
当某个用户不再需要使用系统账户时,需要将其删除。在删除账户时,需要考虑是否同时删除用户的主目录和邮件假脱机文件等相关数据。
6.1 使用
userdel
命令删除账户
userdel
命令用于删除用户账户,其基本语法为:
# userdel [选项] 用户名
以下是一些常用选项:
| 选项 | 作用 |
| — | — |
| -r | 删除用户账户的同时,删除其主目录和邮件假脱机文件。 |
例如,要删除用户
pamela
并同时删除其主目录和邮件假脱机文件,可以使用以下命令:
# userdel -r pamela
需要注意的是,删除账户是一个不可逆的操作,删除后用户的所有数据都将被永久删除,请谨慎操作。
7. 管理用户组
在 Linux 系统中,用户组的管理也是非常重要的,包括创建组、修改组信息、删除组以及管理用户与组的关系等。
7.1 创建用户组
可以使用
groupadd
命令来创建新的用户组,其基本语法为:
# groupadd [选项] 组名
以下是一些常用选项:
| 选项 | 作用 |
| — | — |
| -g GID | 指定组的 GID。 |
| -r | 创建系统组,系统组的 GID 通常小于 100。 |
例如,创建一个名为
developers
的组,并指定其 GID 为 1001:
# groupadd -g 1001 developers
7.2 修改用户组信息
使用
groupmod
命令可以修改用户组的信息,如组名、GID 等。以下是一些常用选项:
| Option name | Option abbreviation | Effect |
| — | — | — |
| –new-name new-group-name | -n | 修改组的名称。 |
| –gid GID | -g | 修改组的 GID。 |
例如,将组
developers
的名称修改为
programmers
:
# groupmod -n programmers developers
7.3 删除用户组
使用
groupdel
命令可以删除用户组,其基本语法为:
# groupdel 组名
例如,删除组
programmers
:
# groupdel programmers
需要注意的是,不能删除仍有用户属于该组的组,必须先将用户从该组中移除,或者将用户的默认组修改为其他组,才能删除该组。
7.4 管理用户与组的关系
可以使用
usermod
命令来管理用户与组的关系,例如将用户添加到某个组或从某个组中移除。
-
将用户添加到组
:
# usermod -aG 组名 用户名
例如,将用户
pamela
添加到
programmers
组:
# usermod -aG programmers pamela
这里的
-a
选项表示追加,
-G
选项用于指定组。
-
从组中移除用户
:
可以通过修改
/etc/group
文件手动将用户从组中移除,或者重新创建用户的组信息。
8. 总结
通过以上内容,我们全面了解了 Linux 系统中用户与组的管理方法,包括账户的基础操作(查看、创建、修改、删除)、组的管理(创建、修改、删除、用户与组关系管理)以及密码设置等重要方面。以下是一个简单的流程图,总结了整个用户与组管理的主要流程:
graph LR
A[账户基础] --> B[创建账户]
B --> B1[确定组策略]
B --> B2[选择好密码]
B --> B3[使用 GUI 工具创建]
B --> B4[使用命令行创建]
B --> C[修改账户]
C --> C1[修改基本信息]
C --> C2[修改密码]
C --> C3[修改过期信息]
C --> D[删除账户]
B --> E[管理用户组]
E --> E1[创建组]
E --> E2[修改组信息]
E --> E3[删除组]
E --> E4[管理用户与组关系]
在实际使用中,要根据具体需求合理选择管理方法,同时要始终牢记安全原则,特别是在使用
root
权限时要格外谨慎。通过合理的用户与组管理,可以提高系统的安全性和管理效率,确保 Linux 系统的稳定运行。
超级会员免费看
2040

被折叠的 条评论
为什么被折叠?



