演習では、直接 passwd(4) を vi(1) で編集しているが、二重更新を回避するためにも vipw(8) を使うべき。
vipw は直接 /etc/passwd を編集せずに、一旦 /tmp/ptmp にコピーしそれを編集する。
すでに /etc/ptmp があれば、作業中と判断し編集を中止する。
同様に vigr(8) は /etc/group を /tmp/gtmp へコピーし同様の処理を行う。
# vipw +---------------------------- | /etc/passwd の編集 +---------------------------- ↓ 終了すると続けて、 shadow の編集ができる。 +---------------------------- | /etc/shadow の編集 +----------------------------
またパスワードなしのアカウントを作ることで、より手軽にバックドアでの
作業を行う事ができる。
パスワードなしのユーザは、パスワード領域を空欄にする事で可能。
# vipw (/etc/passwd) +---------------------------- |student:x:500:500::/home/student:/bin/bash +---------------------------- ↓ +---------------------------- |student::500:500::/home/student:/bin/bash +---------------------------- (/etc/shadow) +---------------------------- |student:$1$Ejj/0WPx$4arcMbEpj2CyyIJ1Hx4NZ2:15505:0:9999:7::: +---------------------------- ↓ +---------------------------- |student::15505:0:9999:7::: +---------------------------- $ ssh student@localhost Last login : Thu Aug 2 04:17: ... # パスワード確認なし $ ssh student@localhost who 04:23:12 up 5:26, 1 user, load average: 0.46, 0.47, 0.46 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT student tty1 - 04:17 0.00s 0.17s 0.01s ssh student@localhost
ワーストパスワード例 パスワードガイドライン ・単純な単語(辞書に載っているようなもの) password, himitsu ・上記の逆順、途中に数字・特殊文字を差し込んだもの passw0rd, un1ver$e ・ユーザ名、自身や家族(ペット)の名前のアレンジ user, tama123 ・生年月日、電話番号、自動車のナンバーなど連想される数値 090123123, 1212 ・(大文字、小文字、数字、特殊文字)のうち3つ以上を組み合わせる パスフレーズガイドライン ・16文字以上、過去24回使用履歴がない ・異なる単語が4つ以上、文字の連続は5回未満 ・知られたフレーズは使わない this is a pen, I'll be back ・キーボードの並び順はだめ qwertyuiop, mnbvcxz
#include <stdio.h> #include <unistd.h> #include <crypt.h> main( int argc, char **argv ) { printf("plain:%s salt:%s\n", argv[2], argv[1] ); printf("\t%s\n", crypt(argv[2], argv[1]) ); }実験方法
$ cc crypt.c -o crypt -lcrypt
# grep student: /etc/shadow student:$6$LtOjaIEm83ONbfQ4$peEN1yujv46JGfqe14BPWgthQDWTaWZWt.K7BuWc4BPDVvcqIRBxsKB.7RTvGd/5hJYXgFO53Bf0EZBrqjYLv0::0:99999:7:::内容は「$暗号化アルゴリズム番号(id)$ソルト(乱数初期化値)$暗号化されたパスワード::0:99999:7:::」となります。
$ ./crypt '$6$LtOjaIEm83ONbfQ4$' himitu plain:himitu salt:$6$LtOjaIEm83ONbfQ4$ $6$LtOjaIEm83ONbfQ4$peEN1yujv46JGfqe14BPWgthQDWTaWZWt.K7BuWc4BPDVvcqIRBxsKB.7RTvGd/5hJYXgFO53Bf0EZBrqjYLv0実行結果が /etc/shadow の内容と同じと言うことは、パスワードは himitu だと同定できた事になります。