web-dev-qa-db-ja.com

Gnu / Linuxなどの一般的なUnixの `/ etc / shadow`にパスワードを保存するために使用される暗号化メカニズムは何ですか?

(初心者の観点から)

先日、典型的な「passwd」コマンドがLINUXOSでどのように機能するかを考えていました。たとえば、「passwd」と入力すると、パスワードを入力するためのプロンプトが表示され、そのパスワードが暗号化アルゴリズムでラップされて保存され、/ etc/shadowに保存されます。そこで、私は自分の「パスワード/ログインエミュレーション」を持ってきました。最初は、ユーザー名とパスワードをmango.txtという名前のファイルに「username :: password」の形式で保存し、次に同じユーザーがログインしようとすると、ユーザー名を要求します。とパスワード。そこで、これら2つのスクリプトを思いつきました。

スクリプト1:ユーザー名とパスワードの入力を求め、mango.txtというファイルに保存します。

# Title: username.sh
#!/bin/bash

# What I'm planning to do here is that, 
#create a username script which allows a 
#user to add themselves by puting in 
#their 
#names
# and their password at the time of 
#login, it will save itself to a file 
#with 
#the username and password. 
# If username already exists, tells the 
#user that a user with the same name 
#exits, else add the new user. 
# along with a password. The password is 
# saved in a md5 hash form.

exec 2>/dev/null
touch mango.txt

echo -n "Enter username: "

read usame

if [ "$usame" == "" ]; then echo -e "Username can not be blank\n"
 ./username.sh
else

grep -q $usame mango.txt

if [ "$?" == 0 ]; then

echo -e "A username with the same name already exists\n"

./username.sh

else
echo -n "Password: "
read -s -p "Password: " passwd

while true; do

    if [ "$passwd" == "" ]; then echo -e "Password can not be blank\n"

    else 
        echo $usame::$(echo $passwd | md5sum) >> mango.txt
        echo -e "\nUser $usame added\n"
    break
fi
done
fi
fi

スクリプト2:これを「bash.bashrc」に追加できる場合は、端末の起動ごとに実行され、ユーザー名とパスワードを要求されます。ユーザー名とパスワードがmango.txtでそれと一致する場合は、ユーザーにログインを許可します。それ以外の場合は端末を終了します(;プレーンパスワードはmd5sum形式のようにmango.txtファイルのパスワードと比較されます。

#Title: login.sh

# A simple login bash script

#trap interrupts your keyboard if you 
#press ctrl+z or ctrl+c

trap '' INT TSTP

read -p "Enter username: " usname
grep -q $usname mango.txt
if [ "$?" -gt 0 ]; then
  echo "Username not found"
  sleep 1
  pkill -9 bash #That's a bit too much I guess, but oh well

else
read -s -p "Password: " password

if [ "$password" == "" ]; then 
  echo "Password can not be blank"
   ./login.sh
else
#saves the password in md5sum format in tmp.txt

echo $password | md5sum > tmp.txt
tmp="$(cat tmp.txt)"
#if the md5 hashes match, then allow login saying yo
cat mango.txt | grep -q $usname::$tmp
if [ "$?" == 0 ]; then
echo -e "\nyo"
#else print login failed
else echo -e "\nLogin failed"
  sleep 1
    pkill -9 bash
fi
fi
fi
rm tmp.txt
# Deletes the tmp file afterwards

LINUXシステムでそれが正確にどのように機能するか(ccryptやscryptなどの暗号化やさまざまなソルティングメカニズムは言うまでもありません)にはほど遠いことは確かですが、私が思いつく限りでは最高です..おそらく少しナッジそれが実際にどのように機能するかについての正しい方向性は、専門家から素晴らしいでしょう。 (:

暗号化メカニズムは私が非常に興味を持っているものです。

2
Samiul Joy

slowsaltedsecureハッシュ関数:鍵導出関数。

  • ハッシュ関数を使用して、パスワードを非表示にし、管理者でさえも誰もパスワードを読み取れないようにします。ハッシュを元に戻すことはできません。ユーザーがログインすると、パスワード入力をハッシュし、保存されているハッシュと比較します。

  • ソルトとは、ハッシュする前に、パスワードに大きなランダムな文字列を追加することです。塩をハッシュと一緒に保存する必要があります。これは、辞書攻撃を遅くするために行います。辞書攻撃は、既知の共通パスワードの辞書をハッシュし、一致するものを探すことです。次に、攻撃者はユーザーごとに辞書を作成する必要があります(すべてのユーザーに固有のソルトがあるため)。

  • 辞書攻撃をさらに遅くするために、遅いハッシュを使用します。計算時間を犠牲にして、ユーザーがログインするたびに。

あなたはでもっと読むことができます

一部のGnu/Linuxシステムで使用されているものについては、この関連する質問を参照してください。

編集/etc/shadow-それをしないでください。

4
ctrl-alt-delor