温馨提示×

ubuntu定时管理用户账户

小樊
43
2025-10-26 18:14:43
栏目: 智能运维

Ubuntu定时管理用户账户的常见操作

一、定时删除用户账户(最常用定时管理场景)

定时删除用户账户需结合cron定时任务用户删除命令deluser/userdel),以下是具体步骤:

1. 准备删除命令

Ubuntu中删除用户的常用命令:

  • deluser username:仅删除用户账户(保留主目录及邮件池);
  • deluser --remove-home usernameuserdel -r username:删除用户账户及所有相关文件(主目录、邮件等),彻底清理

2. 配置cron定时任务

通过crontab设置定时执行规则,步骤如下:

  • 打开当前用户的cron编辑器:crontab -e
  • 添加定时规则(以“每天凌晨2点删除user1”为例):
    0 2 * * * deluser --remove-home user1  # 彻底删除用户及主目录
    
    或批量删除多个用户(用分号分隔命令):
    0 3 * * * deluser --remove-home user2; deluser --remove-home user3  # 每天凌晨3点删除user2和user3
    
  • 保存并退出编辑器(Ctrl+O保存,Ctrl+X退出)。

3. 注意事项

  • 权限要求:需用sudo运行删除命令,因此cron任务中需包含sudo(或直接以root用户编辑crontab,命令为sudo crontab -e);
  • 风险规避:删除用户前需确认账户无重要数据,建议提前备份。

二、定时设置账户到期(自动失效)

通过chage命令设置账户到期日,到期后账户自动无法登录,适合“临时账户定期失效”场景:

1. 设置账户到期日期

使用chage命令指定账户到期时间(格式:YYYY-MM-DD):

sudo chage -E 2025-12-31 username  # 设置username账户于2025年12月31日到期

2. 配置cron定时任务

若需定期批量设置账户到期(如每月1日设置下月15日到期的临时账户),可编写脚本并结合cron执行:

  • 创建脚本set_account_expiry.sh
    #!/bin/bash
    # 设置临时账户到期日为下月15日
    NEXT_MONTH=$(date -d 'next month' +%Y-%m)
    TARGET_DATE="${NEXT_MONTH}-15"
    USERS=("temp_user1" "temp_user2")  # 临时账户列表
    
    for user in "${USERS[@]}"; do
      if id "$user" &>/dev/null; then
        sudo chage -E "$TARGET_DATE" "$user"
        echo "已设置$user到期日为$TARGET_DATE"
      else
        echo "用户$user不存在,跳过"
      fi
    done
    
  • 赋予脚本执行权限:chmod +x set_account_expiry.sh
  • 配置cron定时执行(每月1日0点运行):
    crontab -e
    
    添加以下内容:
    0 0 1 * * /path/to/set_account_expiry.sh  # 每月1日0点执行脚本
    

三、定时锁定/解锁账户(基于登录失败或时间规则)

针对“频繁登录失败”或“定期休眠账户”的场景,可通过PAM模块设置锁定策略,并结合cron定时解锁:

1. 配置账户锁定策略(以登录失败为例)

编辑PAM的sshd配置文件(针对SSH登录),添加以下内容:

sudo nano /etc/pam.d/sshd

在文件顶部添加(限制连续失败5次,锁定5分钟):

auth required pam_tally2.so deny=5 unlock_time=300 even_deny_root root_unlock_time=5
  • 参数说明:deny=5(允许连续失败5次)、unlock_time=300(锁定300秒,即5分钟)。

2. 定时解锁账户

若需定期解锁所有被锁定的账户,可编写脚本并通过cron定时执行:

  • 创建脚本unlock_accounts.sh
    #!/bin/bash
    # 解锁所有被锁定的用户账户
    LOCKED_USERS=$(sudo pam_tally2 | grep -E '^[0-9]+' | awk '{print $1}')
    for user in $LOCKED_USERS; do
      sudo pam_tally2 --user="$user" --reset
      echo "已解锁用户:$user"
    done
    
  • 赋予脚本执行权限:chmod +x unlock_accounts.sh
  • 配置cron定时执行(每天凌晨1点运行):
    crontab -e
    
    添加以下内容:
    0 1 * * * /path/to/unlock_accounts.sh  # 每天凌晨1点解锁所有被锁账户
    

关键注意事项

  • 权限控制:所有定时任务需用sudo或root用户执行,确保命令有足够权限;
  • 测试验证:配置前建议在测试账户上验证命令有效性(如手动运行deluser --remove-home testuserchage -E 2025-12-31 testuser);
  • 日志监控:通过/var/log/auth.log查看账户锁定、删除等操作的日志,及时排查问题。

0