- Community Home
- >
- HPE Community, Japan
- >
- HP-UX
- >
- System Management
- >
- ユーザパスワードの期限切れの通知
system management
1752538
メンバー
4859
オンライン
108788
解決策
フォーラム
カテゴリ
Company
Local Language
戻る
フォーラム
ディスカッションボード
フォーラム
- Data Protection and Retention
- Entry Storage Systems
- Legacy
- Midrange and Enterprise Storage
- Storage Networking
- HPE Nimble Storage
ディスカッションボード
ディスカッションボード
ディスカッションボード
フォーラム
ディスカッションボード
戻る
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
- BladeSystem Infrastructure and Application Solutions
- Appliance Servers
- Alpha Servers
- BackOffice Products
- Internet Products
- HPE 9000 and HPE e3000 Servers
- Networking
- Netservers
- Secure OS Software for Linux
- Server Management (Insight Manager 7)
- Windows Server 2003
- Operating System - Tru64 Unix
- ProLiant Deployment and Provisioning
- Linux-Based Community / Regional
- Microsoft System Center Integration
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
Discussion Boards
ブログ
情報
コミュニティ言語
言語
フォーラム
ブログ
トピックオプション
- RSS フィードを購読する
- トピックを新着としてマーク
- トピックを既読としてマーク
- このトピックを現在のユーザーにフロートします
- ブックマーク
- 購読
- 印刷用ページ
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
05-10-2005 09:59 AM
05-10-2005 09:59 AM
ユーザパスワードの期限切れの通知
HP-UX 11.0 を使用しています。ユーザパスワードの有効期限を設定していますが、期限切れの警告をユーザにメールで通知する方法があるかどうか、ある場合には方法を知りたいのですが。
どなたかよい方法をご存じないですか?
どなたかよい方法をご存じないですか?
2件の返信2
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
05-10-2005 10:26 AM
05-10-2005 10:26 AM
ユーザパスワードの期限切れの通知
OSの標準機能では、そのような設定はないと思います。
cronで定期的にチェックして、メール送信するしかないのではないでしょうか?
/etc/passwdや/tcbに保存されている有効期限を日付に変換するのが一苦労だとは思いますが。
他には、少々強引な方法ですが、passwdコマンドのwarpperスクリプトを作って、メールを送信するスクリプトをxx日後に実行するよう、atで登録するという方法もあるかと思います。
cronで定期的にチェックして、メール送信するしかないのではないでしょうか?
/etc/passwdや/tcbに保存されている有効期限を日付に変換するのが一苦労だとは思いますが。
他には、少々強引な方法ですが、passwdコマンドのwarpperスクリプトを作って、メールを送信するスクリプトをxx日後に実行するよう、atで登録するという方法もあるかと思います。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- 不適切なコンテンツを報告
05-11-2005 06:06 AM
05-11-2005 06:06 AM
ユーザパスワードの期限切れの通知
man 4 passwd には、
期間を表す文字列の最初の文字 M は、パスワードの有効な期間を週で表した
ときの最大値です。パスワードの有効期限を過ぎたユーザーがログインしよう
とすると、新しいパスワードを設定するように求められます。次の文字 m
は、パスワードが変更できるようになるまでに経過しなければならない期間を
週で表したときの最小値です。残りの2文字は、パスワードが最後に変更され
た週を定義します (ヌル文字列はゼロと等価です)。 M と m は、0から63の範
囲の値で、上に説明のある64の文字セットに相当します。
とありました。例えば、"o0dQ" みたいな文字列は、
getpwent()を使えば読めますが、この解読は大変でした。先頭の1文字は文字->数字の変換規則(これも man 4 passwd にある)をすればよいのですが、
3番目4番目の文字が"最後にパスワードを変更した週を表す" はず。3番目4番目を数字 (0..63) にして
3番目 * 64 + 4番目を計算したら意味のない大きな数になってしまいました。 4番目 * 64 + 3番目で
妥当な週番号に収まりました。で、
-------
#include
#include
#include
int
decode(ch)
int ch;
{
if (((int)'.' <= ch) && (ch <= (int)'9'))
return( (int)( ch - (int)'.') );
if (((int)'A' <= ch) && (ch <= (int)'Z'))
return( (int)( ch - (int)'A' + 12 ) );
if (((int)'a' <= ch) && (ch <= (int)'z'))
return( (int)(ch - (int)'a' + 38 ) );
return(-1);
}
main(argc, argv)
int argc;
char *argv[];
{
int nokori_w;
struct passwd *p;
char age;
time_t current_time;
int thisweek, age_max, last_modified;
nokori_w = atoi(argv);
current_time = time((time_t *)NULL);
thisweek = current_time / ( 7 * 24 * 60 * 60 );
setpwent();
while (( p = getpwent() ) != (struct passwd *)NULL) {
if (strlen(p->pw_age) != 0) {
strcpy(age, p->pw_age);
age_max = decode(age);
last_modified = 64 * decode(age)
+ decode(age);
if ((last_modified + age_max) < thisweek)
printf("passwd for user:%s has been expired\n",
p->pw_name);
else {
if ((last_modified + age_max)
< thisweek + nokori_w)
printf("passwd for name:%s will expire\n",
p->pw_name);
}
}
}
endpwent();
}
-------
こんな風にしてやれば、週単位ですが、passwdの
変更期限の切れたユーザーと、猶予期間が迫っているユーザーを/etc/passwdからみつけられそうです。
(もし、trusted systemにしている場合には、getprpwent()を使わないといけないはず。)
これを元に、該当ユーザーにmailを送るような
cron ジョブを、例えば月曜日に実行するように仕掛けたらいかが?
(上のプログラムで、週の計算はあんまり厳密なものではありません。 "パスワードは木曜日の 00:00 GMT を週の始まりとみなします。" とありますから、
cronジョブはむしろ金曜の朝の実行が適当かも。)
期間を表す文字列の最初の文字 M は、パスワードの有効な期間を週で表した
ときの最大値です。パスワードの有効期限を過ぎたユーザーがログインしよう
とすると、新しいパスワードを設定するように求められます。次の文字 m
は、パスワードが変更できるようになるまでに経過しなければならない期間を
週で表したときの最小値です。残りの2文字は、パスワードが最後に変更され
た週を定義します (ヌル文字列はゼロと等価です)。 M と m は、0から63の範
囲の値で、上に説明のある64の文字セットに相当します。
とありました。例えば、"o0dQ" みたいな文字列は、
getpwent()を使えば読めますが、この解読は大変でした。先頭の1文字は文字->数字の変換規則(これも man 4 passwd にある)をすればよいのですが、
3番目4番目の文字が"最後にパスワードを変更した週を表す" はず。3番目4番目を数字 (0..63) にして
3番目 * 64 + 4番目を計算したら意味のない大きな数になってしまいました。 4番目 * 64 + 3番目で
妥当な週番号に収まりました。で、
-------
#include
#include
#include
int
decode(ch)
int ch;
{
if (((int)'.' <= ch) && (ch <= (int)'9'))
return( (int)( ch - (int)'.') );
if (((int)'A' <= ch) && (ch <= (int)'Z'))
return( (int)( ch - (int)'A' + 12 ) );
if (((int)'a' <= ch) && (ch <= (int)'z'))
return( (int)(ch - (int)'a' + 38 ) );
return(-1);
}
main(argc, argv)
int argc;
char *argv[];
{
int nokori_w;
struct passwd *p;
char age;
time_t current_time;
int thisweek, age_max, last_modified;
nokori_w = atoi(argv);
current_time = time((time_t *)NULL);
thisweek = current_time / ( 7 * 24 * 60 * 60 );
setpwent();
while (( p = getpwent() ) != (struct passwd *)NULL) {
if (strlen(p->pw_age) != 0) {
strcpy(age, p->pw_age);
age_max = decode(age);
last_modified = 64 * decode(age)
+ decode(age);
if ((last_modified + age_max) < thisweek)
printf("passwd for user:%s has been expired\n",
p->pw_name);
else {
if ((last_modified + age_max)
< thisweek + nokori_w)
printf("passwd for name:%s will expire\n",
p->pw_name);
}
}
}
endpwent();
}
-------
こんな風にしてやれば、週単位ですが、passwdの
変更期限の切れたユーザーと、猶予期間が迫っているユーザーを/etc/passwdからみつけられそうです。
(もし、trusted systemにしている場合には、getprpwent()を使わないといけないはず。)
これを元に、該当ユーザーにmailを送るような
cron ジョブを、例えば月曜日に実行するように仕掛けたらいかが?
(上のプログラムで、週の計算はあんまり厳密なものではありません。 "パスワードは木曜日の 00:00 GMT を週の始まりとみなします。" とありますから、
cronジョブはむしろ金曜の朝の実行が適当かも。)
上記の意見は、Hewlett Packard Enterpriseではなく、著者の個人的な意見です。 このサイトを使用することで、利用規約と参加規約に同意したことになります 。
© Copyright 2024 Hewlett Packard Enterprise Development LP