2022 年度 OSS リテラシー 3 : Linux におけるパスワード管理

パスワードの保管方法

登録されたユーザ情報は, /etc/passwd と /etc/shadow に登録される. /etc/shadow に暗号化されたパスワードが, それ以外の情報は /etc/passwd に 書かれる.

これらのファイルを確認してみよう. grep コマンドを使うことで, 第一引数に 与えた文字列が含まれている行だけを抜き出すことができる.

なお,ユーザ名 hogehoge は自分のアカウント名 (学生番号) に読み替えること.

$ sudo -s 

# less /etc/passwd

  ...(略)...

# grep hogehoge /etc/passwd

  hogehoge:x:1001:1001:SUGIYAMA Ko-ichiro,,,:/home/hogehoge:/bin/bash

# less /etc/shadow

  ...(略)...

# grep hogehoge /etc/shadow

  hogehoge:$6$AAAAAA$XXXXXXXXXXXXXXXXXXXXXXXXX:17439:0:99999:7:::

# less /etc/group

  ...(略)...

# grep hogehoge /etc/group

  hogehoge:x:1001:

/etc/shadow はパスワード情報が含まれているので, 一般ユーザには読めない ファイルパーミッションになっている. /etc/passwd や /etc/group は一般ユー ザでも読める.

# ls -l /etc/passwd /etc/group /etc/shadow

  -rw-r--r-- 1 root root    814 10月 19 09:33 /etc/group
  -rw-r--r-- 1 root root   1718 10月 19 09:34 /etc/passwd
  -rw-r----- 1 root shadow 1097 10月 19 09:33 /etc/shadow

John The Ripper で脆弱性の高いパスワードの探索

John The Ripper で 簡単なパスワードを設定している人がいないか確認することもできる. John The Ripper のようなツールを悪用すると辞書式攻撃, ブルートフォース攻撃となるので法に触れます. あくまで「自分のサーバのユーザ管理」のためだけに使ってください (もちろん,ユーザに告知した上で).なお,使用は自己責任です.

試しに簡単なパスワードに変えてみる (hogehoge は自分のユーザ名に置き換えること)

# passwd hogehoge

  新しい パスワード:                        <-- 入力しても表示されません
  新しい パスワードを再入力してください:     

/etc/passwd と /etc/shadow を 1 つのファイルにまとめる

# unshadow /etc/passwd /etc/shadow > hash.txt

hash.txt を編集して,簡単なパスワードをつけたユーザだけにする.

デフォルトの辞書を使って,暗号化されたパスワードから生のパスワードを推測する. 12345678 くらいのパスワードであれば,1 分半程度で推測されてしまう. また,Debian11 では yescrypt でパスワードがハッシュ化されているので, "--format=crypt" をオプションで付ける必要がある.

# apt install john

# john --wordlist=/usr/share/john/password.lst --format=crypt hash.txt 

  12345678         (hogehoge)
  1g 0:00:01:24 100% 2/3 0.01186g/s 61.97p/s 61.97c/s 61.97C/s 123456..pepper


# john -show hash.txt

確認が終わったら,パスワードを元に戻す.

# passwd hogehoge

  新しい パスワード:                        <-- 入力しても表示されません
  新しい パスワードを再入力してください:     

hash.txt を削除する

# rm hash.txt

ログアウト

# exit
$ exit

課題

  • 以下のファイルの書式を調べよ.
    • /etc/passwd
    • /etc/group
    • /etc/shadow
    • /etc/sudoers
      • "%sudo ALL=(ALL:ALL) ALL" という記述があるが, 各 ALL の意味を調べなさい.