写在前面
为什么要写这篇博客?
小编最近搞了一台小服务器,然后要给同事们用,正常运维这个服务器就是给同事们添加账号,然后设置权限,这样子只是一些简单的操作,如果服务器出问题了,也不知道怎么去解决,所以小编想深入了解一下linux系统,本篇博客就从简单的添加用户开始入手,主要有以下几个问题:
- 如何添加用户?
- 用户背添加到哪里?实际的存储路径是啥?添加到组里是什么意思?
- 组是什么意思?为什么需要组?系统有哪些默认组?
- 路径中的home、bin等等分别代表什么意思?为什么会有这个的存在?
对用户的操作(增、删、改、查):
- 增加什么?用户名,用户id,用户密码,用户出生组,用户目录,用户权限等;
- 删除什么?
- 修改什么?用户名,用户id,用户密码,用户所在组,用户目录,用户权限等;
- 查找什么?用户名,用户id,用户密码,用户所在组,用户目录,用户权限等;
【Linux学习】Ubuntu对用户进行管理
在 Linux 系统中,用户管理是维护系统安全和资源分配的核心任务之一。无论是个人电脑还是服务器,合理的用户权限配置可以防止误操作、保护敏感数据,并支持多用户协作。本文将以 Ubuntu 为例,详细介绍用户管理的常用操作,涵盖创建、修改、删除用户,以及用户组和权限配置的技巧。
一、为什么需要用户管理?
- 系统安全:不同用户拥有不同权限,避免普通用户执行高危操作。
- 资源隔离:限制用户对文件、目录和进程的访问范围。
- 多用户协作:服务器环境中,多个用户可能共享同一系统,需独立配置环境。
二、用户管理基础操作
以下表格详细列举了用户与组管理命令的参数、缩写来源、示例及详细解释,涵盖 创建、修改、权限控制、安全策略 等核心操作。
(一)用户管理
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 |
创建用户时直接加入 sudo 和 developers 组(覆盖原有附加组)。 |
|
-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. 注意事项
- 权限最小化:
- 普通用户不应拥有
sudo
权限,除非必要。 - 服务账户应禁用 Shell(
/sbin/nologin
)。
- 普通用户不应拥有
- 安全审计:
- 定期检查
/etc/passwd
和/etc/shadow
,清理无效账户。 - 使用
last
或lastlog
监控用户登录记录。
- 定期检查
- 备份数据:
- 删除用户前备份家目录(
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 组成员为 alice 、bob 、charlie (覆盖原有成员列表)。 |
|
-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
组仅包含alice
和charlie
,原成员bob
被移除。
场景三:删除组
sudo groupdel developers # 删除空组
- 前提:需先移除所有成员(
gpasswd -d
或groupmems -d
)。
场景四:临时切换主组
groups alice # 输出:alice : alice developers
newgrp developers # 切换主组
groups # 输出:alice : developers alice
- 用途:临时以新主组身份创建文件(文件所属组自动设为
developers
)。
4. 配置文件说明
文件 | 作用 |
---|---|
/etc/group |
存储组的基本信息(组名、GID、成员列表)。 |
/etc/gshadow |
存储组密码和管理员列表(仅 root 可读)。 |
5. 注意事项
- 系统保留组:
- 不要修改
root
、sudo
、adm
等系统默认组的 GID 或成员。
- 不要修改
- 依赖关系:
- 删除组前需确保无文件或进程依赖该组(检查
find / -gid 1005
)。
- 删除组前需确保无文件或进程依赖该组(检查
- 远程组管理:
- 若使用 LDAP/NIS,需通过对应工具(如
ldapmodify
)修改组信息。
- 若使用 LDAP/NIS,需通过对应工具(如
(三)查询与验证命令
命令 | 参数 | 缩写来源 | 示例 | 示例详细解释 |
---|---|---|---|---|
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/passwd 中 dev01 的信息(输出格式: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,看到这里的朋友想必一定累了吧,小编也累了,毕竟写了一万多字呢,希望本篇博客对你有帮助!