クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

アカウント、SSH、ファイルのモードを堅くする

このレッスンのあとで: サーバーの弱いアカウント、SSH の設定、ファイルのモードを見つけて、直せる。

55分のレッスンコマンド10件Linux 管理のラボ:ユーザー、権限、cron、systemd をブラウザーで

誰も覚えていなかったアカウント

ある小さな店のサーバーに、1年前に去った取引先のアカウントが残っていました。パスワードは要らず、root もネットワークからログインできました。

誰も攻撃しませんでした。先に見つけたのは、スキャナーでした。直すのに5分しかかかりませんが、初日にやるべきことでした。

今日は、誰かが攻撃する前に、この作業を済ませる方法を学びます。

このレッスンのゴール

メモ

サーバーの弱いアカウント、SSH の設定、ファイルのモードを見つけて、直せる。

重要な言葉

ことばいみれい
堅牢化サーバーに要らないものを取り除いて、攻められる所を減らすこと
アカウントシステムがログインを許す名前。それぞれに権限がある
ファイルのモード誰が読み、書き、実行できるかを表す3桁の数640
誰でも書けるマシンのどのユーザーでも書き換えられるファイル
SSHネットワーク越しにサーバーへログインする道具
設定設定ファイルの1行。名前と値でできている

学生が入力するセルは、このプレビューでは空白です。

アカウントを並べ、誰が使うかを問う

知らないアカウントは、守れません。だから堅牢化は、一覧を作ることから始まります。

普通の人のアカウント番号(UID)は1000以上です。root の UID は0で、持ってよいのはroot だけです。

一般アカウントとシェルを並べる

コマンド
awk -F: '$3 >= 1000 && $3 < 65534 {print $1, $7}' /etc/passwd

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

UID 0 のアカウントはどれか

コマンド
awk -F: '$3 == 0 {print $1}' /etc/passwd

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

2つの一覧の読み方

1つ目の Run は、一般アカウントごとに1行を書きます。名前と、ログインシェル(たとえば /bin/bash)です。各行について、まだ人が必要としているかを問いましょう。

2つ目の Run が書くのは、root の1語だけです。もう1つ名前があれば、2つ目の root であり、インシデントを開く理由です。

モードは、誰が何をできるかを表す

どのファイルにも、3桁のモードがあります。持ち主、グループ、それ以外の全員の順です。各桁は、読むなら4、書くなら2、実行するなら1を足します。

アカウントの一覧は公開で、誰でも読めます。パスワードのハッシュを入れたファイルは、そうであってはいけません。

2つのファイルのモードを見る

コマンド
stat -c '%a %U:%G %n' /etc/passwd /etc/shadow

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

パスワードが空のアカウントを数える

コマンド
sudo awk -F: '$2 == "" {print $1}' /etc/shadow | wc -l

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

例: 4つのモードの意味

モード持ち主グループそれ以外の全員
644読む、書く読む読む
640読む、書く読む何もできない
2770読む、書く、入る読む、書く、入る何もできない
777すべてすべてすべて。だから誰でも書ける

学生が入力するセルは、このプレビューでは空白です。

端末が書いたもの

stat の Run は2行を書きました。644 root:root /etc/passwd と 640 root:shadow /etc/shadow です。アカウントの一覧は誰でも読めます。ハッシュは root と shadow グループだけが読めます。

数える Run は 0 を書きました。他の数なら、パスワードなしでログインできるアカウントがあるということです。

SSH は扉、設定は鍵

SSH サーバーは、設定ファイルを読みます。危険の大半を決めるのは3行です。root がログインできるか、パスワードを使えるか、空のパスワードを許すか、です。

練習は、自分のフォルダにあるコピーで行います。本物のファイルには触らないので、誰も締め出されません。

弱い練習用ファイルを書く

コマンド
printf 'PermitRootLogin yes\nPasswordAuthentication yes\nPermitEmptyPasswords no\n' > sshd-practice.conf

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

弱い2行を見つける

コマンド
grep -E '^(PermitRootLogin|PasswordAuthentication) yes' sshd-practice.conf

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

sed で2つとも直す

コマンド
sed -i 's/^PermitRootLogin yes/PermitRootLogin no/; s/^PasswordAuthentication yes/PasswordAuthentication no/' sshd-practice.conf

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

もう一度ファイルを確かめる

コマンド
grep -E '^(PermitRootLogin|PasswordAuthentication)' sshd-practice.conf

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

最初の値が大事な理由

一連の最初の Run は、2行を見つけました。直したあとは、どちらも no です。これで、パスワードでのログインと、root としてのログインが止まります。ログインは鍵で行うので、本物のサーバーでは、先に鍵を用意しないと自分も入れなくなります。

もう1つの決まりがあります。SSH サーバーは、同じ設定の最初の値を使います。上にある弱い行が、下の安全な行に勝ちます。

どの行が効くかを見る

コマンド
printf 'PermitRootLogin no\nPermitRootLogin yes\n' | grep -m1 '^PermitRootLogin'

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

設定ファイルは最後の行が勝つと思い、安全な行を末尾に足す人が多くいます。SSH サーバーでは最初の行が勝つので、上の弱い行が今も効いています。足すのではなく、今ある行を直しましょう。

練習用のファイルを消す

コマンド
rm sshd-practice.conf

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

発展: ラボ自身のフォルダ

ラボの課題2を終えたら、ls -ld /srv/projects と stat -c '%a %U:%G %n' /srv/projects を実行します。誰が入れるか、どの桁がそれ以外の全員を締め出しているかを、1文で言いましょう。

ラボの検査は、ユーザー、フォルダ、cron の仕事、サービスを採点します。このレッスンは採点しません。上の課題が、このレッスンの検査される課題です。

このラボとソースについて: Linux 管理のラボ:ユーザー、権限、cron、systemd をブラウザーで

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。