一定期間後に自動的に期限切れになる Linux ユーザーを作成する方法

一定期間後に自動的に期限切れになる Linux ユーザーを作成する方法

一定期間後に自動的に期限切れになる新しい Linux ユーザー アカウントを作成できる PHP アプリケーションを作成しました。

Googleで「修正後にLinuxユーザーを自動削除する方法」を検索したところ、この答えが見つかりました。https://unix.stackexchange.com/a/80971/224583

しかし、たとえば新しいアカウントを作成して、10 か月後、または 5 か月後に期限切れにする方法がわかりません。

私の質問は、月を日に変換する方法です。たとえば、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今日実行した場合 (ただし、アメリカに住んでいる場合は、タイムゾーンのある遅れた時間システムがまだ使用されているため、1 日早くなります)) を bash スクリプトに渡します。

bash コードの例:

useradd -e "2018-02-09" "rizal"

関連情報