目的:ユーザーのパスワードがロックされていることを確認してください/etc/shadow
。つまり、/etc/shadowの2番目のフィールド(ユーザーのハッシュパスワードを含む)の最初の文字が感嘆符( '!')であることを確認してください。
希望の出力:$disabled
「True」または「False」を含む名前の変数
ユーザー名は$uname
変数にあり、次のようにしました。
disabled=`cat /etc/shadow |grep $uname |awk -F\: '{print$2}'`
# I now have the password and need one more pipe into the check for the character
# which is where I'm stuck. I would like to do like (in PHP syntax):
| VARIABLE=="!"?"True":"False"`
これは、root権限でCronによって実行され、必要なすべての情報にアクセスできるスクリプトの一部です。
ベストアンサー1
shadow
ファイルを手動で解析しないでください。
すべての可能なシナリオを考慮しないと、これらのファイルを解析することは困難です(たとえば、無効なパスワードはしばしば単一にエンコードされます。*
他のソリューションはそれを処理できますか?)。
また、認証はshadow
NISまたはLDAPを介して行われない場合があります。これらすべてを処理するいくつかの標準ツールがあります。この場合passwd
:
-S、--状態 アカウントステータス情報を表示します。ステータス情報は7つのフィールドで構成されています。最初のフィールドはユーザーのログイン名です。 2番目のフィールドは、ユーザーアカウントにロックされたパスワード(L)があるか、パスワードがないか(NP)、使用可能なパスワードがあるか(P)を示します。 3番目のフィールドには、最後のパスワード変更日が表示されます。次の4つのフィールドは、パスワードの最小期間、最大期間、警告期間、および非アクティブ期間です。この年齢は日単位で表示されます。
だからpasswd -S | cut -d ' ' -f 2
必要なものを作ります。単純な if/then はこれを目的の変数に変換します。
if [ "$(passwd -S "$USER" | cut -d ' ' -f 2)" = "P" ]
then
disabled="False"
else
disabled="True"
fi
ユーザーパスワードをロックする場合も同様です。これは手動で編集するよりもusermod
(オプション)で行うのが最善です。--lock
shadow