BASH:/etc/shadowユーザーパスワードがロックされていることを確認してください。

BASH:/etc/shadowユーザーパスワードがロックされていることを確認してください。

目的:ユーザーのパスワードがロックされていることを確認してください/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ファイルを手動で解析しないでください。

すべての可能なシナリオを考慮しないと、これらのファイルを解析することは困難です(たとえば、無効なパスワードはしばしば単一にエンコードされます。*他のソリューションはそれを処理できますか?)。

また、認証はshadowNISまたは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(オプション)で行うのが最善です。--lockshadow

おすすめ記事