25、Linux 用户与组管理全攻略

Linux 用户与组管理全攻略

1. 账户修改概述

在创建账户时,我们可以指定许多影响账户的选项,如为账户分配特定的 UID 号。但有时,在账户创建后,我们可能需要更改这些选项。Linux 为此提供了 GUI 和文本模式工具。在深入了解这些工具的操作细节之前,我们需要明白何时需要修改账户,并掌握检查用户是否当前登录的方法。

2. 决定何时修改账户

理想情况下,我们每次创建的账户都完美无缺,但实际并非总是如此。可能会因为缺乏创建完美账户所需的信息(如员工在公司的工作时长),或者在账户创建后需求发生了变化。常见的账户修改原因包括:
- 用户忘记密码:系统管理员可在不知原始密码的情况下为任何账户更改密码。
- 组关联需要更改:由于协作安排的重组。
- 账户过期日期需要更新:如学生注册了另一个学期,有时需要重新启用已过期的账户。
- UID 号需要与其他计算机同步:以便在计算机间共享文件或出于其他原因。
- 用户名需要更改:例如用户结婚,而网站策略在用户名中使用姓氏。
- 用户主目录需要更改:由于添加了磁盘空间,需要将部分用户的主目录移动到新位置。

3. 检查登录用户

有些账户更改操作,如果用户在更改时处于登录状态,可能会造成严重干扰,尤其是更改用户名和主目录。因此,我们应仅在用户注销时进行此类更改。以下工具可帮助我们检查当前使用计算机的用户:
- who :该实用程序可列出当前登录到计算机的用户,以及他们登录会话的一些详细信息,如终端标识符和登录日期。
- w :与 who 大致相似,但提供不同的详细信息,最显著的是它能识别每个会话中当前运行的程序。
- last :该程序会列出最近的登录会话,包括其开始和结束时间,或显示用户仍处于登录状态的通知。例如:

$ last
jennie   tty3          Sun Jan  8 12:43   still logged in   
jennie   tty3          Sun Jan  8 12:43 - 12:43  (00:00)    
jennie   tty2          Sun Jan  8 12:36   still logged in   
jennie   tty2          Sun Jan  8 12:36 - 12:36  (00:00)    

不过, last 仅包含文本模式的登录信息,对于识别使用 GUI 会话登录的用户,其作用有限。

4. 使用 GUI 工具修改账户

使用 GUI 工具修改账户的过程因工具而异。大多数 GUI 工具提供相似的选项,但有些更为完整。以 Fedora 的用户管理器为例,可在终端窗口中输入 system-config-users 来启动它。
修改账户的步骤如下:
1. 点击要修改的账户。
2. 从菜单中选择“文件” -> “属性”,或点击工具栏中的“属性”图标。此时会弹出一个类似图 14.3 的对话框,该对话框展示了账户属性,四个选项卡分别提供对特定类型数据的访问:
- 用户数据 :可调整账户的用户名、注释字段(标识为全名)、密码、主目录和用户的登录 shell。若输入的密码较弱,程序会发出警告并要求确认。
- 账户信息 :可启用或禁用账户过期功能(若启用,可设置过期日期),还能锁定或解锁密码。
- 密码信息 :可设置密码过期数据。这与账户过期数据不同,过期的账户将完全禁用,而过期的密码用户至少在一段时间内可以重置。可以设置各种更改值,如更改密码后用户必须再次更改密码的天数,还可设置强制用户下次登录时更改密码的选项(此选项在用户更改密码后将被清除)。
- :列出计算机上的所有组。勾选要让用户加入的组旁边的框,还可设置用户的主组,但只能设置为用户已所属的组。

用户也可通过桌面环境中的 GUI 选项更改自己的密码。例如,在 GNOME 中,点击屏幕右上角的用户名,选择“我的账户”,会弹出“用户账户”对话框,点击“密码”字段中的圆点,可在弹出的对话框中输入新密码。管理员也可使用此工具添加和修改账户,但功能远不如用户管理器强大。

5. 使用文本模式修改账户
5.1 修改密码

修改用户密码是常见的账户修改操作,可使用 passwd 程序。普通用户可直接输入该命令来更改自己的密码,但不能更改其他用户的密码。超级用户则可在命令后传递用户名来更改任何账户的密码,示例如下:

# passwd pamela
Changing password for user pamela.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

为安全起见,输入密码时屏幕不会显示输入内容。若两次输入的密码不匹配,程序将拒绝接受更改并提示重新输入。程序还会检查密码强度,拒绝接受过弱的密码。

5.2 其他账户修改

大多数其他账户修改操作可使用 usermod 程序。该命令与 useradd 类似,但用于修改现有账户。以下是 usermod 的一些重要选项:
| 选项名称 | 选项缩写 | 效果 |
| — | — | — |
| –append | -a | 与 --groups (-G) 一起使用时,将指定的组添加到用户现有的组集合中,而不是替换它们。 |
| –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,多个组名用逗号分隔。 |
| –login username | -l | 将账户的用户名更改为指定值。 |
| –lock | -L | 锁定账户的密码,阻止登录。 |
| –move-home | -m | 与 --home (-d) 一起使用时,将用户现有的主目录移动到新位置。 |
| –shell shell | -s | 设置用户的默认登录 shell。 |
| –uid UID | -u | 将账户的 UID 号更改为指定值。 |
| –non-unique | -o | 允许重用单个 UID 号(与 --uid/-u 一起使用)。 |
| –unlock | -U | 解锁已锁定的账户密码。 |

例如,以下命令对 luke 账户进行了三项更改:

# usermod -u 1072 -m -d /home2/luke luke
  • 将 UID 值更改为 1072。
  • 将账户的主目录更改为 /home2/luke
  • 将账户原始主目录的内容移动到新位置。

在更改 UID 值时需谨慎,因为 usermod 虽然会更改用户主目录和电子邮件文件等常见位置的文件的 UID 值,但可能会遗漏位于不寻常位置的用户文件。

6. 删除账户

删除账户有时与添加或修改账户同样重要。未使用的账户会占用磁盘空间,更重要的是,可能会被滥用。因此,应定期删除未使用的账户。在删除之前,我们需要了解删除账户时会发生什么,并确定具体的删除方式,以免因不当删除造成问题。可以使用 GUI 或文本模式工具来删除账户。

7. 避免账户删除陷阱

删除账户看似简单,但错误操作可能会立即或在未来引发问题。除了误删错误账户等明显问题外,还需考虑以下两个因素:
- 用户文件保存 :删除账户的一个原因是回收其占用的磁盘空间,但有时这样做可能不合适。用户的文件可能对用户自身或计算机所属组织非常有价值。因此,应仔细考虑是删除用户的主目录,还是将其移动到其他用户的主目录并更改其中文件的权限。用户的邮件队列(通常存储在 /var/spool/mail/username ,其中 username 是用户名)也是如此。
- UID 和 GID 重用 :删除账户后,其 UID 和 GID 可供重用。但在很多情况下,这些数字不会被重用,因为 Linux 根据当前最高值分配这些值。所以,除非删除了所有中间账户,否则删除非最高编号的当前用户后,其旧的 UID 和 GID 不会被重用。不过,这种删除情况可能会发生,或者我们可能会覆盖默认值。如果 UID 被重用,旧用户先前拥有的所有文件将突然显示为新用户拥有,这可能不会造成问题,但可能会导致对文件创建者的混淆,在某些情况下,甚至可能使新用户因旧文件包含其不应拥有的信息或位于其不应访问的目录中而受到不当行为的怀疑。

若要避免因 UID 或 GID 重用导致新用户产生混淆或被指责不当行为的可能性,可以使用 find 命令结合 -uid -gid 选项来查找具有特定 UID 或 GID 值的所有文件,例如:

# find / -uid 1004

此命令将查找计算机上 UID 为 1004 的所有文件(查找 GID 的操作类似,使用 -gid 选项)。然后可以使用 chown 重新分配这些文件的所有权或删除它们。通常,应在删除或重新分配用户主目录的所有权后再执行此命令,因为主目录中可能包含大量匹配的文件。

8. 使用 GUI 工具删除账户

使用 GUI 删除账户相对直观,但不同发行版的操作细节有所不同。以 Fedora 的用户管理器( system-config-user )为例,删除账户的步骤如下:
1. 选择要删除的账户。
2. 点击工具栏中的“删除”按钮,或从菜单中选择“编辑” -> “删除”。此时会弹出确认对话框,可根据需要勾选或取消勾选删除用户主目录的选项,确认操作后点击“是”,账户将立即被删除。

如果用户当前处于登录状态,用户管理器会在确认对话框中提示,但仍可删除账户,不过用户不会立即注销。

9. 使用文本模式删除账户

使用 userdel 命令可在文本模式下删除账户。最简单的形式是在命令后传递用户名:

# userdel pamela

该程序不会提示确认,直接删除账户,但默认情况下不会删除用户的主目录。若要删除主目录,需传递 --remove (-r) 选项。

如果用户当前处于登录状态, userdel 会通知并停止操作。可以传递 --force (-f) 选项强制删除账户。若要同时强制删除账户并删除用户的文件,可同时传递两个选项:

# userdel -rf pamela
userdel: user pamela is currently logged in

程序虽会提示用户正在登录,但仍会删除账户和文件。

10. 组管理

在很多方面,组与账户类似,它们在相似的文件中定义,使用相似的实用程序进行管理。组也与账户相关联,因为账户包含组定义。有时,我们需要为特定目的创建、删除或修改组,如采用项目组策略。可以使用 GUI 或文本模式工具来完成这些操作。

11. 使用 GUI 工具管理组

许多 GUI 账户维护工具(如 Fedora 的用户管理器)提供类似于用户管理工具的组管理工具。用户管理器窗口包含“用户”和“组”选项卡,管理组的步骤如下:
1. 点击“组”选项卡,显示组管理界面。
2. 添加组 :点击“添加组”,在弹出的对话框中指定组名。
3. 修改组 :选择要修改的组,点击“属性”,选择“组用户”选项卡,在列出的用户列表中找到要添加到组的用户,选择并点击“确定”。也可通过修改每个用户的组关联来管理组的成员。
4. 删除组 :选择要删除的组,点击“删除”按钮,确认操作后即可删除组。

12. 使用文本模式管理组
12.1 创建组

使用 groupadd 命令在文本模式下创建组,该命令与 useradd 类似,但选项较少。以下是 groupadd 的重要选项:
| 选项名称 | 选项缩写 | 效果 |
| — | — | — |
| –gid GID | -g | 可指定特定的 GID,若省略, groupadd 将使用下一个可用的 GID。 |
| –non-unique | -o | 通常,指定的 GID 必须未被其他组使用,但 -o 参数可覆盖此行为,允许创建多个共享一个 GID 的组。 |
| –system | -r | 指示 groupadd 创建系统组,系统组的 GID 小于 500 或 1000(取决于发行版),非系统组通常用作用户私有组。 |
| –force | -f | 通常,若尝试创建已存在的组, groupadd 会返回错误消息,此参数可抑制该错误消息。 |

12.2 修改组

修改现有组有三种方法:
- 使用 usermod 命令 usermod 命令包含 --groups (-G) 选项,可逐个用户地更改组关联,从而调整特定组的成员。
- 使用 groupmod 命令 :可使用 --gid (-g) --non-unique (-o) 选项(与 groupadd 中的选项相同),以及 --new-name name (-n name) 选项来更改组的名称,但不能更改组的成员。
- 直接编辑 /etc/group 文件 :该文件存储组定义。此方法在需要将多个用户添加到新组时有时很方便,但有一定风险,因为误按按键可能会损坏文件。

通过以上详细介绍,相信大家对 Linux 系统中的用户与组管理有了全面的了解,无论是使用 GUI 工具还是文本模式工具,都能根据实际需求灵活操作。

Linux 用户与组管理全攻略

13. 管理流程总结

为了更清晰地展示 Linux 用户与组管理的整体流程,下面给出一个 mermaid 格式的流程图:

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;

    A([开始]):::startend --> B(账户管理):::process
    B --> C{是否修改账户?}:::decision
    C -->|是| D(确定修改原因):::process
    D --> E{选择修改方式}:::decision
    E -->|GUI 工具| F(使用 Fedora 用户管理器等操作):::process
    E -->|文本模式| G(使用 passwd、usermod 等命令):::process
    C -->|否| H{是否删除账户?}:::decision
    H -->|是| I(避免删除陷阱):::process
    I --> J{选择删除方式}:::decision
    J -->|GUI 工具| K(使用 Fedora 用户管理器删除):::process
    J -->|文本模式| L(使用 userdel 命令删除):::process
    H -->|否| M(组管理):::process
    M --> N{是否创建组?}:::decision
    N -->|是| O{选择创建方式}:::decision
    O -->|GUI 工具| P(使用 Fedora 用户管理器创建):::process
    O -->|文本模式| Q(使用 groupadd 命令创建):::process
    N -->|否| R{是否修改组?}:::decision
    R -->|是| S(选择修改方法):::process
    S --> T(使用 usermod、groupmod 或编辑 /etc/group):::process
    R -->|否| U{是否删除组?}:::decision
    U -->|是| V{选择删除方式}:::decision
    V -->|GUI 工具| W(使用 Fedora 用户管理器删除):::process
    V -->|文本模式| X(直接操作相关文件):::process
    U -->|否| Y([结束]):::startend
    F --> Y
    G --> Y
    K --> Y
    L --> Y
    P --> Y
    Q --> Y
    T --> Y
    W --> Y
    X --> Y

这个流程图涵盖了从开始的账户管理到组管理的整个过程,包括创建、修改和删除账户与组的不同操作路径。

14. 常见问题及解决办法

在 Linux 用户与组管理过程中,可能会遇到一些常见问题,以下是这些问题及对应的解决办法:
| 问题描述 | 可能原因 | 解决办法 |
| — | — | — |
| 使用 passwd 更改密码时提示权限不足 | 普通用户尝试更改其他用户密码 | 使用超级用户权限执行命令,或让用户自行更改密码 |
| usermod 更改 UID 后部分文件 UID 未更新 | 文件位于不寻常位置 | 使用 find 命令查找旧 UID 的文件,再用 chown 更改所有权 |
| groupadd 创建组时提示 GID 已存在 | 指定的 GID 已被其他组使用 | 不指定 GID 让系统自动分配,或使用 --non-unique 选项 |
| userdel 删除账户时无法删除主目录 | 主目录有文件被占用或权限问题 | 确保用户已注销,检查文件权限,或使用 --force 选项 |

15. 安全注意事项

在进行 Linux 用户与组管理时,安全是至关重要的。以下是一些安全注意事项:
- 密码管理
- 要求用户设置强密码,避免使用简单的密码,如生日、连续数字等。
- 定期更新密码,可通过 passwd 命令的相关选项设置密码过期时间。
- 权限管理
- 仅授予用户完成工作所需的最小权限,遵循最小权限原则。
- 定期审查用户和组的权限,确保没有不必要的高权限。
- 账户删除
- 在删除账户前,备份重要文件,避免数据丢失。
- 谨慎处理 UID 和 GID 重用问题,防止文件所有权混乱。

16. 总结与建议

通过对 Linux 用户与组管理的全面介绍,我们了解了从账户的创建、修改、删除到组的管理等一系列操作。无论是使用 GUI 工具还是文本模式命令,都各有其优势和适用场景。

  • 对于初学者 :建议先使用 GUI 工具进行操作,如 Fedora 的用户管理器,它直观易用,能帮助快速熟悉基本的管理流程。
  • 对于有经验的用户 :文本模式命令提供了更高效和灵活的操作方式,可根据具体需求编写脚本实现自动化管理。

在实际应用中,要根据不同的场景和需求选择合适的管理方法,同时始终关注安全问题,确保系统的稳定和数据的安全。希望这些内容能帮助大家更好地管理 Linux 系统中的用户与组。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值