OpenSSHの利用
Linux LPIC編。(第13 章 システムセキュリティ)
ちょっと気合いを入れたいSSH。まずはsshdの設定ファイル、/etc/ssh/sshd_configから。
詳細はいちいち書かないけど、一部ポイントを。
SSHのバージョンを指定
Protcol 2
rootでのログインや空パスワードでのログインは通常禁止する。
rootログインに関しては、賛否別れるところのようだが。
PermitRootLogin no
PermitEmptyPasswords no
公開鍵を登録するファイルの指定は以下のように。
AuthorizedKeyFile .ssh/authorized_keys
ホスト鍵のパスもここに記述。
HostKey /etc/ssh/ssh_host_key
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
ログインユーザの制限をするなら。
AllowUsers ユーザ名1 ユーザ名2 ユーザ名3
※ユーザ名とユーザ名の間はスペースで区切る。一行で書くものなので、改行を入れないよう注意。
単にユーザ名を指定するほか、以下のような設定も可能。
user01@172.16.0.1 ←ホスト172.16.0.1からアクセスするuser01を許可
*@172.16.0.1 ←ホスト172.16.0.1からアクセスするすべてのユーザを許可
sshdへのアクセス制御に関しては、/etc/hosts.allowでも行うことができる。
↓ ↓ ↓
Linuxネットワークのトラブルシューティング
次にホスト認証とユーザ認証。レベル1でも登場したけど…、実はここ苦手。
まず重要なポイントは。
・ホスト用鍵ファイル名
・ユーザ用鍵ファイル名
・鍵の作成方法及び登録手順
そもそもホスト認証とユーザ認証の違いとか、よく分かってないし。
そんなわけで復習、復習、なんである。
ホスト認証
SSHではユーザ認証に先立ち、公開鍵暗号方式を用いてホストの正当性を確認するホスト
認証が行われる。
OpenSSHをインストールすると、ローカルホスト用の公開鍵と秘密鍵のペアが作成
される。
↓ ↓ ↓
秘密鍵(HostKey)は/etc/sshディレクトリ以下に配置される。上記、sshd_configにも記述
した通り。上記のファイル名に拡張子「.pub」が付いたファイルが公開鍵となる。
↓ ↓ ↓
SSHでの接続ごとに、ホストの公開鍵がクライアントに送信され、クライアントは所持
しているホスト鍵と一致しているかどうかにより、ホストの正当性を確認する。
(初回接続時はホスト鍵が登録されていないので所定のメッセージが表示される)
ホスト鍵はクライアント側の~/.ssh/known_hostsに格納される。
ホストの正当性が確認できたらユーザ認証へ進む。
ユーザ認証
ユーザ認証にはまず公開鍵認証が試される。ユーザ認証に必要な公開鍵と秘密鍵のペア
を作成するにはssh-keygenコマンドを使用する。
オプションでは暗号化方式の指定に注意(どうしても覚えられないんだな、これが)。
ssh-kegenコマンドのオプション
-f 鍵ファイル名を指定
-p 既存の鍵ファイルのパスフレーズを変更
-P 古いパスフレーズを指定
-N 新しいパスフレーズを指定
-l フィンガープリントを表示
-t 暗号化方式を指定
-t rsa1 : SSHバージョン1 RAS鍵
-t dsa : SSHバージョン2 DAS鍵
-t rsa : SSHバージョン2 RAS鍵
公開鍵と秘密鍵のファイル名をまとめておく。

鍵作成から登録までの大まかな流れをまとめてみる。
1.ssh_keygenコマンドで公開鍵と秘密鍵ペアを作成。
このときパスフレーズを指定する。2.ユーザの公開鍵ファイルを接続先ホストの~/.ssh/authorized_keys
ファイルに登録する。
※公開鍵ファイルはあらかじめscpなどで転送する。また、authorized_keys
は所有者のみ読み書きできるようにしておく。以下登録時のコマンド例。
# cat id_dsa.pub >> ~/.ssh/authorized_keys3.sshで接続先ホストに接続した際に、パスフレーズの入力を求められれば
公開鍵認証が有効になっている。
※ssh-keygen実行時にパスフレーズ指定をスキップした場合、パスフレーズ入力は不要。
ssh-agentでパスフレーズ入力を省略する
パスフレーズを都度入力する手間を省くには、ssh-agentを利用。
(ちなみにssh-agentはクライアント側のデーモン)
1.$ ssh-agent bashを実行し、ssh-agentの子プロセスとしてbashシェルを起動する。
2.$ ssh-addコマンドで秘密鍵を登録する。この際にパスフレーズを入力。
以降、このbashシェルとその子プロセスではパスフレーズの入力が不要となる。
ssh-agentが保持する秘密鍵の一覧は$ ssh-add -l で確認可能。
メモ
ホスト認証の公開鍵(ssh_host_dsa_key.pub等)格納場所
~/.ssh/known_hosts ←クライアント側
ユーザ認証の公開鍵(id_dsa.pub等)格納場所
~/.ssh/authorized_keys ←接続先ホスト側
SSHポート転送
最後に、SSHポート転送(SSHポートフォワーディング)。
これもレベル1でやったけど、もちろん忘れている。
これはPOPやFTPなど暗号化されていないプロトコルの通信に利用する。
以下コマンド例では、ローカルホストの10110番ポートに接続後、SSHで暗号化された
経路を経由してリモートホストmessage.netの110番ポートに接続する。
(-fはバックグラウンドで実行、-Nは転送のみ指示するオプション)
$ ssh -f -N-L 10110:localhost:110 user01@message.net
レベル1のセキュリティの章では、加えてGunPGなんてのも出て来た。
全然、覚えられなかった。。。レベル2では出ないよね、出ないんだよね…!?
では、次は最後にセキュリティ関連もろもろへ突入するのだ!
出典
Linux教科書LPICレベル2(翔泳社)
Linux記事一覧はこちらをどうぞ
↓ ↓ ↓
Linux-index