GNU/Linux >> Linux の 問題 >  >> Linux

シェルスクリプトでユーザーのパスワードを確認する

ユーザーのパスワードを確認する完全に移植可能な方法はありません。これには特権実行可能ファイルが必要なため、最初から作成できるものではありません。ほとんどの非組み込み Linux システム、多くの組み込みシステム、および他のほとんどの Unix バリアントで使用される PAM には、setuid バイナリが付属していますが、直接のシェル インターフェイスはありません。PAM スタックを経由する必要があります。 /P>

Perl、Python、または Ruby で PAM バインディングを使用できます。

いくつかの checkpassword のいずれかをインストールできます

ユーザーが何に対しても sudo を実行できる場合、 sudo -kv 認証を求めるプロンプトが表示されます (これが sudo 構成で無効にされていない限り)。しかし、ユーザーに関する sudoers ルールがない場合、これは機能しません。

su を実行できます .これは、ほとんどの実装で機能します。あなたのケースでは、これがおそらく最善の策です。

if su -c true "$USER"; then
  echo "Correct password"
fi

指定された ローカル を検証できます シャドウ ファイルを使用して、指定されたユーザー名のパスワードは正しいです。

最近のほとんどのディストリビューションでは、ハッシュ化されたパスワードはシャドウ ファイル /etc/shadow (ルートのみが読み取り可能) に保存されます。 root として、指定されたユーザーのシャドウ ファイルから次のように行を引き出します。

cat /etc/shadow | grep username

次のように表示されます:

username:$1$TrOIigLp$PUHL00kS5UY3CMVaiC0/g0:15020:0:99999:7:::

ユーザー名の後に $1 があります。これは、MD5 ハッシュであることを示します。その後、別の $ があり、(この場合) TrOIigLp の後に別の $ が続きます。 TrOIigLpは塩である。その後は、salt を使用してハッシュ化されたハッシュ化されたパスワードです。この場合は PUHL00kS5UY3CMVaiC0/g0 です。

これで、次のように openssl を使用して、同じソルトを使用して指定されたパスワードをハッシュできます:

openssl passwd -1 -salt TrOIigLp

プロンプトが表示されたら、指定されたパスワードを入力します。openssl コマンドは、指定されたソルトを使用して MD5 ハッシュを計算する必要があります。これは、シャドウ ファイルの上記とまったく同じである必要があります。 -1 上記のコマンドは MD5 ハッシュ用です。


これは、ローカル ユーザーとリモート ユーザーの両方で機能し、単純にパスワード ハッシュを比較するのではなく、問題のユーザーとして完全な PAM スタックに対して認証を試みる、比較的堅牢なソリューションです。

#!/usr/bin/env ruby

require 'rpam'

username = ARGV[0]
password = ARGV[1]

if Rpam.auth(username, password, service: 'system-auth')
  puts 'authentication successful'
  exit 0
else
  puts 'authentication failure'
  exit 1
end

実行するには:./authenticate_as.rb として保存します。 、 chmod +x ./authenticate_as.rb 、および ./authenticate_as.rb $username $password .明らかでない場合は、Ruby と rpam gem が必要です。


Linux
  1. Ssh – Sshサーバーにログインするためのシェルスクリプト?

  2. どのシェルインタープリターがシバンなしでスクリプトを実行しますか?

  3. スペースを含むファイル名をシェルスクリプトに渡しますか?

  1. シェルスクリプトでパスワードを隠す?

  2. 関数とパラメータを変数として持つシェルスクリプト?

  3. ユーザーとして引数を使用してスクリプトを実行しますか?

  1. Bashスクリプトでユーザーアカウントとパスワードを自動的に追加する方法は?

  2. 変数でディレクトリを変更するシェルスクリプト

  3. シェル スクリプト経由で echo コマンドを使用して mysql_secure_installation を自動化する