web-dev-qa-db-ja.com

Linux:ユーザーアカウントが有効になっているかどうかを確認するためのroot以外のシェルコマンドはありますか?

ユーザーのアカウントが無効になっているかどうかを教えてくれる非rootシェルコマンドはありますか?

LOCKINGとDISABLEDには細かい違いがあることに注意してください。

  • LOCKINGは、/ etc/passwdファイルのパスワードフィールドの前に!または*または!!を追加する場所です。パスワードをシャドウするLinuxシステムでは、このマーカーフラグは/ etc/passwdではなく/ etc/shadowに配置される場合があります。パスワードのロックは、ユーザー名のアカウントをロックするためにpassword -l username(rootとして)を介して(シェルプロンプトで)実行でき、オプション-uを使用するとロックが解除されます。
  • アカウントの無効化は、ユーザーアカウントの有効期限を過去のある時点に設定することによって行われます。これは、有効期限をUnixエポックから0日後に設定するchage -E 0 usernameを使用して実行できます。 -1に設定すると、有効期限の使用が無効になります。

ログインプロセスが提供されたパスワードを使用して保存されたハッシュに対して正しくハッシュするのを防ぐためのロックの効果(接頭辞付きのマーカー文字がハッシュの有効な出力文字ではないため、したがって、可能な入力を使用して、それに一致するハッシュを生成することはできません)。無効にすると、アカウントの有効期限がすでに過ぎているため、プロセスがアカウントを使用できなくなります。

私の状況では、ユーザーがまだログインできる可能性があるため、ロックの使用は十分ではありません。 ssh認証トークンを使用すると、そのユーザーの下のプロセスは引き続き他のプロセスを生成できます。したがって、ロックされているだけでなく、有効または無効になっているアカウントがあります。アカウントを無効または有効にする方法はすでにわかっています。上記のように、ルートアクセスとchageの使用が必要です。

私の質問を繰り返すと、特定のユーザーのこのアカウントの有効期限情報のステータスを出力できるroot権限なしで実行できるシェルコマンドはありますか?

それが役立つ場合、これはRed Hat Enterprise5.4システムでの使用を目的としています。出力はJavaプロセスに返され、必要に応じて出力を解析したり、戻りコードを利用したりできます。

1
weiji

いいえ、ありません。非特権ユーザーとして、そのようなユーザーに/ etc/shadowへのアクセスを許可することも潜在的なセキュリティリスクになります。最新のすべてのLinuxディストリビューションでは、セキュリティホールを排除するために、パスワードハッシュと追加のアカウント情報が/ etc/passwdから/ etc/shadowに移動されたと思います。システムがシャドウパスワードを使用している場合は、「!」パスワードハッシュの先頭には、/ etc/shadowにのみ表示および存在するため、通常の非特権ユーザーはアクセスできません。

1
Terpion

/etc/sudoersに以下を追加できます。

%admin   ALL = NOPASSWD: /usr/bin/chage -l *

これにより、adminグループの誰もが、パスワードの入力を求められることなく、次のようなコマンドを実行できるようになります。

Sudo chage -l username

Cronジョブなどからこれを実行する場合は、/etc/sudoersに以下を追加する必要があります。

Defaults:%admin   !requiretty

/etc/sudoersを直接編集しないでください。代わりに、Sudo visudoを実行してください)

0
Alastair Irvine