コース一覧
LinuC レベル1 102試験対策(LPIC-1対応)
SSHとGPG

LinuC レベル1 102試験対策(LPIC-1対応)

LinuC レベル1/LPIC-1の102範囲を、シェル、ユーザーとセキュリティ、ネットワーク、システム管理の実機演習と章末問題で固めます。Linuxを安全に運用するための知識とコマンド操作を体系的に身につける25レッスンのコースです。

1
102 シェルとスクリプト
01. シェル環境18分
02. testと条件式18分
03. スクリプトの制御18分
04. cronとat15分
05. systemdタイマー18分
06. 過去問 シェル15分
2
102 ユーザーとセキュリティ
01. passwdとshadow18分
02. ユーザー管理コマンド18分
03. suとsudo18分
04. 特殊パーミッション18分
05. ホストのセキュリティ18分
06. SSHとGPG18分
07. 過去問 ユーザーとセキュリティ15分
3
102 ネットワーク
01. TCP/IPとウェルノウンポート18分
02. アドレス設定18分
03. ルーティング18分
04. 名前解決の設定18分
05. 疎通トラブルシュート18分
06. 過去問 ネットワーク15分
4
102 システム管理
01. 時刻とNTP15分
02. ロケールと文字コード18分
03. ログ管理18分
04. サービス管理の試験形式18分
05. メールと印刷のきほん15分
06. 過去問 システム管理15分

SSHとGPG

設定は正しいのに公開鍵でログインできない。原因の多くは ~/.ssh のパーミッションです。sshd は権限の緩い鍵を何も言わずに無視します。試験でも定番の出題です。

鍵は2つできる。サーバーへ置くのは公開鍵のほう

ssh-keygen を実行すると2つのファイルができます。id_ed25519 が秘密鍵、id_ed25519.pub が公開鍵です。秘密鍵は絶対に外へ出さず手元に置いたままにし、サーバーへ置くのは公開鍵のほうです。

オプション意味
-t <type>鍵の種類。rsa ed25519 ecdsa
-b <bits>鍵長。RSA なら 2048 以上、推奨は 4096
-f <path>出力先のパス。-N はパスフレーズ
-p既存の鍵のパスフレーズを変更する。-C はコメント
-l -f <pub>鍵のフィンガープリントを表示する

~/.ssh は 700、authorized_keys は 600

ファイル場所役割権限
~/.ssh両方鍵と設定の置き場700
~/.ssh/id_ed25519クライアント秘密鍵600
~/.ssh/id_ed25519.pubクライアント公開鍵644
~/.ssh/authorized_keysサーバー接続を許す公開鍵の一覧600
~/.ssh/known_hostsクライアント接続先のホスト鍵の記録644

グループや他人に書き込み権があると、sshd は安全でないと判断して鍵を無視します。公開鍵の登録は authorized_keys へ1行として追記する形ですが、リモートへ送るなら ssh-copy-id user@host がパーミッションまで面倒を見てくれます。

known_hosts は接続先サーバーのホスト鍵を記録するファイルです。記録と異なるホスト鍵が提示されると警告を出して接続を止めます。中間者攻撃への対策で、サーバーを再構築して鍵が変わったときは ssh-keygen -R <host> で該当行を消します。

秘密鍵にパスフレーズを付けると安全ですが、接続のたびに入力を求められます。ssh-agent は復号した鍵をメモリに預かるデーモンで、ssh-add で預ければ以降は省略できます。ssh-add -l が一覧、-D が全削除です。

sshd_config はサーバー側、ssh_config はクライアント側

項目意味
Port待ち受けポート
PermitRootLoginroot の直接ログインの可否。no / yes / prohibit-password
PasswordAuthenticationパスワード認証を許すかどうか
PubkeyAuthentication公開鍵認証を許すかどうか
AuthorizedKeysFile公開鍵一覧のパス。PermitEmptyPasswords は空パスワードの可否

公開鍵認証を必須にする定番の締め方は、PermitRootLogin prohibit-password と PasswordAuthentication no の組み合わせです。変更後は systemctl reload ssh などで反映します。サーバー自身の身元を示すホスト鍵は /etc/ssh/ssh_host_* に置かれ、known_hosts に記録されるのはこの公開鍵です。

GPG は暗号化と署名で使う鍵が逆

GPG は公開鍵暗号でファイルやメールの暗号化と署名を行います。鍵ペアの考え方は SSH と同じで、公開鍵は配ってよく、秘密鍵は自分だけが持ちます。用途は2つあり、使う鍵が逆になります。暗号化するときは受信者の公開鍵で暗号化し、受信者が自分の秘密鍵で復号します。署名するときは自分の秘密鍵で署名し、検証する側が署名者の公開鍵で確かめます。ここを取り違えるのが典型的な間違いです。

コマンドは --gen-key で鍵ペア作成、--list-keys と --list-secret-keys で一覧、--export -a と --import で書き出しと取り込み、--sign と --verify で署名と検証、--encrypt -r <ID> と --decrypt で暗号化と復号です。鍵束は ~/.gnupg 配下です。なお、この学習環境には gpg が入っていないため実機演習はありません。

試験で狙われるところ

サーバーに置くのは公開鍵です。~/.ssh は 700、authorized_keys は 600 で、緩いと鍵が無視されます。サーバー側の設定は sshd_config で、クライアント側の ssh_config とは別物です。そして暗号化は相手の公開鍵、署名は自分の秘密鍵です。

ヒント

まず mkdir /root/.ssh でディレクトリを作ります。setup では作っていないので自分で用意してください

ssh-keygen は -t で種類、-f で出力先、-N でパスフレーズを指定します。-N "" と書けば対話なしで完了します

登録は cat /root/.ssh/id_ed25519.pub >> /root/.ssh/authorized_keys です。最後に chmod 700 /root/.ssh と chmod 600 /root/.ssh/authorized_keys を忘れないでください

  • 1. ls -la /root で .ssh が存在しないことを確かめる
  • 2. mkdir で /root/.ssh を作る
  • 3. ssh-keygen -t ed25519 -f /root/.ssh/id_ed25519 -N "" で鍵ペアを作る
  • 4. ls -l /root/.ssh で秘密鍵と公開鍵の2つができたことを確認する
  • 5. 公開鍵を /root/.ssh/authorized_keys に追記する
  • 6. chmod で /root/.ssh を 700、authorized_keys を 600 にする
  • 7. ssh-keygen -l -f /root/.ssh/id_ed25519.pub でフィンガープリントを表示する

Linux は使うときに起動します(初回は約102MB通信します)

6 項目で採点します