在 ubuntu 上创建临时用户

在 ubuntu 上创建临时用户
  • 我想在 ubuntu 上创建一个临时用户,该用户会在一定时间内被删除。
  • 我可以延长删除时间。
  • 我可以获取用户删除之前剩余时间的值。谢谢。

答案1

您可以借助useradd命令和--expiredate选项(到期日期)创建一个临时用户,该用户会在一定时间后被禁用/到期。

sudo useradd -e <date> username  # or
sudo useradd --expiredate <date> username

假设您想创建一个用户test并将到期时间设置为“2023 年 1 月 1 日”。

sudo useradd -e 2023-01-01 test

然后你可以验证有效期等

sudo chage -l test

在此处输入图片描述

希望这可以帮助。

答案2

遵循你的三点,但分解为更原子的操作:

1. 创建或更新用户

创建具有到期日期的用户,或修改用户。注意:使用YYYY-MM-DD日期格式。

创建新用户:

sudo useradd -e 2022-12-31 newuser

修改现有用户:

sudo chage --expiredate 2022-12-31 existinguser

2. 查找到期日期

简而言之,整个过程都打包在一个文件中,但下面解释了该过程的关键部分。

chage --list --iso8601 test | grep "Account expires" | sed -s 's/.*:\ //g'

该命令chage需要 root 权限。iso8601无论会话中的语言环境如何,该参数都会使日期保持不变。替换sed所有s字符,直到第一次出现:(请注意空格键),这样我们就得到了日期(格式与date '+%F'命令的输出完全相同)。

3. Chron 自动删除用户

让我们自动化一下。假设文件/root/remove-expired-users.sh包含以下代码。

#/bin/bash

SOURCEURL='[https://askubuntu.com/questions/1445285/create-a-temporary-users-on-ubuntu]'
LOGFILE='/var/log/messages'

for USERNAME in $(sed 's/\:.*$//g' /etc/passwd); do

    echo "`date '+%F_%R'` :: $SOURCEURL :: Testing user -=## $USERNAME ##=- against being expired, for removal." >> $LOGFILE
    EXPIRYDATE=`chage --list --iso8601 $USERNAME | grep "Account expires" | sed -s 's/.*:\ //g'`

    if [ `date '+%F'` = $EXPIRYDATE ]; then

        echo "`date '+%F_%R'` :: $SOURCEURL :: User -=## $USERNAME ##=- expired today. Remove action commented-out for safety." >> $LOGFILE

        # deluser $USERNAME
        # deluser --group --only-if-empty $USERNAME

    fi

done

使/root/remove-expired-users.sh至少对 root 可执行,添加此行:14 3 * * * /root/remove-expired-users.sh到 root 的 crontab(此处:)sudo -i crontab -e,以便在今天凌晨 3:14 删除今天过期的用户(尽管在 23:59 删除它们更有意义)。

评论:

  • 列出全部内容并不优雅(也不安全)/etc/passwd,但对于学习来说可以。对于产品,此循环将排除 ID 低于 1000 甚至更多的用户(例如管理员)。
  • 出于安全考虑,用户删除已被注释掉。请确保在可重新生成的虚拟机上进行测试,否则您就是在自找麻烦。
  • 大多数这些操作都需要 root 权限,因此需要在 root 的 cron 上进行配置。此外,(root 的)权力越大,责任越大:拼写错误可能会带来灾难性的后果。
  • 如果您的机器在某一天没有运行,那么在脚本运行时,当天到期的用户将不会在系统中删除。这违反了假设,但另一方面他们已经无法登录。

4. 距离到期天数

上面有一个命令可以查看到期日期。到期天数可以通过以下步骤计算:

  • 将到期日期和今天的日期转换为自纪元以来的(毫秒)秒数。
  • 减去这些。任何非负数(或正数,取决于从什么中减去什么)的数值都符合下一步的条件。
  • 进行适当的划分和舍入,以获得距离到期日和小时数。

相关内容