linux 用户管理相关

Linux 用户管理涉及系统安全的核心部分。让我为你详细介绍用户管理的各个方面:

一、用户管理基础

1. 用户相关文件

复制代码
# 主要配置文件
/etc/passwd          # 用户账户信息
/etc/shadow          # 用户密码信息(加密)
/etc/group           # 用户组信息
/etc/gshadow         # 组密码信息
/etc/login.defs      # 用户创建默认设置
/etc/default/useradd # 用户添加默认设置

2. 查看用户信息

复制代码
# 查看当前用户
whoami
id

# 查看所有用户
cat /etc/passwd
getent passwd

# 查看用户详细信息
finger username      # 需要安装finger包
chage -l username    # 密码过期信息

# 查看登录用户
who
w
users
last
lastlog

二、用户创建与管理

1. 创建用户

复制代码
# 基本创建
useradd username

# 创建用户并设置家目录
useradd -m username                    # 创建家目录
useradd -m -d /home/newname username   # 指定家目录路径
useradd -m -s /bin/bash username       # 指定shell

# 创建系统用户(无登录权限)
useradd -r -s /bin/false serviceuser   # 系统账户
useradd -r -d /var/lib/mysql mysql     # 指定家目录的系统用户

# 设置用户属性
useradd -c "User Comment" username      # 添加注释
useradd -u 1001 username               # 指定UID
useradd -g users username              # 指定主组
useradd -G wheel,developers username   # 指定附加组

2. 设置密码

复制代码
# 设置密码
passwd username                        # root为用户设密码
passwd                                # 当前用户修改自己密码

# 密码策略
passwd -l username                    # 锁定用户
passwd -u username                    # 解锁用户
passwd -d username                    # 删除密码(允许无密码登录)
passwd -e username                    # 强制下次登录修改密码

# 批量设置密码
echo "username:password" | chpasswd
chpasswd < userpass.txt               # 文件格式:username:password

3. 修改用户属性

复制代码
# 修改用户信息
usermod -c "New Comment" username      # 修改注释
usermod -d /new/home username         # 修改家目录
usermod -m -d /new/home username      # 移动家目录到新位置
usermod -s /bin/zsh username          # 修改shell
usermod -L username                   # 锁定账户
usermod -U username                   # 解锁账户

# 修改UID和组
usermod -u 1002 username              # 修改UID
usermod -g newgroup username          # 修改主组
usermod -aG group1,group2 username    # 添加附加组(-a追加,不覆盖)
usermod -G "" username                # 清空附加组

4. 删除用户

复制代码
# 删除用户但保留文件
userdel username

# 完全删除用户(包括家目录和邮件)
userdel -r username

# 强制删除(即使用户已登录)
userdel -f username

# 删除前备份用户数据
tar -czf username_backup.tar.gz /home/username
userdel -r username

三、组管理

1. 创建和管理组

复制代码
# 创建组
groupadd groupname
groupadd -g 1005 groupname            # 指定GID
groupadd -r systemgroup               # 创建系统组

# 修改组
groupmod -n newname oldname           # 重命名组
groupmod -g 1006 groupname            # 修改GID

# 删除组
groupdel groupname

2. 组成员管理

复制代码
# 添加用户到组
gpasswd -a username groupname
usermod -aG groupname username

# 从组中移除用户
gpasswd -d username groupname

# 设置组管理员
gpasswd -A username groupname         # 设置组管理员
gpasswd -M user1,user2 groupname      # 设置组成员列表

# 查看组成员
getent group groupname
groups username                       # 查看用户所属组
lid groupname                         # 查看组的所有成员(需要安装libuser)

四、高级用户管理

1. 用户会话管理

复制代码
# 查看用户进程
pgrep -u username
ps -u username
pstree username

# 终止用户会话
pkill -u username                     # 终止用户所有进程
skill -KILL -u username               # 强制终止

# 限制用户登录
usermod -s /sbin/nologin username     # 禁止登录
chsh -s /sbin/nologin username        # 修改shell禁止登录

# 检查用户活动
last username                         # 登录历史
lastb username                        # 失败登录尝试
faillock --user username              # 查看登录失败锁定

2. 用户资源限制

复制代码
# 使用ulimit设置资源限制
ulimit -a                            # 查看当前限制
ulimit -n 2048                       # 设置最大打开文件数

# 使用/etc/security/limits.conf
echo "username hard nproc 50" >> /etc/security/limits.conf
echo "username soft nofile 1024" >> /etc/security/limits.conf

# 使用systemd资源控制(现代Linux)
systemctl set-property user-1000.service CPUQuota=50%

3. 批量用户管理

复制代码
# 批量创建用户
for user in user1 user2 user3; do
    useradd -m $user
    echo "$user:password123" | chpasswd
done

# 从文件批量创建
while IFS=: read -r user pass comment; do
    useradd -m -c "$comment" $user
    echo "$user:$pass" | chpasswd
done < users.txt

# 批量修改属性
for user in $(getent passwd | cut -d: -f1); do
    chage -M 90 $user                # 设置所有用户密码90天过期
done

五、Sudo权限管理

1. Sudo基础配置

复制代码
# 编辑sudoers文件(永远使用visudo!)
visudo
visudo -f /etc/sudoers.d/custom      # 编辑包含文件

# 给用户sudo权限
echo "username ALL=(ALL) ALL" >> /etc/sudoers
# 或创建单独文件
echo "username ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/username

2. Sudo权限示例

复制代码
# 允许用户执行特定命令
username ALL=(ALL) /bin/systemctl restart nginx, /bin/systemctl status nginx

# 允许组有sudo权限
%wheel ALL=(ALL) ALL
%admins ALL=(ALL) NOPASSWD:ALL

# 精细控制
username ALL=(root) /usr/bin/apt update, /usr/bin/apt upgrade
username ALL=(www-data) /bin/cat /var/log/nginx/*

3. Sudo日志和审计

复制代码
# 查看sudo使用记录
sudo cat /var/log/auth.log | grep sudo    # Debian/Ubuntu
sudo journalctl | grep sudo               # Systemd系统

# 检查用户sudo权限
sudo -l -U username                       # 查看用户的sudo权限

六、安全最佳实践

1. 密码策略

复制代码
# 编辑密码策略
vim /etc/login.defs
vim /etc/pam.d/common-password          # PAM配置

# 设置密码复杂度(安装libpam-pwquality)
# 在/etc/pam.d/common-password中添加:
password requisite pam_pwquality.so retry=3 minlen=12 difok=3

# 使用chage设置密码过期
chage -M 90 username                    # 90天过期
chage -W 7 username                     # 过期前7天警告
chage -I 5 username                     # 过期后5天锁定
chage -E 2024-12-31 username            # 设置账户过期日期

2. 账户锁定策略

复制代码
# 配置失败登录锁定(编辑PAM)
vim /etc/pam.d/common-auth
# 添加:auth required pam_tally2.so deny=5 unlock_time=900

# 手动管理锁定
faillock --user username                # 查看失败次数
faillock --user username --reset       # 重置失败计数
pam_tally2 --user username --reset     # 旧版系统

3. 用户审计

复制代码
# 启用审计(安装auditd)
auditctl -w /etc/passwd -p wa -k user_changes
auditctl -w /etc/shadow -p wa -k user_changes
auditctl -w /etc/group -p wa -k user_changes

# 查看审计日志
ausearch -k user_changes
aureport -au                            # 认证报告

七、实用脚本示例

1. 用户创建脚本

复制代码
#!/bin/bash
# create_user.sh

USERNAME=$1
COMMENT=$2
PRIMARY_GROUP=${3:-users}  # 默认组为users

if [ $# -lt 2 ]; then
    echo "用法: $0 用户名 '用户全名/注释' [主组]"
    exit 1
fi

# 检查用户是否存在
if id "$USERNAME" &>/dev/null; then
    echo "错误: 用户 $USERNAME 已存在"
    exit 1
fi

# 创建用户
useradd -m -c "$COMMENT" -g "$PRIMARY_GROUP" -s /bin/bash "$USERNAME"

# 生成随机密码
PASSWORD=$(openssl rand -base64 12)
echo "$USERNAME:$PASSWORD" | chpasswd

# 设置密码策略
chage -M 90 -W 7 "$USERNAME"

echo "用户创建成功!"
echo "用户名: $USERNAME"
echo "初始密码: $PASSWORD"
echo "请首次登录后立即修改密码"

2. 用户审计脚本

复制代码
#!/bin/bash
# user_audit.sh

echo "=== 用户安全审计报告 ==="
echo "生成时间: $(date)"
echo

echo "1. 系统用户统计:"
echo "总用户数: $(getent passwd | wc -l)"
echo "可登录用户: $(getent passwd | grep -v /nologin | grep -v /false | wc -l)"
echo "系统用户: $(getent passwd | awk -F: '$3 < 1000 {print $1}' | wc -l)"
echo

echo "2. 空密码账户:"
getent shadow | awk -F: '($2 == "" || $2 == "!!") {print $1}'
echo

echo "3. 密码过期账户:"
today=$(date +%s)
getent shadow | while IFS=: read -r user pass last change min max warn inactive expire rest; do
    if [ "$expire" != "" ] && [ "$expire" -le $((today/86400)) ]; then
        echo "$user (过期于: $(date -d "@$((expire*86400))" +%Y-%m-%d))"
    fi
done
echo

echo "4. 最近登录情况:"
echo "最后登录用户:"
lastlog | grep -v "Never" | tail -5
echo

echo "5. Sudo权限用户:"
getent group wheel sudo 2>/dev/null | cut -d: -f4 | tr ',' '\n' | sort -u

3. 批量用户管理脚本

复制代码
#!/bin/bash
# batch_user_manager.sh

ACTION=$1
USER_FILE=$2

usage() {
    echo "用法: $0 [create|delete|disable|enable] 用户列表文件"
    echo "文件格式: 每行 '用户名:密码:注释:主组:附加组'"
    exit 1
}

[ $# -ne 2 ] && usage

case $ACTION in
    create)
        while IFS=: read -r user pass comment primary groups; do
            echo "创建用户: $user"
            useradd -m -c "${comment:-$user}" -g "${primary:-users}" -s /bin/bash "$user"
            echo "$user:${pass:-${user}123}" | chpasswd
            if [ -n "$groups" ]; then
                usermod -aG "$groups" "$user"
            fi
            chage -d 0 "$user"  # 强制首次登录修改密码
        done < "$USER_FILE"
        ;;
    delete)
        while read -r user; do
            echo "删除用户: $user"
            userdel -r "$user" 2>/dev/null || echo "删除失败: $user"
        done < "$USER_FILE"
        ;;
    disable)
        while read -r user; do
            echo "禁用用户: $user"
            usermod -L -s /sbin/nologin "$user"
        done < "$USER_FILE"
        ;;
    enable)
        while read -r user; do
            echo "启用用户: $user"
            usermod -U -s /bin/bash "$user"
        done < "$USER_FILE"
        ;;
    *)
        usage
        ;;
esac

八、故障排除

常见问题解决

复制代码
# 用户无法登录
# 1. 检查shell是否正确
grep username /etc/passwd
# 2. 检查账户是否锁定
passwd -S username
# 3. 检查家目录权限
ls -ld /home/username
# 4. 检查PAM配置
auth.log 或 secure 日志

# 修复家目录权限
chown -R username:username /home/username
chmod 700 /home/username

# 用户被锁定
faillock --user username --reset
pam_tally2 --user username --reset    # 旧系统

# Sudo权限问题
visudo -c                             # 检查语法
sudo -l -U username                   # 检查用户权限

恢复root密码

复制代码
# 单用户模式恢复(重启时编辑内核参数)
# 在GRUB菜单按e,在linux行末尾添加:single 或 systemd.unit=rescue.target
# 然后重新挂载并修改密码
mount -o remount,rw /
passwd root

这些是Linux用户管理的核心内容。根据你的具体需求(如服务器管理、多用户环境等),可以重点掌握相关部分。安全始终是用户管理的首要考虑因素!

相关推荐
q***0563 天前
PhpStorm下载、安装、配置教程
ide·phpstorm
牢七18 天前
php55
php·phpstorm
开开心心就好19 天前
电子报纸离线保存:一键下载多报PDF工具
网络·笔记·macos·pdf·word·音视频·phpstorm
星光一影24 天前
供应链进销存源码uniapp全开源ERP多仓库管理系统pc+app手机端
mysql·elementui·uni-app·开源·php·phpstorm·1024程序员节
Aevget2 个月前
PHP智能开发工具PhpStorm v2025.2全新上线——支持PHPUnit 12等
开发语言·ide·php·phpstorm
Trainer21072 个月前
十分钟搭建thinkphp开发框架
php·apache·phpstorm·composer
zhangfeng11332 个月前
phpstorm content.dat.storageData 文件解析:作用、风险与处理建议
ide·phpstorm
猫头虎3 个月前
如何解决 JetBrains IntelliJ IDEA 2024.2 和 2025.2 新版本区域选择问题:key is invalid
java·ide·pycharm·intellij-idea·idea·intellij idea·phpstorm
奔跑吧邓邓子4 个月前
PHPStorm携手ThinkPHP8:开启高效开发之旅
phpstorm·php开发·thinkphp·thinkphp8