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

相关推荐
咖啡续命又一天21 小时前
PhpStorm 启用注释自动缩进
php·phpstorm
深兰科技13 天前
深兰科技入选“2025中国新经济30强(行业之星)”,人工智能产业化能力获认可
人工智能·windows·ci/cd·phpstorm·visual studio code·深兰科技·gyic2025
jugt18 天前
将JetBrains系软件(PhpStorm、IntelliJIdea、WebStorm)缓存目录迁移到其它盘
ide·phpstorm
计算机学姐20 天前
基于php的摄影网站系统
开发语言·vue.js·后端·mysql·php·phpstorm
计算机学姐20 天前
基于php的旅游景点预约门票管理系统
开发语言·后端·mysql·php·phpstorm
ljh57464911921 天前
PhpStorm 2022.3 版本中,修改使用 Git 提交时看到弹出式的对话框模式
ide·git·php·phpstorm
ljh57464911922 天前
phpstorm 2022.3 如何修改快捷键单行注释开始的位置
ide·phpstorm
旺仔Sec1 个月前
PHP开发环境下接入ueditor富文本编辑器
php·phpstorm
郑州光合科技余经理1 个月前
同城系统海外版:一站式多语种O2O系统源码
java·开发语言·git·mysql·uni-app·go·phpstorm