Skip to main content

Linux 用户与权限

Linux 用户管理

Linux 系统的用户管理是系统安全与资源分配的核心部分。用户通过命令行工具(如 useradd、userdel、passwd 等)和配置文件(如 /etc/passwd、/etc/shadow 等)完成用户账户的创建、修改和删除。

一. 用户分类

在 Linux 中,用户分为以下三类:

  1. 超级用户(root)
    • UID 为 0,拥有最高权限,可管理系统所有资源。
    • 默认账户为 root,通常用于系统维护和特权操作。
  2. 系统用户(服务用户)
    • UID 范围为 1-999,用于运行系统服务(如 httpdmysql)。
    • 通常不允许登录系统,登录 shell 设置为 /sbin/nologin
    • 注意:不同发行版对“系统 UID / 普通用户 UID”范围的规定不同(例如某些系统默认把小于 1000 的 UID 留给系统账号)。想确认本机范围可查看 /etc/login.defs 中的 UID_MIN / UID_MAXGID_MIN / GID_MAX
  3. 普通用户
    • UID 范围为 1000-65535,用于日常操作和资源访问。
    • 需通过 sudo 获取额外权限执行特权命令。

二. 用户管理命令

1. 创建用户

(1) 使用 useradd 命令

sudo useradd [选项] 用户名
  • 常用选项
    • -m:自动创建用户的家目录(默认位于 /home/用户名)。
    • -s SHELL:指定用户默认的登录 Shell(如 /bin/bash)。
    • -g GID:指定用户的主组(GID 对应的组名或 ID)。
    • -G G1,G2:添加用户到多个附加组。
    • -u UID:手动指定用户的 UID。
    • -c "注释":添加用户描述信息(如 "Development User")。
    • -r:创建系统用户(UID 自动分配在 1-999 范围内)。

示例

sudo useradd -m -s /bin/bash -g developers -G sudo,adm -u 1005 -c "Dev User" devuser

创建一个普通用户 devuser,家目录为 /home/devuser,主组为 developers,附加组为 sudoadm,UID 为 1005,描述为 "Dev User"。

(2) 使用 adduser 命令

sudo adduser 用户名
  • adduseruseradd 的交互式封装工具,创建用户时会提示输入密码、确认信息等,适合新手使用。

2. 设置密码

使用 passwd 命令为用户设置或修改密码:

sudo passwd 用户名
  • 其他选项
    • passwd -l 用户名:锁定用户账户。
    • passwd -u 用户名:解锁用户账户。
    • passwd -e 用户名:强制用户下次登录时修改密码。

示例

sudo passwd devuser

执行后需输入并确认新密码。若未指定用户名,则默认修改当前用户的密码。

3. 修改信息

使用 usermod 命令调整用户属性:

sudo usermod [选项] 用户名
  • 常用选项
    • -l 新用户名:修改用户名。
    • -d 新家目录:修改用户的家目录(需配合 -m 选项迁移旧目录)。
    • -g 新主组:更改用户的主组。
    • -G 新附加组:替换用户的附加组(原附加组会被清除)。
    • -aG 新附加组:追加用户到附加组(不删除原有附加组)。
    • -s 新Shell:修改默认 Shell。

示例

sudo usermod -aG docker devuser  # 将 devuser 添加到 docker 组
sudo usermod -d /newhome/devuser -m devuser  # 迁移家目录到 /newhome/devuser

4. 删除用户

使用 userdeldeluser 命令删除用户:

sudo userdel [选项] 用户名
  • 常用选项
    • -r:同时删除用户的家目录和邮件目录(/var/spool/mail/用户名)。
    • -f:强制删除用户(即使用户已登录)。

示例

sudo userdel -r devuser  # 删除用户及家目录

三. 用户组管理

1. 创建用户组

sudo groupadd [选项] 组名
  • 常用选项
    • -g GID:手动指定组 ID。
    • -r:创建系统组(GID 自动分配在 1-999 范围内)。

示例

sudo groupadd -g 1005 developers  # 创建 GID 为 1005 的组

2. 删除用户组

sudo groupdel 组名
  • 注意事项
    • 无法删除当前存在成员的组。
    • 删除组前需先移除其所有成员(通过 usermod -Ggpasswd -M)。

3. 修改用户组成员

从组移除用户

sudo gpasswd -d 用户名 组名

添加用户到组

sudo usermod -aG 组名 用户名

或使用 gpasswd

sudo gpasswd -a 用户名 组名

四. 用户与用户组的配置文件

1. /etc/passwd

  • 作用:存储用户基本信息(所有用户均可读)。

示例

devuser:x:1005:1005::/home/devuser:/bin/bash

格式

用户名:密码占位符:UID:GID:描述信息:家目录:默认Shell

2. /etc/shadow

  • 作用:存储用户密码加密信息(仅 root 可读)。

示例

devuser:$6$randomsalt$hash:19123:0:99999:7:::

格式

用户名:加密密码:上次修改时间:最小间隔:最大间隔:警告期:宽限期:过期日期:保留

3. /etc/group

  • 作用:存储用户组信息。

示例

developers:x:1005:devuser,root

格式

组名:密码占位符:GID:组成员列表

4. /etc/gshadow

  • 作用:存储用户组密码信息(仅 root 可读)。

格式

组名:加密密码:组管理员:组成员

5. /etc/skel

/etc/skel 目录是Linux 系统中用于存储新用户默认配置文件模板的目录。

当创建一个新用户时,/etc/skel 目录下的所有文件和子目录都会被复制到新用户的家目录中,为新用户提供一个初始化的环境。

简单来说,它就像一个“用户模板”目录,方便系统管理员为新用户预设一些常用的配置文件,比如 .bashrc.profile 等。

五. 用户管理的注意事项

  1. 安全实践
    • 不要随意使用 777 权限,避免安全风险。
    • 定期检查 /etc/passwd/etc/shadow 的权限(chown root:root /etc/shadow && chmod 600 /etc/shadow)。
  2. 系统用户与普通用户
    • 系统用户(UID 1-999)通常用于运行服务,禁止登录。
    • 普通用户(UID ≥1000)用于日常操作,需通过 sudo 提权。
  3. 用户切换
    • 使用 su - 用户名 切换用户并加载环境变量。
    • 使用 sudo -i 切换到 root 用户(需当前用户有 sudo 权限)。

六. 综合案例

创建用户并赋予 sudo 权限

# 创建用户并自动创建家目录
sudo useradd -m -s /bin/bash devuser

# 设置密码
sudo passwd devuser

# 将用户添加到 sudo 组
sudo usermod -aG sudo devuser

# 验证用户信息
id devuser  # 输出:uid=1005(devuser) gid=1005(devuser) groups=1005(devuser),27(sudo)

删除用户及其家目录

sudo userdel -r devuser