これが私ができることです:
ユーザーのアカウントが作成されると、ユーザーはssh
- tunnelを使用できるようになりますが、ルートユーザーがカウントダウンをリセットしない限り、30日後にアカウントは自動的に削除されます。
これを自動化するにはどうすればよいですか?約15人のユーザーを処理する必要があります。
useradd
の--expiredate
オプションを使用して、ユーザーのアカウントの有効期間を制御できます。
useradd
manページからの抜粋
-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 -E 2013-08-30 someuser
これを行うには、実際にdate
コマンドを使用するとかなり簡単です。例えば:
$ date -d "30 days"
Sun Jul 28 01:03:05 EDT 2013
date
コマンドの+FORMAT
オプションを使用してフォーマットすると、最終的に次のようになります。
$ date -d "30 days" +"%Y-%m-%d"
2013-05-28
上記の要素を知っているので、これを1つの方法でまとめます。まず、アカウントを作成するときに、次のコマンドを実行します。
$ useradd -e `date -d "30 days" +"%Y-%m-%d"` someuser
次に、有効期限を調整する場合は、定期的にこのコマンドを実行します。
$ chage -E `date -d "30 days" +"%Y-%m-%d"` someuser
ユーザーを数分間だけアクティブにしたい場合は、日付を指定する必要があるため、上記のオプションは使用できません。その場合は、crontab
を設定して、指定した時間(たとえば10分)後に作成したユーザーを削除/ロックするか、次のいずれかを実行します。
adduser someuser && sleep 600 && usermod --lock someuser
または
$ adduser someuser
$ echo usermod --lock someuser | at now + 10 minutes
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
別の方法(OSがアカウントの有効期限をサポートしていない場合、またはこの機能が何らかの理由で機能しない場合):このアカウントをロックするcronジョブを30日後に実行するように設定します。
通常、アカウントは、暗号化されたパスワードを無効な値に設定することによってロックされます。 FreeBSDでは、pw lock X
コマンドはアカウントX
をロックします。