VineLinuxパフォーマンスアッププロジェクト:0025
■sshd_configの見方■
sshサーバはセキュリティを重視しなくてはなりません。当然、設定ファイルであるsshd_configは大切になってきます。そこで今回はsshd_configの見方と、何を設定すべきかについて考えてみましょう。
まず、このsshd_configファイルを見てください。
# $OpenBSD: sshd_config,v 1.69 2004/05/23 23:59:53 dtucker Exp $
# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.
# This sshd was compiled with PATH=/bin:/usr/bin
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options change a
# default value.
#Port 22
#Protocol 2,1
#ListenAddress 0.0.0.0
#ListenAddress ::
# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 1h
#ServerKeyBits 768
# Logging
#obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV
#LogLevel INFO
# Authentication:
#LoginGraceTime 2m
PermitRootLogin yes <---------------------(1)
#PermitRootLogin no
#StrictModes yes
#MaxAuthTries 6
#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys
# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#RhostsRSAAuthentication no
# similar for protocol version 2
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# RhostsRSAAuthentication and HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes <---------------------(2)
PermitEmptyPasswords yes <---------------------(3)
# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes
# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication mechanism.
# Depending on your PAM configuration, this may bypass the setting of
# PasswordAuthentication, PermitEmptyPasswords, and
# "PermitRootLogin without-password". If you just want the PAM account and
# session checks to run without PAM authentication, then enable this but set
# ChallengeResponseAuthentication=no
#UsePAM no
#AllowTcpForwarding yes
#GatewayPorts no
#X11Forwarding no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#UsePrivilegeSeparation yes
#PermitUserEnvironment no
#Compression yes
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS yes
#PidFile /var/run/sshd.pid
#MaxStartups 10
# no default banner path
#Banner /some/path
# override default of no subsystems
Subsystem sftp /usr/libexec/openssh/sftp-server
AllowUsers abc
AllowUsers root <---------------------(4)
この設定ファイルの状態で使用するとセキュリティ的にどうでしょうか?ファイル中に示した番号に沿って考えてみましょう。
(1):"PermitRootLogin yes"
この意味は「rootでログインを許可する」ということです。これはおすすめできません。なぜならパスワード(パスフレーズ)さえ分かれば簡単にログインできてしまうためです。rootユーザはどのLinuxにもあります。それゆえ、rootユーザでログインはやめておきましょう。
(2):"PasswordAuthentication yes"
この意味は「パスワード認証にする」ということです。これは場合によりますが、一般的にはパスワード認証より鍵を用いたRSA認証のほうが安全です。RSA認証については後ほど説明します。
(3):"PermitEmptyPasswords yes"
この意味は「空(何もない)パスワードを許可する」ということです。これは最悪。rootユーザで簡単にログインされるどころか、一般ユーザでもログインされる可能性が出てきます。これは必ず"no"にしておきましょう。
(4):"AllowUsers root"
これもやはりrootユーザでログインを許可する記述です。このようにsshd_configファイルではログインを許可したいユーザをAllowUsersを用いて記述するわけですが、ここにわざわざ"AllowUsers root"と記述するのは自爆行為そのもの。特別な理由がない限りやめておきましょう。
★RSAを用いた認証
sshサーバはRSAを用いた認証で動かすほうが安全です。RSA認証ではクライアントがパスフレーズを入力して作成した鍵をサーバ側にコピーし、ログイン時に再度クライアントがそのパスフレーズを入力して、サーバにある鍵と照合して一致したらログインさせるという仕組みです(かなり簡単な説明ですが)。これを実現するには上で説明した(2)の"PasswordAuthentication yes"を"no"にし、(4)のようにログインを許可するユーザを記述しておきます。
あとは設定ファイルを保存し、sshデーモンを再起動します。
/etc/rc.d/init.d/sshd restart
そしてクライアント側で以下のコマンドを用いて鍵を作成します。
ssh-keygen rsa
その後英語で「パスフレーズを何か考えて入力しろ」という指示が出るので自分で好きな言葉を2回入力します(新規入力1回+確認入力1回)。
完了後、ホームディレクトリの下にある.sshディレクトリへ移動します。
cd ~/.ssh
ここでlsコマンドをすると、"id_rsa.pub"というファイルがあるはずですので、これをauthorized_keysというファイルとしてコピーします。
cp id_rsa.pub authorized_keys
そして、コピーしたauthorized_keysをサーバ側へ転送すれば完了です。sshでログインするたびに「パスフレーズ(自分で考えた言葉)を入力せよ」と聞かれるので、入力してください。