![Как создать пользователя Linux с автоматическим истечением срока действия после исправления периода](https://rvso.com/image/109244/%D0%9A%D0%B0%D0%BA%20%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D1%82%D1%8C%20%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F%20Linux%20%D1%81%20%D0%B0%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%BC%20%D0%B8%D1%81%D1%82%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%D0%BC%20%D1%81%D1%80%D0%BE%D0%BA%D0%B0%20%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D1%8F%20%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%20%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%20%D0%BF%D0%B5%D1%80%D0%B8%D0%BE%D0%B4%D0%B0.png)
Я создал PHP-приложение, которое может создавать новые учетные записи пользователей Linux с автоматическим истечением срока действия по истечении нескольких периодов.
После поиска в Google по теме «Как автоматизировать удаление пользователя Linux после исправления периода» я нашел этот ответ,https://unix.stackexchange.com/a/80971/224583
Но я не знал, как сделать так, чтобы, например, создать новую учетную запись, срок действия которой истекал через 10 месяцев или 5 месяцев и т. д.
Мой вопрос, как преобразовать месяц в день, например, я даю 5 месяцев и преобразовываю количество дней пяти месяцев. Или есть какие-нибудь решения помимо моего вопроса?
решение1
Для параметра истечения срока действия в useradd
утилите требуется указать дату в формате YYYY-MM-DD
.
Вы можете рассчитать эту дату, используя -d
опцию команды date
. Используя пример вашего сценария на 5 месяцев:
$ date +"%Y-%m-%d"
2017-04-08
$ date -d "5 months" +"%Y-%m-%d"
2017-09-08
решение2
Переключатель -e
ожидает useradd
дату в международном формате ( YYYY-MM-DD
), как можно узнать из его страницы руководства:
-e, --expiredate EXPIRE_DATE
The date on which the user account will be disabled. The date is
specified in the format YYYY-MM-DD.
[...]
Теперь вам просто нужно указать дату, когда должен истечь срок действия учетной записи. Вы можете выполнить этот расчет на PHP. Ответ, на который вы ссылаетесь, делает это с помощью стандартного инструмента командной строки, поэтому не нужно использовать язык высокого уровня.
Вот пример кода того, как это сделать на PHP:
$diffHour = 0;
$diffMinute = 0;
$diffSecond = 0;
$diffMonth = 10;
$diffDay = 0;
$diffYear = 0;
$hour = date("H") + $diffHour;
$minute = date("i") + $diffMinute;
$second = date("s") + $diffSecond;
$month = date("n") + $diffMonth;
$day = date("j") + $diffDay;
$year = date("Y") + $diffYear;
$time = mktime($hour, $minute, $second, $month, $day, $year);
$date = date("Y-m-d", $time);
Просто заполните переменные в самом верхнем блоке. Я заполнил их для вашего примера на 10 месяцев. Вы также можете вернуться назад во времени. Например, если вы хотите, чтобы срок действия истек через 7 месяцев минус 4 дня, вы можете установить $diffMonth = 7;
и $diffDay = -4;
.
Затем передайте значение даты ( 2018-02-09
при запуске сегодня (за исключением случаев, когда вы живете в Америке, тогда дата будет на день раньше, поскольку мы все еще используем устаревшую систему времени с часовыми поясами)) в ваш bash-скрипт.
Пример bash-кода:
useradd -e "2018-02-09" "rizal"