Linux系统用户和用户组管理详细介绍

文章目录

  • 1. 用户与用户组基本概念
    • 1.1 用户类型
    • 1.2 用户组
  • 2. 用户管理操作
    • 2.1 创建用户
    • 2.2 设置用户密码
    • 2.3 删除用户
    • 2.4 修改用户属性
  • 3. 用户组管理操作
    • 3.1 创建用户组
    • 3.2 删除用户组
    • 3.3 修改用户组
    • 3.4 用户与组的关联
  • 4. 权限管理
    • 4.1 文件权限模型
    • 4.2 修改文件权限
    • 4.3 高级权限控制
  • 5. sudo 与 su
    • 5.1 sudo
    • 5.2 su
  • 6. 配置文件与安全实践
    • 6.1 关键配置文件
    • 6.2 安全实践
  • 7. 常见问题与解决方案
    • 7.1 用户无法登录
    • 7.2 权限未生效
    • 7.3 删除用户时报错
  • 8. 示例:创建普通用户:`redisadm:redisgrp`
  • 9. 总结

1. 用户与用户组基本概念

1.1 用户类型

  • Root 用户(UID 0):
    系统管理员账户,拥有最高权限,可执行所有操作(如安装软件、修改系统配置等)。
    风险提示:日常操作应避免直接使用 root,推荐通过 sudo 提权。

  • 普通用户(UID ≥ 1000):
    用于日常操作和应用服务,权限受限,需通过 sudosu 获取更高权限。

  • 系统用户(UID < 1000):
    为系统进程或服务(如 nginxmysql)运行而创建的账户,通常不允许登录系统。

1.2 用户组

  • 主组(Primary Group)
    用户创建时自动关联的组,与用户名同名(例如用户 sam 的主组为 sam)。

  • 附加组(Secondary Group)
    用户可加入多个附加组,继承组的权限(例如将用户 sam 加入 docker 组以运行 Docker 命令)。


2. 用户管理操作

2.1 创建用户

# 基本语法
useradd [选项] 用户名

# 示例:创建用户 sam,指定主目录、Shell 和 UID
useradd -m -d /home/sam -u 1005 sam

常用选项

  • -m:自动创建主目录。
  • -d:指定主目录路径。
  • -s:设置默认 Shell(如 /bin/bash)。
  • -u:手动指定 UID。
  • -g:指定主组(需先创建组)。
  • -G:添加附加组(多个组用逗号分隔)。

2.2 设置用户密码

passwd 用户名
  • 输入两次新密码后完成设置。
  • 强制密码复杂度:可通过 /etc/login.defs 或 PAM 模块(如 pam_pwquality)配置。

2.3 删除用户

# 删除用户及主目录
userdel -r 用户名

2.4 修改用户属性

# 修改用户登录 Shell
usermod -s /bin/zsh sam

# 将用户添加到附加组
usermod -aG docker sam

# 更改用户名
usermod -l new_name old_name

3. 用户组管理操作

3.1 创建用户组

# 创建名为 developers 的组
groupadd developers

# 指定 GID
groupadd -g 2000 devops

3.2 删除用户组

# 删除组(组内无用户时)
groupdel developers

3.3 修改用户组

# 修改组名
groupmod -n oldgroup newgroup

# 修改 GID
groupmod -g 3000 developers

3.4 用户与组的关联

# 查看用户所属组
groups sam

# 查看组内用户
getent group developers

4. 权限管理

4.1 文件权限模型

Linux 文件权限分为三类:

  • User(u):文件所有者。
  • Group(g):文件所属组的成员。
  • Others(o):其他用户。

权限表示为 rwx(读、写、执行),例如:

-rwxr-xr-- 1 root developers 4096 Jul 7 10:26 file.txt
  • 前三位:所有者权限(rwx)。
  • 中间三位:组权限(r-x)。
  • 后三位:其他用户权限(r--)。

4.2 修改文件权限

# 修改文件权限(数字模式)
chmod 750 file.txt

# 修改文件权限(符号模式)
chmod u=rwx,g=rx,o= file.txt

# 修改文件所属用户和组
chown sam:developers file.txt

4.3 高级权限控制

  • SGID(Set Group ID)
    对目录设置 SGID 后,新文件继承组权限:

    chmod 2770 /shared_dir
    
  • ACL(访问控制列表)
    为特定用户或组设置细粒度权限:

    # 安装 ACL 工具
    apt install acl
    
    # 为用户 sam 添加读权限
    setfacl -m u:sam:r-x /shared_dir
    
    # 查看 ACL 权限
    getfacl /shared_dir
    

5. sudo 与 su

5.1 sudo

  • 功能:允许用户以其他用户(如 root)身份执行命令。
  • 配置文件/etc/sudoers(使用 vi /etc/sudoers 编辑)。

示例配置

# 允许用户 sam 执行所有命令
sam ALL=(ALL) ALL

# 限制用户仅能执行特定命令
sam ALL=(ALL) /usr/bin/apt, !/usr/bin/passwd root

常用命令

sudo -i        # 切换到 root 并启动 Shell
sudo -u sam ls  # 以用户 sam 身份执行命令

5.2 su

  • 功能:切换用户身份。
  • 区别
    • su username:非登录 Shell(不加载目标用户环境变量)。
    • su - username:登录 Shell(加载目标用户环境)。

6. 配置文件与安全实践

6.1 关键配置文件

文件 作用
/etc/passwd 存储用户基本信息(用户名、UID、主目录等)。
/etc/shadow 存储加密密码及密码策略(仅 root 可读)。
/etc/group 存储组信息(组名、GID、成员列表)。
/etc/gshadow 存储组密码(用于 gpasswd)。
/etc/skel/ 新用户创建时复制的默认配置文件(如 .bashrc)。

6.2 安全实践

  1. 避免直接使用 root
    通过 sudo 管理权限,降低误操作风险。
  2. 密码策略
    • 设置密码复杂度(/etc/pam.d/common-password)。
    • 强制密码过期(chage -M 90 sam)。
  3. 最小权限原则
    仅授予用户完成任务所需的最低权限。
  4. 定期清理用户
    删除无用账户(userdel -r)并检查 /etc/passwd
  5. 禁止 root 远程登录
    修改 /etc/ssh/sshd_config 中的 PermitRootLogin no,并重启 SSH 服务。

7. 常见问题与解决方案

7.1 用户无法登录

  • 原因
    • 密码锁定(passwd -S username 查看状态)。
    • Shell 不可用(检查 /etc/passwd 中的 Shell 是否存在)。
  • 解决方法
    passwd -u username  # 解锁账户
    usermod -s /bin/bash username  # 修改 Shell
    

7.2 权限未生效

  • 原因
    • 用户未重新登录导致组权限未更新。
    • 文件权限未正确设置(如 SGID 未启用)。
  • 解决方法
    newgrp developers  # 重新加载组权限
    chmod 2770 /shared_dir  # 启用 SGID
    

7.3 删除用户时报错

  • 原因
    • 用户仍有进程占用资源。
  • 解决方法
    ps -u username  # 查看用户进程
    kill -9 <PID>  # 终止进程后删除用户
    

8. 示例:创建普通用户:redisadm:redisgrp

步骤 1:创建用户目录

mkdir -p /home/redisadm

步骤 2:创建用户组

groupadd -g 60010 redisgrp

步骤 3:创建用户、设置用户主目录、绑定用户组

useradd redisadm -u 60010 -d /home/redisadm -g redisgrp

步骤 4:设置用户目录权限

chown -R redisadm:redisgrp /home/redisadm

步骤 5:设置用户密码

echo "redisadm:redisadm" |chpasswd

9. 总结

Linux 用户管理的核心在于通过 用户与组的划分权限控制安全策略 实现系统的高效与安全运行。合理配置用户权限不仅能提升系统稳定性,还能有效防范潜在的安全风险。掌握 useraddgroupaddchmodsudo 等工具的使用,是 Linux 系统管理的基础技能。

你可能感兴趣的:(Linux系统用户和用户组管理详细介绍)