🎉 限时公测|限量体验29元4核8G39元8核16G云开发环境一个月,助力Vibe Coding新时代!

Linux 用户和组管理 - 账户创建、权限控制、安全配置

初级

深入学习 Ubuntu 24.10 Server 用户和组管理,掌握用户账户创建、组管理、权限分配、sudo 配置等核心技能。通过实际场景演示,让初学者轻松掌握用户管理的核心概念和实践技能。

未知
easylearning团队
更新于 2025-01-13

🚀 实践环境(SSH)

欢迎使用Easylearning为您专属打磨的自由学习实践环境, 登录后马上开始边学边练吧!

StudyBoard

创建StudyBoard练习实例,系统自动连接到实例后,可以在教程中直接发送远程命令到实例中执行并能查看结果,享受更好的学习体验。

Linux 用户和组管理

Linux 用户和组管理是系统管理的核心技能之一。在企业环境中,合理的用户权限管理不仅保障系统安全,还能提高工作效率。本教程将通过实际场景演示,帮助您掌握用户管理的各个方面。

学习目标

完成本章学习后,您将能够:

  • 用户概念理解: 深入理解 Linux 用户和组的概念、UID/GID 机制及其在系统安全中的重要作用
  • 账户管理操作: 熟练掌握用户账户的创建、修改、删除和密码管理等基础操作
  • 组管理策略: 学会创建和管理用户组,实现基于组的权限分配和访问控制
  • sudo 权限配置: 配置 sudo 权限和安全策略,实现精细化的权限控制
  • 环境配置优化: 掌握用户环境配置、Shell 定制和系统安全最佳实践

🏗️ Linux 用户系统架构

Linux 用户管理系统基于多用户、多任务的设计理念,通过 UID(用户ID)和 GID(组ID)的数字标识符来实现精确的权限控制。这套系统不仅保障了系统安全,还为多用户协作提供了灵活的权限管理机制。

用户系统核心概念

用户类型分类

  1. 超级用户(root):UID = 0,拥有系统的最高权限,可以执行任何操作
  2. 系统用户:UID 1-999,用于运行系统服务和守护进程,通常不允许登录
  3. 普通用户:UID ≥ 1000,日常工作用户,权限受限但可以通过 sudo 提升权限

权限控制机制

  • 所有者权限:文件/目录的创建者拥有的权限
  • 组权限:同组用户共享的权限
  • 其他用户权限:系统中其他用户的权限
  • 特殊权限:SUID、SGID、Sticky Bit 等高级权限机制

用户管理系统架构

👤 用户账户管理

查看用户信息

在开始用户管理之前,我们需要了解如何查看系统中的用户信息。这些命令将帮助您了解当前系统的用户状态。

请登录以使用远程命令功能
# 查看当前登录用户
$whoami
# 查看当前用户的详细信息
$id
# 查看当前用户所属的组
$groups
# 查看当前登录的所有用户
$who
# 查看用户登录历史
$last | head -10
请登录以使用远程命令功能
# 查看系统中所有用户账户
$cat /etc/passwd
# 查看普通用户(UID >= 1000)
$awk -F: '$3 >= 1000 {print $1 ":" $3 ":" $5}' /etc/passwd
# 查看系统用户(UID < 1000)
$awk -F: '$3 < 1000 {print $1 ":" $3 ":" $5}' /etc/passwd

理解 /etc/passwd 文件格式

每行包含7个字段,用冒号分隔:

用户名:密码占位符:UID:GID:用户描述:主目录:登录Shell

示例解析:

ubuntu:x:1000:1000:Ubuntu User,,,:/home/ubuntu:/bin/bash
  • ubuntu: 用户名
  • x: 密码占位符(实际密码存储在 /etc/shadow)
  • 1000: 用户ID(UID)
  • 1000: 主组ID(GID)
  • Ubuntu User,,,: 用户描述信息
  • /home/ubuntu: 用户主目录
  • /bin/bash: 登录Shell

创建用户账户

让我们通过一个实际场景来学习用户创建:假设您是一家小型软件公司的系统管理员,需要为新入职的开发人员创建账户。

场景1:为开发团队创建用户

请登录以使用远程命令功能
# 创建开发组
$sudo groupadd developers
# 创建项目组
$sudo groupadd project-alpha
# 查看创建的组
$grep -E "(developers|project-alpha)" /etc/group
请登录以使用远程命令功能
# 为新员工 Alice 创建账户(开发人员)
$sudo useradd -m -s /bin/bash -c "Alice Johnson - Frontend Developer" -G developers alice
# 为新员工 Bob 创建账户(后端开发)
$sudo useradd -m -s /bin/bash -c "Bob Smith - Backend Developer" -G developers,project-alpha bob
# 为实习生 Charlie 创建受限账户
$sudo useradd -m -s /bin/bash -c "Charlie Brown - Intern" charlie

useradd 参数详解

  • -m: 创建用户主目录
  • -s /bin/bash: 设置登录Shell
  • -c "描述": 添加用户描述信息
  • -G 组名: 将用户添加到附加组
  • -d /path: 指定主目录路径(可选)
  • -e YYYY-MM-DD: 设置账户过期日期(可选)
请登录以使用远程命令功能
# 验证用户创建结果
$grep -E "(alice|bob|charlie)" /etc/passwd
$ls -la /home/ | grep -E "(alice|bob|charlie)"
$groups alice
$groups bob
$groups charlie

场景2:创建系统服务用户

请登录以使用远程命令功能
# 创建用于运行Web应用的系统用户
$sudo useradd -r -s /bin/false -c "Web Application User" webapp
# 创建用于数据库服务的系统用户
$sudo useradd -r -s /sbin/nologin -c "Database Service User" dbuser
# 查看系统用户信息
$grep -E "(webapp|dbuser)" /etc/passwd

系统用户参数说明

  • -r: 创建系统用户(UID < 1000)
  • -s /bin/false: 禁止Shell登录
  • -s /sbin/nologin: 禁止登录但显示友好消息

设置用户密码

请登录以使用远程命令功能
# 为新用户设置密码
$sudo passwd alice
$sudo passwd bob
$sudo passwd charlie
请登录以使用远程命令功能
# 批量设置密码(在脚本中使用)
$echo "alice:AlicePass123!" | sudo chpasswd
$echo "bob:BobSecure456@" | sudo chpasswd
$echo "charlie:CharlieTemp789#" | sudo chpasswd
请登录以使用远程命令功能
# 查看密码策略信息
$sudo chage -l alice
# 设置密码过期策略
$sudo chage -M 90 -m 7 -W 7 alice
$sudo chage -l alice

密码策略参数

  • -M 90: 密码最长有效期90天
  • -m 7: 密码最短使用期7天
  • -W 7: 密码过期前7天开始警告
  • -I 30: 密码过期后30天禁用账户
  • -E YYYY-MM-DD: 设置账户过期日期

修改用户账户

在实际工作中,经常需要修改用户信息,比如员工职位变更、部门调动等。

场景3:员工职位变更

请登录以使用远程命令功能
# Alice 升职为团队负责人,需要更多权限
$id alice
$groups alice
# 将 Alice 添加到管理组
$sudo usermod -a -G sudo,project-alpha alice
# 更新用户描述信息
$sudo usermod -c "Alice Johnson - Frontend Team Lead" alice
$id alice
$groups alice
$grep alice /etc/passwd
请登录以使用远程命令功能
# Bob 转到新项目组
# 从当前附加组中移除,重新设置
$sudo usermod -G developers,project-beta bob
$sudo usermod -c "Bob Smith - Backend Developer (Project Beta)" bob
$groups bob

usermod 常用参数

  • -a -G 组名: 添加到附加组(保留原有组)
  • -G 组名: 设置附加组(替换原有组)
  • -c "描述": 修改用户描述
  • -d /新路径: 修改主目录
  • -s /新shell: 修改登录Shell
  • -l 新用户名: 修改用户名
  • -L: 锁定账户
  • -U: 解锁账户

场景4:账户安全管理

请登录以使用远程命令功能
# 临时锁定 Charlie 的账户(实习期结束)
$sudo usermod -L charlie
# 查看锁定状态
$sudo passwd -S charlie
# 设置账户过期日期
$sudo usermod -e 2025-06-30 charlie
请登录以使用远程命令功能
# 解锁账户(如果需要)
$sudo usermod -U charlie
# 移除过期日期
$sudo usermod -e "" charlie

删除用户账户

当员工离职时,需要安全地删除用户账户和相关数据。

场景5:员工离职处理

请登录以使用远程命令功能
# 查看 Charlie 的文件和进程
$sudo find /home/charlie -type f | head -5
$ps -u charlie
# 备份重要数据(如果需要)
$sudo mkdir -p /backup/users
$sudo tar -czf /backup/users/charlie-backup-$(date +%Y%m%d).tar.gz /home/charlie
请登录以使用远程命令功能
# 安全删除用户账户
# 方法1:保留主目录
$sudo userdel charlie
# 查看删除结果
$grep charlie /etc/passwd
$ls -la /home/ | grep charlie
请登录以使用远程命令功能
# 重新创建用户用于演示完整删除
$sudo useradd -m -s /bin/bash charlie
# 方法2:完全删除(包括主目录)
$sudo userdel -r charlie
# 验证删除结果
$grep charlie /etc/passwd
$ls -la /home/ | grep charlie

userdel 参数说明

  • userdel 用户名: 删除用户但保留主目录
  • userdel -r 用户名: 删除用户和主目录
  • userdel -f 用户名: 强制删除(即使用户正在登录)

安全提醒: 删除用户前请确保:

  1. 用户没有正在运行的进程
  2. 重要数据已备份
  3. 相关服务配置已更新
  4. 文件所有权已转移给其他用户

👥 组管理

组是Linux权限管理的重要组成部分,通过合理的组设计可以简化权限管理并提高安全性。

组的概念和类型

组的分类

  1. 主组(Primary Group):用户的默认组,在 /etc/passwd 中指定
  2. 附加组(Secondary Groups):用户可以属于多个附加组
  3. 系统组:GID < 1000,用于系统服务
  4. 用户组:GID ≥ 1000,用于普通用户

创建和管理组

场景6:部门组织架构设计

请登录以使用远程命令功能
# 创建公司组织架构
$sudo groupadd -g 2001 engineering # 工程部
$sudo groupadd -g 2002 marketing # 市场部
$sudo groupadd -g 2003 finance # 财务部
$sudo groupadd -g 2004 hr # 人事部
# 创建项目组
$sudo groupadd -g 3001 project-web # Web项目组
$sudo groupadd -g 3002 project-mobile # 移动项目组
$sudo groupadd -g 3003 project-ai # AI项目组
# 查看创建的组
$grep -E "(engineering|marketing|finance|hr)" /etc/group
$grep -E "(project-web|project-mobile|project-ai)" /etc/group

groupadd 参数说明

  • -g GID: 指定组ID
  • -r: 创建系统组
  • -f: 如果组已存在则成功退出

场景7:用户组分配

请登录以使用远程命令功能
# 重新创建用户用于演示
$sudo useradd -m -s /bin/bash -c "Alice Johnson - Frontend Developer" alice
$sudo useradd -m -s /bin/bash -c "Bob Smith - Backend Developer" bob
$sudo useradd -m -s /bin/bash -c "Carol Davis - Marketing Manager" carol
$sudo useradd -m -s /bin/bash -c "David Wilson - Finance Analyst" david
# 设置密码
$echo "alice:AlicePass123!" | sudo chpasswd
$echo "bob:BobSecure456@" | sudo chpasswd
$echo "carol:CarolMkt789#" | sudo chpasswd
$echo "david:DavidFin012$" | sudo chpasswd
请登录以使用远程命令功能
# 将用户分配到相应部门和项目组
# Alice: 工程部 + Web项目组
$sudo usermod -a -G engineering,project-web alice
# Bob: 工程部 + Web项目组 + AI项目组
$sudo usermod -a -G engineering,project-web,project-ai bob
# Carol: 市场部
$sudo usermod -a -G marketing carol
# David: 财务部
$sudo usermod -a -G finance david
# 查看分配结果
$for user in alice bob carol david; do
$ echo "$user: $(groups $user)"
$done

组成员管理

请登录以使用远程命令功能
# 查看组成员
# 工程部成员
$getent group engineering
# Web项目组成员
$getent group project-web
# 使用 gpasswd 管理组成员
$sudo gpasswd -a carol project-web
# 从组中移除成员
$sudo gpasswd -d carol project-web

组成员管理命令

  • gpasswd -a 用户 组: 添加用户到组
  • gpasswd -d 用户 组: 从组中移除用户
  • gpasswd -A 用户 组: 设置组管理员
  • getent group 组名: 查看组成员

修改和删除组

请登录以使用远程命令功能
# 修改组名
$sudo groupmod -n web-development project-web
# 修改组ID
$sudo groupmod -g 3010 web-development
# 查看修改结果
$getent group web-development
请登录以使用远程命令功能
# 删除空组
$sudo groupadd temp-group
$sudo groupdel temp-group
# 尝试删除有成员的组(会失败)
$sudo groupdel engineering
# 查看组使用情况
$grep engineering /etc/passwd
$getent group engineering

🔐 sudo 权限管理

sudo(Super User Do)是Linux系统中实现权限提升的核心机制。通过合理配置sudo,可以在保障系统安全的同时,为用户提供必要的管理权限。

sudo 工作原理

sudo 安全机制

  1. 身份验证:用户需要输入自己的密码(而非root密码)
  2. 权限检查:检查 /etc/sudoers 文件中的权限配置
  3. 命令执行:以指定用户身份执行命令
  4. 日志记录:所有sudo操作都会记录在系统日志中

sudo 优势

  • 安全性:避免直接使用root账户
  • 可审计:所有操作都有日志记录
  • 精细控制:可以限制用户只能执行特定命令
  • 时间限制:密码验证有时效性(默认15分钟)

基础 sudo 配置

请登录以使用远程命令功能
# 查看当前用户的sudo权限
$sudo -l
# 查看sudo配置文件
$sudo cat /etc/sudoers | head -20
请登录以使用远程命令功能
# 将用户添加到sudo组(Ubuntu/Debian方式)
$sudo usermod -a -G sudo alice
# 验证sudo权限
$sudo -l -U alice

场景8:配置开发团队sudo权限

请登录以使用远程命令功能
# 使用 visudo 安全编辑 sudoers 文件
# 注意:在实际环境中使用 sudo visudo,这里演示配置内容
$sudo tee /etc/sudoers.d/developers << 'EOF'
# 开发团队sudo配置
# 允许 engineering 组成员使用sudo
$%engineering ALL=(ALL:ALL) ALL
# 允许 alice 无密码执行系统服务管理
$alice ALL=(ALL) NOPASSWD: /bin/systemctl, /usr/bin/systemctl
# 允许 bob 管理软件包
$bob ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/dpkg
# 限制 carol 只能重启Web服务
$carol ALL=(ALL) NOPASSWD: /bin/systemctl restart nginx, /bin/systemctl reload nginx
$EOF

sudoers 语法说明

用户/组  主机=(运行身份:组身份) [NOPASSWD:] 命令列表
  • %组名: 表示组
  • ALL: 表示所有主机/用户/命令
  • NOPASSWD:: 免密码执行
  • 命令路径: 具体的命令路径
请登录以使用远程命令功能
# 验证sudo配置
$sudo -l -U alice | grep -A 5 "User alice"
$sudo -l -U bob | grep -A 5 "User bob"
$sudo -l -U carol | grep -A 5 "User carol"

高级 sudo 配置

场景9:创建命令别名和用户别名

请登录以使用远程命令功能
# 创建高级sudo配置
$sudo tee /etc/sudoers.d/advanced-config << 'EOF'
# 命令别名定义
$Cmnd_Alias SERVICES = /bin/systemctl, /usr/bin/systemctl
$Cmnd_Alias NETWORKING = /sbin/ifconfig, /bin/ip, /usr/bin/netstat
$Cmnd_Alias SOFTWARE = /usr/bin/apt, /usr/bin/dpkg, /usr/bin/snap
$Cmnd_Alias MONITORING = /usr/bin/htop, /usr/bin/iotop, /usr/bin/nethogs
# 用户别名定义
$User_Alias ADMINS = alice, bob
$User_Alias DEVELOPERS = %engineering
$User_Alias OPERATORS = %project-web
# 主机别名定义
$Host_Alias SERVERS = localhost, 192.168.1.0/24
# 权限分配
$ADMINS SERVERS = (ALL) ALL
$DEVELOPERS SERVERS = (ALL) NOPASSWD: SERVICES, SOFTWARE
$OPERATORS SERVERS = (ALL) NOPASSWD: SERVICES, MONITORING
# 限制危险命令
$ALL ALL = !/bin/su -, !/usr/bin/passwd root, !/bin/rm -rf /
$EOF
请登录以使用远程命令功能
# 测试sudo配置语法
$sudo visudo -c -f /etc/sudoers.d/advanced-config
# 查看生效的sudo规则
$sudo -l -U alice

sudo 日志和审计

请登录以使用远程命令功能
# 查看sudo日志
$sudo grep sudo /var/log/auth.log | tail -10
# 配置详细的sudo日志
$sudo tee /etc/sudoers.d/logging << 'EOF'
# 启用详细日志记录
$Defaults log_host, log_year, logfile="/var/log/sudo.log"
$Defaults log_input, log_output
$Defaults iolog_dir="/var/log/sudo-io"
$EOF

📁 文件权限和所有权

文件权限是Linux安全模型的基础,理解和正确配置文件权限对系统安全至关重要。

权限系统概述

权限类型

  • r (read, 4): 读取权限
  • w (write, 2): 写入权限
  • x (execute, 1): 执行权限

权限对象

  • u (user): 文件所有者
  • g (group): 文件所属组
  • o (other): 其他用户
  • a (all): 所有用户

查看和理解权限

请登录以使用远程命令功能
# 创建测试文件和目录
$mkdir -p /tmp/permission-demo
$cd /tmp/permission-demo
# 创建不同类型的文件
$touch regular-file.txt
$echo "#!/bin/bash" > script.sh
$echo "echo 'Hello World'" >> script.sh
$mkdir test-directory
$ln -s regular-file.txt symlink-file
# 查看权限信息
$echo "=== 文件权限详细信息 ==="
$ls -la

权限显示格式解析

-rwxr-xr-- 1 alice engineering 1024 Jan 13 10:30 script.sh
│││││││││ │ │     │           │    │           │
│││││││││ │ │     │           │    │           └─ 文件名
│││││││││ │ │     │           │    └─ 修改时间
│││││││││ │ │     │           └─ 文件大小
│││││││││ │ │     └─ 所属组
│││││││││ │ └─ 所有者
│││││││││ └─ 硬链接数
│││││││└─ 其他用户权限 (r--)
││││││└─ 组权限 (r-x)
│││└─ 所有者权限 (rwx)
└─ 文件类型 (- 普通文件, d 目录, l 符号链接)

修改文件权限

场景10:项目文件权限管理

请登录以使用远程命令功能
# 创建项目目录结构
$mkdir -p /tmp/project/{src,docs,scripts,data}
$cd /tmp/project
# 创建不同类型的文件
$echo "源代码文件" > src/main.py
$echo "项目文档" > docs/README.md
$echo "#!/bin/bash" > scripts/deploy.sh
$echo "echo 'Deploying application...'" >> scripts/deploy.sh
$echo "敏感数据" > data/config.json
$find . -type f -exec ls -l {} \;
请登录以使用远程命令功能
# 使用符号模式修改权限
# 给脚本添加执行权限
$chmod +x scripts/deploy.sh
# 设置源代码文件为只读
$chmod u=rw,g=r,o=r src/main.py
# 保护敏感数据文件
$chmod 600 data/config.json
# 设置文档文件权限
$chmod 644 docs/README.md
$find . -type f -exec ls -l {} \;
请登录以使用远程命令功能
# 使用数字模式修改权限
# 设置目录权限
$chmod 755 src docs scripts # 目录:所有者全权限,组和其他用户读执行
$chmod 700 data # 目录:仅所有者访问
# 批量设置文件权限
$find src -type f -exec chmod 644 {} \; # 源代码文件:644
$find scripts -type f -exec chmod 755 {} \; # 脚本文件:755
$ls -la
$find . -type f -exec ls -l {} \;

常用权限数字组合

  • 755: 目录和可执行文件(rwxr-xr-x)
  • 644: 普通文件(rw-r--r--)
  • 600: 私有文件(rw-------)
  • 700: 私有目录(rwx------)
  • 666: 数据文件(rw-rw-rw-)
  • 777: 完全开放(rwxrwxrwx,不推荐)

修改文件所有权

请登录以使用远程命令功能
# 修改文件所有者
# 将项目目录所有权转给 alice
$sudo chown -R alice:engineering /tmp/project
# 将特定文件所有权转给不同用户
$sudo chown bob:engineering /tmp/project/scripts/deploy.sh
# 只修改组所有权
$sudo chgrp project-web /tmp/project/docs/README.md
$ls -la /tmp/project/
$ls -la /tmp/project/scripts/
$ls -la /tmp/project/docs/

chown 命令格式

  • chown 用户 文件: 只修改所有者
  • chown 用户:组 文件: 修改所有者和组
  • chown :组 文件: 只修改组(等同于 chgrp)
  • chown -R: 递归修改目录及其内容

特殊权限

Linux提供了三种特殊权限,用于实现更复杂的安全需求。

SUID (Set User ID)

请登录以使用远程命令功能
# 演示SUID权限
# 查看系统中的SUID文件
$find /usr/bin -perm -4000 -type f
# 查看passwd命令的SUID权限
$ls -l /usr/bin/passwd
# 创建SUID演示文件
$sudo cp /bin/cat /tmp/suid-demo
$sudo chmod 4755 /tmp/suid-demo
$ls -l /tmp/suid-demo
# 注意:文件权限显示为 -rwsr-xr-x,其中s 表示SUID

SGID (Set Group ID)

请登录以使用远程命令功能
# 演示SGID权限
# 创建共享目录
$sudo mkdir -p /tmp/shared-project
$sudo chown alice:engineering /tmp/shared-project
# 设置SGID权限
$sudo chmod 2775 /tmp/shared-project
$ls -ld /tmp/shared-project
# 注意:目录权限显示为 drwxrwsr-x,其中s 表示SGID
# 测试SGID效果
$sudo -u alice touch /tmp/shared-project/alice-file
$sudo -u bob touch /tmp/shared-project/bob-file
$ls -l /tmp/shared-project/
# 所有文件都继承了目录的组所有权 (engineering)

Sticky Bit

请登录以使用远程命令功能
# 演示Sticky Bit权限
# 查看/tmp目录的Sticky Bit
# /tmp目录具有Sticky Bit权限,用户只能删除自己的文件
$ls -ld /tmp
# 创建Sticky Bit演示目录
$sudo mkdir -p /tmp/sticky-demo
$sudo chmod 1777 /tmp/sticky-demo
$ls -ld /tmp/sticky-demo
# 注意:目录权限显示为 drwxrwxrwt,其中t 表示Sticky Bit
# 测试Sticky Bit效果
$sudo -u alice touch /tmp/sticky-demo/alice-file
$sudo -u bob touch /tmp/sticky-demo/bob-file
$ls -l /tmp/sticky-demo/
# 虽然目录权限是777,但用户只能删除自己创建的文件

特殊权限数字表示

  • 4000: SUID
  • 2000: SGID
  • 1000: Sticky Bit
  • 可以组合使用,如 6755 = SUID + SGID + 755

🏠 用户环境配置

用户环境配置决定了用户登录后的工作环境,包括环境变量、别名、提示符等。

Shell 配置文件

请登录以使用远程命令功能
# 查看用户的Shell配置文件
$sudo -u alice ls -la /home/alice/ | grep -E "\.(bash|profile|rc)"
# 查看系统级配置文件
$ls -la /etc/ | grep -E "(profile|bash|environment)"

配置文件加载顺序

  1. /etc/profile - 系统级全局配置
  2. /etc/bash.bashrc - 系统级bash配置
  3. ~/.profile - 用户级全局配置
  4. ~/.bashrc - 用户级bash配置
  5. ~/.bash_profile - 用户级登录配置

场景11:自定义用户环境

请登录以使用远程命令功能
# 为Alice配置个性化环境
$sudo -u alice tee /home/alice/.bashrc << 'EOF'
# Alice的个性化bash配置
# 基础配置
$export EDITOR=nano
$export PAGER=less
$export HISTSIZE=10000
$export HISTFILESIZE=20000
# 自定义提示符
$export PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
# 有用的别名
$alias ll='ls -alF'
$alias la='ls -A'
$alias l='ls -CF'
$alias grep='grep --color=auto'
$alias ..='cd ..'
$alias ...='cd ../..'
# 开发相关别名
$alias gs='git status'
$alias gl='git log --oneline'
$alias gd='git diff'
$alias python='python3'
$alias pip='pip3'
# 安全别名
$alias rm='rm -i'
$alias cp='cp -i'
$alias mv='mv -i'
# 自定义函数
$mkcd() {
$ mkdir -p "$1" && cd "$1"
$}
# 欢迎信息
$echo "欢迎回来,Alice!今天是 $(date '+%Y-%m-%d %H:%M:%S')"
$echo "当前系统负载:$(uptime | cut -d',' -f3-)"
$EOF
$echo "Alice的个性化环境配置已完成"
请登录以使用远程命令功能
# 为开发团队创建通用配置
$sudo tee /etc/profile.d/development-team.sh << 'EOF'
# 开发团队通用环境配置
# 开发工具路径
$export PATH="/opt/development/bin:$PATH"
# 项目相关环境变量
$export PROJECT_ROOT="/opt/projects"
$export LOG_LEVEL="INFO"
$export DEVELOPMENT_MODE="true"
# 通用别名
$alias project-logs='tail -f /var/log/project/*.log'
$alias project-status='systemctl status project-*'
$alias backup-project='rsync -av $PROJECT_ROOT /backup/'
# 开发团队提示
$if groups | grep -q "engineering"; then
$ echo "开发环境已加载"
$ echo "项目根目录: $PROJECT_ROOT"
$fi
$EOF

用户配额管理

请登录以使用远程命令功能
# 查看磁盘使用情况
$du -sh /home/* 2>/dev/null | sort -hr
# 查看文件系统配额支持
$mount | grep -E "(quota|usrquota|grpquota)"
# 模拟配额检查脚本
$cat << 'EOF' > /tmp/quota-check.sh
#!/bin/bash
# 用户磁盘使用检查脚本
$THRESHOLD=1000000 # 1GB in KB
$WARN_THRESHOLD=800000 # 800MB in KB
$echo "=== 用户磁盘使用检查 ==="
$for user_home in /home/*; do
$ if [ -d "$user_home" ]; then
$ username=$(basename "$user_home")
$ usage=$(du -sk "$user_home" 2>/dev/null | cut -f1)
$ if [ "$usage" -gt "$THRESHOLD" ]; then
$ echo "$username: ${usage}KB (超出限制)"
$ elif [ "$usage" -gt "$WARN_THRESHOLD" ]; then
$ echo "$username: ${usage}KB (接近限制)"
$ else
$ echo "$username: ${usage}KB (正常)"
$ fi
$ fi
$done
$EOF
$chmod +x /tmp/quota-check.sh
$/tmp/quota-check.sh

🛠️ 实践练习

练习1:企业用户管理场景

创建一个完整的企业用户管理场景,包括部门组织、权限分配和安全配置。

请登录以使用远程命令功能
# 练习1:创建企业组织架构
$echo "=== 练习1:企业用户管理场景 ==="
# 1. 创建部门组
$sudo groupadd -g 5001 it-department
$sudo groupadd -g 5002 sales-department
$sudo groupadd -g 5003 admin-department
# 2. 创建项目组
$sudo groupadd -g 6001 project-alpha
$sudo groupadd -g 6002 project-beta
# 3. 创建用户账户
# IT部门
$sudo useradd -m -s /bin/bash -c "John Doe - IT Manager" -G it-department,sudo john
$sudo useradd -m -s /bin/bash -c "Jane Smith - Developer" -G it-department,project-alpha jane
$sudo useradd -m -s /bin/bash -c "Mike Johnson - DevOps" -G it-department,project-alpha,project-beta mike
# 销售部门
$sudo useradd -m -s /bin/bash -c "Sarah Wilson - Sales Manager" -G sales-department sarah
$sudo useradd -m -s /bin/bash -c "Tom Brown - Sales Rep" -G sales-department tom
# 行政部门
$sudo useradd -m -s /bin/bash -c "Lisa Davis - HR Manager" -G admin-department lisa
请登录以使用远程命令功能
# 4. 设置密码
$for user in john jane mike sarah tom lisa; do
$ echo "${user}:${user^}Pass123!" | sudo chpasswd
$ echo "$user 密码已设置"
$done
# 5. 配置sudo权限
$sudo tee /etc/sudoers.d/enterprise-config << 'EOF'
# 企业sudo权限配置
# IT部门管理员权限
$%it-department ALL=(ALL:ALL) ALL
# 项目组权限
$%project-alpha ALL=(ALL) NOPASSWD: /bin/systemctl restart project-alpha-*
$%project-beta ALL=(ALL) NOPASSWD: /bin/systemctl restart project-beta-*
# 个人权限
$john ALL=(ALL) NOPASSWD: ALL
$jane ALL=(ALL) NOPASSWD: /usr/bin/apt, /bin/systemctl
$mike ALL=(ALL) NOPASSWD: /usr/bin/docker, /usr/bin/kubectl
$EOF
请登录以使用远程命令功能
# 6. 创建部门共享目录
$sudo mkdir -p /shared/{it,sales,admin,projects}
# 设置目录权限和所有权
$sudo chown root:it-department /shared/it
$sudo chmod 2775 /shared/it
$sudo chown root:sales-department /shared/sales
$sudo chmod 2775 /shared/sales
$sudo chown root:admin-department /shared/admin
$sudo chmod 2775 /shared/admin
$sudo chown root:project-alpha /shared/projects
$sudo chmod 2775 /shared/projects
# 验证配置
$ls -la /shared/
$getent group | grep -E "(it-department|sales-department|admin-department)"

练习2:安全加固配置

请登录以使用远程命令功能
# 练习2:用户安全加固
# 1. 配置密码策略
$sudo tee /etc/security/pwquality.conf << 'EOF'
# 密码质量配置
$minlen = 12
$minclass = 3
$maxrepeat = 2
$dcredit = -1
$ucredit = -1
$lcredit = -1
$ocredit = -1
$EOF
# 2. 配置账户锁定策略
$sudo tee /etc/security/faillock.conf << 'EOF'
# 账户锁定配置
$deny = 5
$unlock_time = 900
$fail_interval = 900
$EOF
请登录以使用远程命令功能
# 3. 创建用户监控脚本
$sudo tee /usr/local/bin/user-monitor.sh << 'EOF'
#!/bin/bash
# 用户活动监控脚本
$LOG_FILE="/var/log/user-monitor.log"
$DATE=$(date '+%Y-%m-%d %H:%M:%S')
$echo "[$DATE] 用户活动监控报告" >> $LOG_FILE
# 当前登录用户
$echo "当前登录用户:" >> $LOG_FILE
$who >> $LOG_FILE
# 最近登录失败
$echo -e "\n最近登录失败:" >> $LOG_FILE
$grep "Failed password" /var/log/auth.log | tail -5 >> $LOG_FILE
# sudo使用情况
$echo -e "\n最近sudo使用:" >> $LOG_FILE
$grep "sudo:" /var/log/auth.log | tail -5 >> $LOG_FILE
# 新用户检查
$echo -e "\n用户账户状态:" >> $LOG_FILE
$awk -F: '$3 >= 1000 {print $1 ":" $3 ":" $5}' /etc/passwd >> $LOG_FILE
$echo "[$DATE] 监控完成" >> $LOG_FILE
$echo "----------------------------------------" >> $LOG_FILE
$EOF
$sudo chmod +x /usr/local/bin/user-monitor.sh

📊 用户管理最佳实践

安全策略建议

用户管理安全原则:

  1. 最小权限原则: 用户只获得完成工作所需的最小权限
  2. 职责分离: 不同职能的用户使用不同的账户
  3. 定期审计: 定期检查用户权限和活动
  4. 强密码策略: 实施复杂密码要求和定期更换
  5. 及时清理: 及时删除不再需要的用户账户

监控和维护

请登录以使用远程命令功能
# 创建用户管理维护脚本
$sudo tee /usr/local/bin/user-maintenance.sh << 'EOF'
#!/bin/bash
# 用户管理维护脚本
$echo "=== 用户管理系统维护报告 ==="
$echo "生成时间: $(date)"
$echo
# 1. 用户账户统计
$echo "1. 用户账户统计:"
$echo " 总用户数: $(wc -l < /etc/passwd)"
$echo " 普通用户数: $(awk -F: '$3 >= 1000 {count++} END {print count+0}' /etc/passwd)"
$echo " 系统用户数: $(awk -F: '$3 < 1000 {count++} END {print count+0}' /etc/passwd)"
$echo
# 2. 组统计
$echo "2. 组统计:"
$echo " 总组数: $(wc -l < /etc/group)"
$echo " 用户组数: $(awk -F: '$3 >= 1000 {count++} END {print count+0}' /etc/group)"
$echo
# 3. 主目录检查
$echo "3. 主目录检查:"
$for home_dir in /home/*; do
$ if [ -d "$home_dir" ]; then
$ username=$(basename "$home_dir")
$ size=$(du -sh "$home_dir" 2>/dev/null | cut -f1)
$ echo " $username: $size"
$ fi
$done
$echo
# 4. 最近登录活动
$echo "4. 最近登录活动:"
$last | head -10
$echo
# 5. sudo使用统计
$echo "5. 最近sudo使用:"
$grep "sudo:" /var/log/auth.log | tail -5 | cut -d' ' -f1-3,5-
$echo
$echo "=== 维护报告完成 ==="
$EOF
$sudo chmod +x /usr/local/bin/user-maintenance.sh

实践练习

通过实际操作来巩固所学知识,在真实的系统化的训练环境中练习本教程的内容。

Linux 用户和组管理 - 账户创建、权限控制、安全配置 - 实践练习

待学习
ID: LINUX_01_USER_MANAGEMENT
未登录
训练服务器:
训练内容:

基于 Linux 用户和组管理 - 账户创建、权限控制、安全配置 教程的实践练习