OpenSSH を使ってセキュアな通信を構築していきます。いまや、SSHなしでの通信は考えられないので是非とも導入しておきましょう。
|
|
■OpenSSLのダウンロード
※追記 2005/8/8:openssl-0.9.7d.tar.gzでも動作確認済み。0.9.8の場合だとopenssh
で
エラーが発生した。
まず、本家OpenSSLよりをソースパッケージをダウンロードしてきてください。ここでは、openssl-0.9.7c.tar.gzをダウンロードして解説を進めていきます。
■OpenSSLのインストール
OpenSSLはデフォルトでは、/usr/local/ssl にインストールされます。デフォルトのインストール先を変更する場合は、--openssldir
で指定します。ここでは、オプションを指定せずにインストールを行います。
$ cd /usr/local/src
$ tar xzvf openssl-0.9.7c.tar.gz
$ cd openssl-0.9.7c.tar.gz
$ ./config
$ make
$ make test
$ su
# make install |
|
■OpenSSH のダウンロード
※追記 2005/8/8:openssh-4.0p1.tar.gzでも動作確認済み(組:openssl-0.9.7d.tar.gz)
OpenSSH を使用するには、OpenSSL と zlib が必要となります。zlib には、Red
Hat9に付属のものを使うことにします。インストールされていなければ、インストールしておいてください。また、OpenSSH
を ソースパッケージからインストールする方は、予めRPMパッケージをアンインストールしておきます。
# rpm -q zlib pam
tcp_wrappers openssh openssh-server openssh-clients
zlib-1.1.4-8
pam-0.75-48
tcp_wrappers-7.6-34
openssh-3.5p1-6
openssh-server-3.5p1-6
openssh-clients-3.5p1-6 |
|
# rpm -e openssh
openssh-server openssh-clients |
|
■OpenSSH 専用のユーザーとグループの作成
Privilege separationがデフォルトで有効になっているため、専用のsshd ユーザーの作成が必要となります。sshd
は、その他のデーモンプロセスによって使われるべきではないので、ログインできないようにnologin とし、shell
も無効に設定します。また、/var/empty の中身は空っぽの状態にしておき、privsepが有効且つ、プリログイン時には、sshd
は /var/tempty にchroot されます。詳しくは、/[src]/ README.privsep
を参照してください。
# mkdir /var/empty
# chown root:sys /var/empty
# chmod 755 /var/empty
# groupadd sshd
# useradd -g sshd -c 'sshd privsep' -d /var/empty
-s /bin/false sshd |
|
■OpenSSH のインストール
configure オプションには、TcpWrappers との連携を行いたい場合は --with-tcp-wrappers
、PAM 認証を行うのであれば --with-pam が必要となります。また、--with-ssl-dir=/usr/local/ssl
でOpenSSLのパスを指定しておきます。
$ cd /usr/local/src
$ tar xzvf openssh-3.7.1p2.tar.gz
$ cd openssh-3.7.1p2
$ ./configure --with-ssl-dir=/usr/local/ssl
--with-pam --with-md5-passwords
$ make
$ su
# make install |
|
■/usr/local/etc/sshd_config の設定
OpenSSH はデフォルトで、root でのログインが可能な設定にされているので禁止させておきます。
また、パスワードが設定されていないユーザーのログインを禁止します。デフォルトで有効になっていますので確認してください。コメントがついている場合は、デフォルト値が設定されています。
■PAM 認証の設定
PAM 認証を有効にするには、/usr/local/src/openssh-3.7.1p2/contrib
配下にあるサンプルファイル、sshd.pam.generic を /etc/pam.d にコピ&リネームーします。
# cd /usr/local/src/openssh-3.7.1p2/contrib/
# cp sshd.pam.generic /etc/pam.d/sshd |
|
次に、/etc/pam/sshd を編集しておきます。pam_unix.so の箇所をpam_pwdb.so
に変更します。
#vi /etc/pam.d/sshd
#%PAM-1.0
auth required /lib/security/pam_pwdb.so
shadow nodelay
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_pwdb.so
password required /lib/security/pam_cracklib.so
password required /lib/security/pam_pwdb.so
shadow nullok use_authtok
session required /lib/security/pam_pwdb.so
session required /lib/security/pam_limits.so |
|
■OpenSSH の起動
■OpenSSH の動作確認
SSH のプロセスを確認後、ポートスキャンして22番ポートが開いているかどうか確認してください。
$ ps aux | grep sshd
root 25828 0.0 0.4 2552 1088 ? S 13:41 0:00
/usr/local/sbin/sshd
$ nmap localhost
Starting nmap V. 3.00 ( www.insecure.org/nmap/
)
Interesting ports on ns1.kororo.jp (127.0.0.1):
(The 1589 ports scanned but not shown below
are in state: closed)
Port State Service
22/tcp open ssh
23/tcp open telnet
53/tcp open domain
110/tcp open pop-3
139/tcp open netbios-ssn
901/tcp open samba-swat
953/tcp open rndc
3128/tcp open squid-http
5432/tcp open postgres
8080/tcp open http-proxy |
|
■OpenSSH の自動起動設定
Red Hat 用の起動スクリプトがデフォルトで用意されているので、これを./etc/r.cd/init.d
以下にコピーしておきます。なお、私の環境では、起動プログラムのパスが、/usr/local/sbin/sshd
のため、
SSHD=/usr/local/sbin/sshd に編集しなおしています(デフォルトは、SSHD=/usr/sbin/sshd)。
# cd /usr/local/src/openssh-3.7.1p2
# cp contrib/redhat/sshd.init /etc/rc.d/init.d/sshd
# chkconfig --add sshd
# chkconfig --list sshd |
|
■RSA暗号鍵の作成
認証を強固にするため、OpenSSH では公開鍵とパスフレーズによる認証を行うことが出来るようになっています。SSH2
プロトコルでは、RSA と DSA のどちらかの認証方式を利用することができます。ここでは、TeraTermを使用することを前提として、rsa1
で暗号鍵の作成を行ってみます(TeraTermではrsa1のみに対応しています)。RSA暗号鍵はユーザーごとに作成する必要があり、ユーザーのホームディレクトリの.ssh/
以下に identityとして作成されます(秘密鍵)。公開鍵は、indentity.pub。まず、一般ユーザーとしてログインしてください。途中、パスフレーズの入力を求められますが、パスフレーズにはパスワードとは違い、空白を挿入することができます。スペースを混在させることでよりセキュアなパスフレーズを作成することができます。他の暗号鍵作成コマンドは
こちらを参照。
$ ssh-keygen -t rsa1
Generating public/private rsa1 key pair.
Enter file in which to save the key (/home/kororo/.ssh/identity):[
ENTER ]
Enter passphrase (empty for no passphrase): //パスフレーズを入力
Enter same passphrase again:
Your identification has been saved in /home/kororo/.ssh/identity.
Your public key has been saved in /home/kororo/.ssh/identity.pub.
The key fingerprint is:
2a:c0:b8:c5:c4:15:ed:88:0a:74:b2:6f:a7:c3:7b:cb
kororo@serv.kororo.jp |
|
クライアントからRSAキーでログインする際にはアカウントの公開鍵が
authorized_keys
ファイルに登録されている必要があるため、以下のようにしてコピーして新規にauthorized_keysを作成しておきます。cp
の -p オプションは、タイムスタンプやパーミッションの属性などをそのままコピーします。
$ cd .ssh
$ cp -p identity.pub authorized_keys |
|
なお、既にauthorized_keys が作成されている場合、以下のようにして追加します。
$ cd .ssh
$ cat identity.pub >> authorized_keys |
|
次に、秘密鍵ファイルである、.ssh/identity をWindows 上にTeraTerm のディレクトリの中にコピーしておきます。但し、これでは誰でも秘密鍵を盗める状態になってしまうので、2000/XP
を使用しているならば、自分のDocuments and Settings 等に置いておきましょう。
次に平分パスワードを無効にし、RSA認証を有効にするために、sshd_config の以下の行を編集します。
# vi /usr/local/etc/sshd_config
PasswordAuthentication no
RSAAuthentication yes |
|
■TeraTermの設定
TeraTerm を起動し、「設定」→「SSH認証」を選択します。
「RSA暗号鍵を使う」にチェックを入れ、先ほどコピーした
identity のファイルを指定します。ユーザー名を入力し、OKをクリックします。
「設定」→「設定の保存」でTERATERM.INI に上書き保存します。
以上の設定を終えたら。「ファイル」→「新規接続」を選択します。
初めてのログインであれば以下のメッセージが表示されますが、「このホストを known hosts リストに追加する」にチェックを入れ、「続行」をクリックすると次回からは表示されなくなります。
SSH認証の画面が現れたら、ssh-keygen実行時に作成したパスフレーズを入力します。「RSA鍵を使う」のチェックは先ほど設定をしたため、既にidentity
が選択された状態になっていると思います。OKをクリックして正常にログインできれば成功です。
■ログを確認する
上記で正常にログインできることを確認したら、次に本当にRSAでログインできたかどうか確認しておきましょう。以下のように、
Accepted
rsa と表示されていれば正常にRSAを使ってログインできたことが確認できます。外に出かけた時などに、外部から自宅のサーバーにアクセスする際には秘密鍵が必要となるので常に持ち歩くようにしましょう∑(; ̄□ ̄
# tail /var/log/messages
Jan 6 16:05:15 ns1 sshd[26545]: Accepted
rsa for kororo from 172.16.50.4
port 2706 |
|
■各暗号鍵作成のコマンドと生成後のデフォルトの名前
◎OpenSSH1(タイプ:RSA1)
$ ssh-keygen -t rsa1
Generating public/private rsa1 key pair.
Enter file in which to save the key (/home/kororo/.ssh/identity): |
|
◎OpenSSH2(タイプ:RSA)
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/kororo/.ssh/id_rsa): |
|
◎OpenSSH2(タイプ:DSA)
$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/kororo/.ssh/id_dsa): |
|