【Linux学习】Ubuntu对用户进行管理

发布于:2025-05-19 ⋅ 阅读:(18) ⋅ 点赞:(0)

写在前面

为什么要写这篇博客?

小编最近搞了一台小服务器,然后要给同事们用,正常运维这个服务器就是给同事们添加账号,然后设置权限,这样子只是一些简单的操作,如果服务器出问题了,也不知道怎么去解决,所以小编想深入了解一下linux系统,本篇博客就从简单的添加用户开始入手,主要有以下几个问题:

  • 如何添加用户?
  • 用户背添加到哪里?实际的存储路径是啥?添加到组里是什么意思?
  • 组是什么意思?为什么需要组?系统有哪些默认组?
  • 路径中的home、bin等等分别代表什么意思?为什么会有这个的存在?

对用户的操作(增、删、改、查):

  • 增加什么?用户名,用户id,用户密码,用户出生组,用户目录,用户权限等;
  • 删除什么?
  • 修改什么?用户名,用户id,用户密码,用户所在组,用户目录,用户权限等;
  • 查找什么?用户名,用户id,用户密码,用户所在组,用户目录,用户权限等;

【Linux学习】Ubuntu对用户进行管理

在 Linux 系统中,用户管理是维护系统安全和资源分配的核心任务之一。无论是个人电脑还是服务器,合理的用户权限配置可以防止误操作、保护敏感数据,并支持多用户协作。本文将以 Ubuntu 为例,详细介绍用户管理的常用操作,涵盖创建、修改、删除用户,以及用户组和权限配置的技巧。


一、为什么需要用户管理?

  1. 系统安全:不同用户拥有不同权限,避免普通用户执行高危操作。
  2. 资源隔离:限制用户对文件、目录和进程的访问范围。
  3. 多用户协作:服务器环境中,多个用户可能共享同一系统,需独立配置环境。

二、用户管理基础操作

以下表格详细列举了用户与组管理命令的参数、缩写来源、示例及详细解释,涵盖 创建、修改、权限控制、安全策略 等核心操作。

(一)用户管理

1. 用户管理命令表格

以下为 Linux Ubuntu 系统中 用户管理 的核心命令及参数总结,涵盖 创建、删除、修改、权限分配、密码策略 等操作,并附有示例与详细解释。

命令 参数 缩写来源 示例 示例详细解释
useradd -m make home directory sudo useradd -m alice 创建用户 alice,并自动生成家目录 /home/alice
-d directory sudo useradd -d /data/alice -m alice 指定家目录为 /data/alice(需确保目录存在或为空)。
-s shell sudo useradd -s /sbin/nologin alice 设置用户默认 Shell 为禁止登录(适用于服务账户)。
-G Groups sudo useradd -G sudo,developers alice 创建用户时直接加入 sudodevelopers 组(覆盖原有附加组)。
-u user ID sudo useradd -u 1500 alice 指定用户 UID 为 1500(避免与系统保留 UID 0-999 冲突)。
-e expire date sudo useradd -e 2024-12-31 alice 设置账户过期时间为 2024-12-31,过期后用户无法登录。
adduser (交互式) 无缩写(封装工具) sudo adduser alice 交互式创建用户:自动生成家目录、提示设置密码,并填写用户信息(全名、电话等)。
usermod -l login name sudo usermod -l alice_new alice 将用户名从 alice 修改为 alice_new(需手动更新家目录名)。
-d directory sudo usermod -d /new_home/alice -m alice 修改家目录为 /new_home/alice-m 表示迁移原家目录内容。
-g group sudo usermod -g developers alice 修改用户主组为 developers(需目标组已存在)。
-aG append Groups sudo usermod -aG docker alice 将用户追加到 docker 组(保留原有附加组)。
-L Lock sudo usermod -L alice 锁定用户账户(禁止登录),在 /etc/shadow 的密码字段前添加 !
-U Unlock sudo usermod -U alice 解锁用户账户(需未被其他机制锁定)。
userdel -r remove files sudo userdel -r alice 删除用户 alice 及其家目录和邮件池(谨慎操作,数据不可恢复)。
passwd -l lock sudo passwd -l alice 锁定用户密码(等同于 usermod -L)。
-u unlock sudo passwd -u alice 解锁用户密码(需未被其他方式锁定)。
-e expire sudo passwd -e alice 强制用户下次登录时修改密码(适用于首次创建账户后)。
-S Status sudo passwd -S alice 显示账户状态:密码设置时间、有效期、警告天数等。
chage -E Expiry date sudo chage -E 2024-12-31 alice 设置账户过期时间(与 useradd -e 功能相同)。
-M Max days sudo chage -M 90 alice 密码最长有效期为 90 天,到期后必须修改。
-W Warn days sudo chage -W 7 alice 密码过期前 7 天提醒用户。
-I Inactive days sudo chage -I 5 alice 密码过期后,账户宽限期为 5 天,超时后完全锁定。
id -u user ID id -u alice 显示用户 UID(输出 1001)。
-g group ID id -g alice 显示用户主组 GID(输出 1001)。
-Gn Groups names id -Gn alice 显示用户所属的所有组名(输出 alice sudo developers)。
groups - groups alice 显示用户主组和附加组(输出 alice : alice sudo developers)。
getent - get entries getent passwd alice 查询用户详细信息(本地或远程用户),输出格式:alice:x:1001:1001::/home/alice:/bin/bash

2. 关键操作场景说明
场景一:创建用户并配置权限
sudo useradd -m -s /bin/bash -G sudo,developers -u 1500 alice  # 创建用户
sudo passwd alice                                             # 设置密码
  • 验证
    id alice  # 输出:uid=1500(alice) gid=1500(alice) groups=1500(alice),27(sudo),1001(developers)
    
场景二:修改用户属性
sudo usermod -l alice_new -d /home/alice_new -m alice  # 重命名用户并迁移家目录
sudo usermod -aG docker alice_new                      # 追加到 docker 组
场景三:设置密码策略
sudo chage -M 60 -W 7 -E 2024-12-31 alice  # 密码 60 天过期,过期前 7 天提醒,账户年底锁定
场景四:锁定并删除用户
sudo usermod -L alice          # 锁定账户
sudo userdel -r alice          # 删除用户及数据

3. 配置文件说明
文件 作用
/etc/passwd 存储用户基本信息(UID、GID、家目录、Shell 等)。
/etc/shadow 存储用户密码哈希及安全策略(仅 root 可读)。
/etc/login.defs 定义用户创建的默认规则(如 UID/GID 范围、密码策略)。

4. 注意事项
  1. 权限最小化
    • 普通用户不应拥有 sudo 权限,除非必要。
    • 服务账户应禁用 Shell(/sbin/nologin)。
  2. 安全审计
    • 定期检查 /etc/passwd/etc/shadow,清理无效账户。
    • 使用 lastlastlog 监控用户登录记录。
  3. 备份数据
    • 删除用户前备份家目录(tar -czf alice_backup.tar.gz /home/alice)。
5. 其他问题
(1)新创建的用户目录在哪里?
  • 默认路径
    在 Ubuntu 中,新用户的目录默认位于 /home/用户名。例如,用户 dev01 的家目录是 /home/dev01
  • 例外情况
    若使用 useradd 命令时未加 -m 参数(如 sudo useradd username),则不会自动创建家目录。需手动创建或通过 -m 参数强制生成。

(2)多硬盘服务器如何指定用户目录?

如果服务器挂载了多个硬盘,可以通过以下方式指定用户家目录到其他硬盘分区:

方法一:创建用户时直接指定路径
sudo useradd -m -d /mnt/data/username -s /bin/bash username
  • -d:指定家目录路径(需提前创建挂载点,例如 /mnt/data 挂载到第二块硬盘)。
  • 确保目标目录权限正确:sudo chown username:username /mnt/data/username
方法二:挂载硬盘到 /home 子目录

将第二块硬盘挂载到 /home 的子路径(如 /home2),然后创建用户时指定路径:

sudo mkdir /home2
sudo mount /dev/sdb1 /home2  # 假设第二块硬盘为 /dev/sdb1
sudo useradd -m -d /home2/username username
方法三:修改现有用户的家目录
sudo usermod -d /new/path/username -m username
  • -m 参数会将原家目录内容移动到新路径。
总结与操作建议
  • 用户目录管理:在多硬盘环境中,建议将用户目录统一挂载到独立分区(如 /data),便于备份和扩容。
  • 权限控制:通过组管理(如 developers)批量分配权限,而非单独配置用户。
  • 安全审计:定期检查 /etc/passwd/etc/group,删除无用账户和组。

示例命令:将第二块硬盘挂载到 /data 并创建用户

# 格式化并挂载硬盘(假设为 /dev/sdb1)
sudo mkfs.ext4 /dev/sdb1
sudo mkdir /data
sudo mount /dev/sdb1 /data

# 创建用户并指定家目录
sudo useradd -m -d /data/dev02 -s /bin/bash dev02
sudo passwd dev02

(3) 新创建的用户默认在哪个组?
  • 主组(Primary Group)
    Ubuntu 中,新用户默认会创建一个与用户名同名的主组(例如用户 dev01 的主组为 dev01)。
  • 附加组(Supplementary Groups)
    默认情况下,新用户不会自动加入 sudo 等特权组,需手动添加(如 sudo usermod -aG sudo dev01)。

(二)组管理

1. 组管理命令详解表

以下为 Linux Ubuntu 系统中 组管理 的核心命令及参数总结,涵盖 创建、删除、修改、查询 等操作,并附有示例与详细解释。

命令 参数 缩写来源 示例 示例详细解释
groupadd -g group ID sudo groupadd -g 1005 developers 创建组 developers 并指定 GID 为 1005(避免与系统保留 GID 0-999 冲突)。
-r reserved (system) sudo groupadd -r system_group 创建系统组(默认分配 GID < 1000)。
groupmod -n new name sudo groupmod -n new_dev developers 将组名从 developers 修改为 new_dev(需确保无进程依赖原组名)。
-g group ID sudo groupmod -g 2000 new_dev 修改组 new_dev 的 GID 为 2000(需手动更新文件所属组)。
groupdel - sudo groupdel new_dev 删除组 new_dev(组必须为空,否则需先移除成员)。
gpasswd -a add user sudo gpasswd -a alice developers 将用户 alice 添加到 developers 组(等同于 usermod -aG)。
-d delete user sudo gpasswd -d bob developers developers 组中移除用户 bob
-M Members sudo gpasswd -M alice,bob,charlie developers 批量设置 developers 组成员为 alicebobcharlie(覆盖原有成员列表)。
-r remove password sudo gpasswd -r developers 移除组 developers 的密码(若已设置密码认证)。
getent - get entries getent group developers 查询组 developers 的详细信息(本地组或远程组,如 LDAP/NIS)。
groups - groups alice 显示用户 alice 所属的所有组(主组 + 附加组)。
groupmems -l list sudo groupmems -g developers -l 列出 developers 组的所有成员(需 sudo 权限)。
-d delete sudo groupmems -g developers -d alice developers 组中移除用户 alice
newgrp - new group newgrp developers 临时切换当前用户的主组为 developers(需用户属于该组且组密码已设置或无需密码)。
cat - catenate cat /etc/group | grep developers 直接查看 /etc/group 文件中 developers 组的配置信息(仅本地组)。

2. 服务器默认组有哪些?

Ubuntu 系统预装的主要默认组及其用途:

组名 描述
root 超级管理员组,拥有系统完全控制权。
sudo 组成员可通过 sudo 执行特权命令。
adm 允许查看系统日志文件(如 /var/log)。
cdrom 访问光驱设备。
dialout 访问串行端口(如旧式调制解调器)。
plugdev 访问可移动存储设备(如U盘)。
lpadmin 配置打印机。
users 普通用户默认组(部分发行版),Ubuntu 默认不强制用户加入此组。

3. 关键操作场景说明
场景一:创建组并添加成员
sudo groupadd -g 1005 developers     # 创建组
sudo gpasswd -a alice developers     # 添加用户
sudo gpasswd -a bob developers       # 添加用户
  • 验证
    getent group developers            # 输出:developers:x:1005:alice,bob
    
场景二:批量修改组成员
sudo gpasswd -M alice,charlie developers  # 覆盖原有成员
  • 结果
    developers 组仅包含 alicecharlie,原成员 bob 被移除。
场景三:删除组
sudo groupdel developers             # 删除空组
  • 前提:需先移除所有成员(gpasswd -dgroupmems -d)。
场景四:临时切换主组
groups alice                         # 输出:alice : alice developers
newgrp developers                    # 切换主组
groups                               # 输出:alice : developers alice
  • 用途:临时以新主组身份创建文件(文件所属组自动设为 developers)。

4. 配置文件说明
文件 作用
/etc/group 存储组的基本信息(组名、GID、成员列表)。
/etc/gshadow 存储组密码和管理员列表(仅 root 可读)。

5. 注意事项
  1. 系统保留组
    • 不要修改 rootsudoadm 等系统默认组的 GID 或成员。
  2. 依赖关系
    • 删除组前需确保无文件或进程依赖该组(检查 find / -gid 1005)。
  3. 远程组管理
    • 若使用 LDAP/NIS,需通过对应工具(如 ldapmodify)修改组信息。

(三)查询与验证命令

命令 参数 缩写来源 示例 示例详细解释
id -u user ID id -u dev01 显示用户 dev01 的 UID(例如输出 1001)。
-g group ID id -g dev01 显示用户主组 GID(例如输出 1001)。
-Gn Groups names id -Gn dev01 显示用户所属的所有组名(例如输出 dev01 sudo)。
groups - groups dev01 显示用户主组和附加组(例如输出 dev01 : dev01 sudo)。
getent - get entries getent passwd dev01 查询 /etc/passwddev01 的信息(输出格式:dev01:x:1001:1001::/home/dev01:/bin/bash)。
last - last dev01 查看用户 dev01 的登录历史(包括时间、IP、终端等)。
who - who 显示当前登录系统的用户列表。

三、服务器目录结构及其作用

(一)核心目录及其用途

Linux 系统目录遵循 FHS(文件系统层次结构标准),以下是核心目录及其用途:

目录 作用
/ 根目录,所有其他目录的起点。
/bin 存放系统基础命令(如 ls, cp),所有用户可执行。
/etc 系统全局配置文件(如用户账户、网络配置)。
/home 普通用户的家目录,每个用户独立子目录。
/root 超级管理员 root 的家目录。
/var 存放动态数据(日志、数据库、邮件等)。
/tmp 临时文件,重启后清空。
/usr 用户安装的软件和只读数据,包含 /usr/bin(用户级命令)、/usr/lib 等。
/boot 系统启动文件(内核、引导加载程序)。
/dev 设备文件(如硬盘 /dev/sda、终端 /dev/tty)。
/proc 虚拟文件系统,显示内核和进程信息。
/opt 可选的应用软件包(如第三方商业软件)。
/sbin 系统管理命令(如 fdisk, reboot),需 root 权限执行。

(二)核心配置文件说明

文件 作用 字段示例解析
/etc/passwd 存储用户基本信息。 dev01:x:1001:1001:Developer User:/home/dev01:/bin/bash
用户名、密码占位符、UID、GID、描述、家目录、Shell。
/etc/shadow 存储用户密码哈希及安全策略(仅 root 可读)。 dev01:$6$...:19147:0:99999:7:::
密码哈希、最后修改天数、最短有效期、最长有效期、警告天数等。
/etc/group 存储组信息(组名、GID、组成员)。 developers:x:1005:dev01,dev02
组名、密码占位符、GID、组成员列表。
/etc/sudoers 配置 sudo 权限(通过 visudo 安全编辑)。 %sudo ALL=(ALL:ALL) ALL
允许 sudo 组成员以任意用户身份执行任意命令。

OK,看到这里的朋友想必一定累了吧,小编也累了,毕竟写了一万多字呢,希望本篇博客对你有帮助!


网站公告

今日签到

点亮在社区的每一天
去签到