Как я могу создать автоматически истекающие учетные записи пользователей?

20

Вот что я хотел бы сделать:

После того как учетная запись пользователя создана, он должен иметь возможность ssh-tunnel, но его учетная запись автоматически удаляется через 30 дней, если обратный отсчет не будет сброшен пользователем root.

Как я могу автоматизировать это? Мне придется обрабатывать около 15 пользователей.

Yusufmm
источник

Ответы:

29

useradd

Вы можете контролировать срок действия учетной записи пользователя с помощью --expiredateопции useradd.

выдержка из useraddсправочной страницы

-e, --expiredate EXPIRE_DATE
     The date on which the user account will be disabled. The date is
     specified in the format YYYY-MM-DD.

     If not specified, useradd will use the default expiry date specified
     by the EXPIRE variable in /etc/default/useradd, or an empty string 
     (no expiry) by default.

Поэтому при настройке учетной записи пользователя вы можете указать дату +30 дней в будущем и добавить ее к своей useraddкоманде при настройке их учетных записей.

$ useradd -e 2013-07-30 someuser

Chage

Вы также можете изменить дату существующего аккаунта с помощью chageкоманды. Чтобы изменить срок действия аккаунта, вы должны сделать следующее:

$ chage -E 2013-08-30 someuser

расчет даты +30 дней

Сделать это на самом деле довольно тривиально, используя dateкоманду. Например:

$ date -d "30 days"
Sun Jul 28 01:03:05 EDT 2013

Вы можете отформатировать, используя +FORMATпараметры dateкоманды, которая в итоге дает вам следующее:

$ date -d "30 days" +"%Y-%m-%d"
2013-05-28

Собираем все вместе

Итак, зная вышеперечисленные фрагменты, вот один из способов собрать их вместе. Сначала при создании учетной записи вы запускаете эту команду:

$ useradd -e `date -d "30 days" +"%Y-%m-%d"` someuser

Затем, когда вы захотите настроить срок их действия, вы периодически запускаете эту команду:

$ chage -E `date -d "30 days" +"%Y-%m-%d"` someuser

Задание периодов времени менее 24 часов

Если вы хотите, чтобы пользователь был активным только в течение нескольких минут, вы не можете использовать описанные выше параметры, поскольку они требуют указания даты. В этом случае вы можете либо настроить crontabудаление / блокировку созданного пользователя по истечении указанного времени (например, 10 минут), либо выполнить одно из следующих действий:

adduser someuser && sleep 600 && usermod --lock someuser

или

$ adduser someuser
$ echo usermod --lock someuser | at now + 10 minutes

Ссылки

SLM
источник
3
Я позволил себе изменить% M (минуты) на% m (месяц)
Anthon
5

Если вы используете Debian / Ubuntu, вы должны использовать adduserи usermod. В системах на основе Debian useraddсчитается низким уровнем и (согласно man-страницам):administrators should usually use adduser(8) instead

adduser не имеет срока действия, так что вы просто используете его для создания учетной записи.

usermodимеет параметр -e/, --expiredateчтобы установить срок действия.

Вы рассчитываете параметр для dateс: date -d "30 days" "+%Y-%m-%d"чтобы получить:

usermod --expiredate $(date -d "30 days" "+%Y-%m-%d") username
Энтон
источник
1

Другой способ (если ваша ОС не поддерживает истечение срока действия учетной записи или эта функция по какой-либо причине не работает): настройте задание cron на 30 дней, которое заблокирует эту учетную запись.

Обычно учетная запись блокируется, если для ее зашифрованного пароля установлено недопустимое значение; во FreeBSD pw lock Xкоманда заблокирует учетную запись X.

sendmoreinfo
источник
1
Объясните, как вы можете заблокировать аккаунт.
SLM
На самом деле это зависит от ОС.
sendmoreinfo
4
Было бы полезно, если бы вы привели пример, показывающий это.
SLM