広告

検索

RSS RSSフィード

カレンダー

2018年12月
« 4月    
 12
3456789
10111213141516
17181920212223
24252627282930
31  

カテゴリー

最新のコメント

リンク

Scientific Linux 6で自宅サーバー構築 その18 sshで鍵認証を導入

投稿者:yasu 更新日時:2011年8月25日 0時37分34秒
カテゴリLinux, OpenSSH, Scientific Linux, 自宅サーバー
タグ

鍵認証方式のSSHを設定します。

rootにスイッチ可能なユーザをwheelグループに登録

以前CentOSの構築の際にも実施したrootユーザにスイッチできるユーザをwheelグループで制御します。

# PAMの設定を変更してwheelグループのみでrootユーザにスイッチできるようにします
[root@sl6 ~]# vi /etc/pam.d/su
#%PAM-1.0
auth sufficient pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth sufficient pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
auth required pam_wheel.so use_uid ← コメント解除
auth include system-auth
account sufficient pam_succeed_if.so uid = 0 use_uid quiet
account include system-auth
password include system-auth
session include system-auth
session optional pam_xauth.so

# 保存してviエディタを終了します

# 管理用ユーザ(sl6)をwheelグループに追加します
[root@sl6 ~]# usermod -G wheel sl6

鍵ファイル作成

秘密鍵・公開鍵を作成して鍵認証方式のログインができるようにします。
鍵の作成には一般ユーザで実施します。

# ログインユーザの確認をします
[sl6@sl6 ~]$ whoami
sl6

# もしrootと表示された場合一般ユーザではないので一般ユーザでログインしなおすかsuコマンドで一般ユーザにスイッチしてください

# 鍵を作成します
[sl6@sl6 ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/sl6/.ssh/id_rsa):
Created directory '/home/sl6/.ssh'.
Enter passphrase (empty for no passphrase): 鍵認証用パスフレーズを入力
Enter same passphrase again: 鍵認証用パスフレーズを再度入力
Your identification has been saved in /home/sl6/.ssh/id_rsa.
Your public key has been saved in /home/sl6/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx sl6@sl6.sa-sa-ki.jp
The key's randomart image is:
+--[ RSA 2048]----+
| . x . x |
| sx x . xxx|
| . - + |
| .% . .|
| x.+ . .|
| x xxx= |
| x x x x |
| + |
| x |
+-----------------+

# 鍵ファイルを確認します
[sl6@sl6 ~]$ ls -la .ssh
合計 16
drwx------. 2 sl6 sl6 4096 6月 26 15:06 2011 .
drwx------. 4 sl6 sl6 4096 6月 26 15:06 2011 ..
-rw-------. 1 sl6 sl6 1743 6月 26 15:06 2011 id_rsa    # 秘密鍵(クライアント)
-rw-r--r--. 1 sl6 sl6 404 6月 26 15:06 2011 id_rsa.pub # 公開鍵(サーバー)

# 公開鍵(サーバー)ファイルの名前を変更します
[sl6@sl6 ~]$ mv .ssh/id_rsa.pub .ssh/authorized_keys

# 公開鍵(サーバー)ファイルのアクセス権を読み取り専用にします
[sl6@sl6 ~]$ chmod 400 .ssh/authorized_keys
[sl6@sl6 ~]$ ls -la .ssh
合計 16
drwx------. 2 sl6 sl6 4096 6月 26 15:08 2011 .
drwx------. 4 sl6 sl6 4096 6月 26 15:08 2011 ..
-r--------. 1 sl6 sl6 404 6月 26 15:06 2011 authorized_keys ← 読み取り専用になっていることを確認
-rw-------. 1 sl6 sl6 1743 6月 26 15:06 2011 id_rsa

# 秘密鍵(クライアント)は本サーバに接続したいクライアント端末にコピーしてください
# クライアントパソコンにコピーしたらサーバー上からは削除しておきます
[sl6@sl6 ~]$ rm .ssh/id_rsa

SSHサーバー設定変更

SSHサーバーの設定を変更して鍵認証ができるようにします。
他にもrootユーザでのログインやパスワード無しユーザのログインを禁止します。
※rootユーザで作業します

[root@sl6 ~]# vi /etc/ssh/sshd_config
# Authentication:

#LoginGraceTime 2m
PermitRootLogin no # コメント解除してyesからnoに変更するとrootでログインできなくなります
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
PermitEmptyPasswords no # コメントを解除するとパスワードなしのログインを禁止します
PasswordAuthentication no # yesからnoに変更すると公開鍵暗号認証に変更します

X11Forwarding no # コメントを解除します
#X11Forwarding yes # コメント化します

# 保存してviエディタを終了します
# SSHサーバー(サービス)を再起動して設定を反映します
[root@sl6 ~]# /etc/rc.d/init.d/sshd restart
sshd を停止中: [ OK ]
sshd を起動中: [ OK ]

これで鍵認証方式でログインができるようになりました。

鍵認証方式とはいえアクセス制御をしておいた方がよりセキュアになるので下記設定を追加します。
※SSH接続可能なクライアントをローカルホストと自宅ネットワーク内のパソコンからに制限する場合

# 全ての端末からのSSH接続を禁止します
[root@sl6 ~]# echo "sshd: ALL" >> /etc/hosts.deny

# ローカルホスト(サーバー自身)のSSH接続を許可します
[root@sl6 ~]# echo "sshd: 127.0.0.1" >> /etc/hosts.allow

# 自宅ネットワーク内のパソコンからのSSH接続を許可します
※ yasuの自宅ネットワークは192.168.で始まるIPアドレスで構成しているので各自設定する場合は読み替えてください。
[root@sl6 ~]# echo "sshd: 192.168." >> /etc/hosts.allow

自宅サーバー再構築 その10 CentOS 5.2 SSHサーバーを構築して外部からリモート接続&リモートファイル転送

投稿者:yasu 更新日時:2009年2月25日 0時02分00秒
カテゴリCentOS, Linux, OpenSSH, 自宅サーバー
タグ

今回はSSHサーバーを公開鍵暗号で認証するように設定をして、より安全に外部からリモート接続したりファイル転送できるようにしたいと思います。
公開鍵暗号を使った認証はSSHサーバーデフォルト認証のパスワード認証と比べて、鍵ファイル持っていてかつパスワードを知らないとログインできませんのでパスワード認証より安全です。
またrootユーザーで直接ログインできないようにしてセキュリティを上げたいと思います。

公開鍵暗号の鍵ファイルを作成します。

公開鍵暗号はSSHプロトコルバージョン1の暗号方式RSAとSSHプロトコルバージョン2の暗号方式RSAとDSAが利用可能です。
SSHプロトコルバージョン1は脆弱性が発見されているため使用しません。
SSHプロトコルバージョン2には暗号方式がRSAとDSAがありますが、RSAは2000年以前までは特許の関係でDSAしか一般公開されていなかったのですが、特許の期限が切れてRSAも一般公開されるようになりました。
今回はSSHプロトコルバージョン2の暗号方式RSAで鍵ファイルを作ります。

一般ユーザー(ここでは以前作ったcentos)でログインして以下の作業を進めていきます
[centos@centos ~]$ whoami
centos ここでrootと表示されるようであれば一般ユーザーでログインしなおしてください

SSHプロトコルバージョン2の暗号方式RSAで公開鍵・秘密鍵を作成します
[centos@centos ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
秘密鍵の保存先を入力します。ここではデフォルトの保存先に保存するので何も入力をせずにEnterキーを押下します
Enter file in which to save the key (/home/centos/.ssh/id_rsa):何も入力をせずにEnterキーを押下
Created directory '/home/centos/.ssh'.
Enter passphrase (empty for no passphrase):秘密鍵のパスフレーズを入力
Enter same passphrase again:秘密鍵のパスフレーズを再入力
Your identification has been saved in /home/centos/.ssh/id_rsa.
Your public key has been saved in /home/centos/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx centos@centos.centos.com

作成された鍵ファイルを確認します
[centos@centos ~]$ ls -l .ssh
合計 32
-rw------- 1 centos centos 1743 2月 23 11:55 id_rsa   秘密鍵
-rw-r--r-- 1 centos centos 406 2月 23 11:55 id_rsa.pub 公開鍵

公開鍵ファイルの名前を変更します。
※SSHサーバーの設定ファイルに公開鍵ファイル名を明示的に指定すればファイル名を変更する必要はないのですが、ここでは公開鍵ファイルの名前を変更する手順で進めます

[centos@centos ~]$ mv .ssh/id_rsa.pub .ssh/authorized_keys

公開鍵ファイルのアクセス権限をcentosユーザー読み取り専用に変更します
[centos@centos ~]$ chmod 400 .ssh/authorized_keys

公開鍵ファイルの名前とアクセス権限が変わったか確認します
※左端の表示が「-r--------」となっていればアクセス権限は問題ありません

[centos@centos ~]$ ls -l .ssh
合計 32
-r-------- 1 centos centos 406 2月 23 11:55 authorized_keys
-rw------- 1 centos centos 1743 2月 23 11:55 id_rsa

秘密鍵ファイル(id_rsa)をサーバーに接続したいクライアント端末にコピーします。
※まだSSHサーバーはパスワード認証で接続可能なので、自宅サーバー再構築 その5 CentOS 5.2 ファイル転送準備 » sa-sa-ki.jpのblogでご紹介したWinSCPもしくはSFTPコマンドで秘密鍵ファイルをクライアント端末にコピーします

秘密鍵ファイルをサーバー上から削除します
[centos@centos ~]$ rm -f .ssh/id_rsa

秘密鍵ファイルが削除されたか確認します
[centos@centos ~]$ ls -l .ssh
合計 32
-r-------- 1 centos centos 406 2月 23 11:55 authorized_keys

SSHサーバーを公開鍵暗号で認証できるように設定ファイルを変更します。

こちらはrootユーザーで作業を行います。

[root@centos ~]# whoami
root ここでroot以外が表示されるようであればrootユーザーでログインしなおしてください

SSHサーバー設定ファイル編集
[root@centos ~]# vi /etc/ssh/sshd_config
viエディタが起動するので設定ファイルを変更します
# $OpenBSD: sshd_config,v 1.73 2005/12/06 22:38:28 reyk Exp $

# This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/local/bin:/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
Protocol 2
#AddressFamily any
#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 no 先頭の#を削除してコメントを解除し、yes から no に変更します。rootユーザでログインができなくなります。
#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
先頭の#を削除してコメントを解除します。パスワードなしでのログインを禁止します。
PermitEmptyPasswords no
PasswordAuthentication no yes から no に変更します。パスワード認証から公開鍵暗号認証に変更します。

# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes
ChallengeResponseAuthentication no

# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no

# GSSAPI options
#GSSAPIAuthentication no
GSSAPIAuthentication yes
#GSSAPICleanupCredentials yes
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
UsePAM yes

# Accept locale-related environment variables
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL
#AllowTcpForwarding yes
#GatewayPorts no
X11 Port Forwarding の設定をOFFにします
先頭の#を削除してコメントを解除します。

X11Forwarding no
先頭の#を追加してコメント化します。
#X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#UsePrivilegeSeparation yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#ShowPatchLevel no
#UseDNS yes
#PidFile /var/run/sshd.pid
#MaxStartups 10
#PermitTunnel no

# no default banner path
#Banner /some/path

# override default of no subsystems
Subsystem sftp /usr/libexec/openssh/sftp-server

※変更箇所は5箇所です
内容を保存しviエディタを終了します

SSHサーバーを再起動します
[root@centos ~]# /etc/rc.d/init.d/sshd restart
sshd を停止中: [ OK ]
sshd を起動中: [ OK ]

アクセス制御ファイルにローカルホスト・ローカルネットワーク・指定した外部ネットワーク以外からアクセスされてもアクセスを拒否するように設定します。

全てのアクセスを拒否します
[root@centos ~]# echo "sshd: ALL" >> /etc/hosts.deny

ローカルホストのアクセスを許可します
[root@centos ~]# echo "sshd: 127.0.0.1" >> /etc/hosts.allow

ローカルネットワークのPCのアクセスを許可します
※以下のように第四オクテッドを入力しない場合、第四オクテッドのアドレスはワイルドカード扱いになります

[root@centos ~]# echo "sshd: 192.168.0." >> /etc/hosts.allow

外部からのアクセスを許可します
※セキュリティ上接続可能なアドレスは公開しませんが、自宅サーバーに接続する外部のネットワークアドレスを「xx.xx.xx.xx」の部分に記載してください

[root@centos ~]# echo "sshd: xx.xx.xx.xx" >> /etc/hosts.allow

これで設定作業は終了です。
まだルーターのポートをオープンしていないので外部からの接続はできません。まずはローカルネットワーク内のPCからサーバーにログインしてみます。
PCがWindowsの場合、Tera Termで接続します。

ホストにはサーバーのIPアドレスを入力して、サービスはデフォルトのSSHを選択して[OK]ボタンをクリックします。

セキュリティ警告が表示されたら、「このホストをknown hostsリストに追加する」にチェックをつけて[続行(C)]ボタンをクリックします。

ユーザ名は一般ユーザー名(ここではcentos)を、パスフレーズは公開鍵暗号の鍵ファイルを作成した時に入力したパスフレーズを入力します。
「RSA/DSA鍵を使う」を選択し、[秘密鍵]ボタンをクリックしクライアント端末にコピーした秘密鍵ファイル(id_rsa)を選択して[OK]ボタンをクリックします。

公開鍵暗号で認証する事ができました。

ちなみに一般ユーザーでパスワード認証のままログインしようとすると・・・

「認証に失敗しました。再試行してください」と表示されま
す。
※公開鍵暗号認証に変更しているのでパスワード認証はエラーになるのが正しいです

rootユーザーでパスワード認証のままログインしようとすると・・・

「認証に失敗しました。再試行してください」と表示されます。
※公開鍵暗号認証に変更しているのでパスワード認証はエラーになるのが正しいです

rootユーザーでRSA/DSA鍵を使った認証をしようとすると・・・

「認証に失敗しました。再試行してください」と表示されます。
※rootユーザーのログインを禁止しているのでエラーになるのが正しいです

またPCがWindowsでファイル転送を行うには以前ご紹介したWinSCPを使うのですが、サーバーからコピーした秘密鍵をPuTTY Key Generatorで変換する必要があるのでその手順をご紹介します。

[スタート]-[プログラム]-[WinSCP]-[鍵関連ツール]-[PuTTY gen]を選択します。

PuTTY Key Generatorが起動しますので、[Load]ボタンをクリックします。

秘密鍵ファイル(id_rsa)を選択して[開く]ボタンをクリックします。

秘密鍵のパスフレーズを聞かれるので、パスフレーズを入力して[OK]ボタンをクリックします。

秘密鍵の変換が終了したら[OK]ボタンをクリックします。

[Save private key]ボタンをクリックします。

変換した秘密鍵を保存します。

WinSCPを起動します。
ホスト名には自宅サーバーのアドレス(ここでは192.168.0.20)を、ユーザ名には一般ユーザー名(ここではcentos)を、秘密鍵には変換した秘密鍵ファイルを選択して[ログイン]ボタンをクリックします。

警告が表示されますが、[はい(Y)]をクリックします。

パスフレーズを入力して[OK]ボタンをクリックします。

無事ログインできました。

PCがMacの場合、ターミナルで接続します。

leopard:~ leopard$ ssh -i id_rsa centos@192.168.0.20

以下のダイアログが表示されるのでパスワードに公開鍵暗号の鍵ファイルを作成した時に入力したパスフレーズを入力して[OK]ボタンをクリックします

Last login: Mon Feb 23 10:03:32 2009 from 192.168.0.51
[centos@centos ~]$
公開鍵暗号で認証する事ができました

またPCがMacでファイル転送を行う場合もターミナルで接続します。

leopard:~ leopard$ sftp -o identityfile=id_rsa centos@192.168.0.20

以下のダイアログが表示されるのでパスワードに公開鍵暗号の鍵ファイルを作成した時に入力したパスフレーズを入力して[OK]ボタンをクリックします

Connecting to 192.168.0.20
sftp>
公開鍵暗号で認証する事ができました

PCがUbuntuの場合、端末で接続します。

ubuntu@ubuntu:~$ ssh -i id_rsa centos@192.168.0.20
Enter passphrase for key 'id_rsa': 公開鍵暗号の鍵ファイルを作成した時に入力したパスフレーズを入力します
Last login: Mon Feb 23 09:56:54 2009 from 192.168.0.51
[centos@centos ~]$
公開鍵暗号で認証する事ができました

またPCがUbuntuでファイル転送を行う場合も端末で接続します。

ubuntu@ubuntu:~$ sftp -o identityfile=id_rsa centos@192.168.0.20
Connecting to 192.168.0.20...
Enter passphrase for key 'id_rsa': 公開鍵暗号の鍵ファイルを作成した時に入力したパスフレーズを入力します
sftp>
公開鍵暗号で認証する事ができました

最後にルータの設定を変更して22番ポートを開放してください。
開放方法はルータの設定手順に従って実施してください。

これで外部から自宅サーバーの操作をしたりファイル転送ができるようになります。

■ 参考サイト ■
SSHサーバー構築(OpenSSH) - CentOSで自宅サーバー構築
はじめての自宅サーバ構築 Fedora/CentOS - SSHサーバの構築(OpenSSH)
「OpenSSH」の設定
Secure Shell - Wikipedia
X-Windowの利用 - PukiWiki

■関連記事
自宅サーバー再構築 その1 導入を検討する
自宅サーバー再構築 その2 CentOS 5.2 をインストールする
自宅サーバー再構築 その3 インストールしたCentOS 5.2 にリモート接続準備
自宅サーバー再構築 その4 CentOS 5.2 インストール後の初期設定
自宅サーバー再構築 その5 CentOS 5.2 ファイル転送準備
自宅サーバー再構築 その6 CentOS 5.2 にアンチウィルスソフトを導入する
自宅サーバー再構築 その7 CentOS 5.2 にファイル改竄検知システムを導入する
自宅サーバー再構築 その8 CentOS 5.2 にrootkit検知ツールを導入する
自宅サーバー再構築 その9 CentOS 5.2 にバッファオーバーフロー攻撃対策を行う
自宅サーバー再構築 その10 CentOS 5.2 SSHサーバーを構築して外部からリモート接続&リモートファイル転送
自宅サーバー再構築 その11 CentOS 5.2 にDNSサーバーを導入して名前解決(設定編)
自宅サーバー再構築 その12 CentOS 5.2 にDNSサーバーを導入して名前解決(確認編)
自宅サーバー再構築 その13 CentOS 5.2 にLAMP環境構築(Apache、PHP編)
自宅サーバー再構築 その14 CentOS 5.2 にLAMP環境構築(MySQL編)
自宅サーバー再構築 その15 Apacheにサーバー証明書を導入する
自宅サーバー再構築 その16 CentOS 5.2 にWordPressを導入してブログサイトを構築する
自宅サーバー再構築 その17 WordPressのセキュリティ対策
自宅サーバー再構築 その18 CentOS 5.3 にNTPサーバーを導入して自動時間合わせ
自宅サーバー再構築 その19 CentOS 5.3 アンチウィルスソフトのバージョンアップ
自宅サーバー再構築 その20 CentOS 5.3 メールサーバー構築(Postfix設定編)
自宅サーバー再構築 その21 CentOS 5.3 メールサーバー構築(Dovecot設定編)
自宅サーバー再構築 その22 CentOS 5.3 メールサーバー構築(公開編)
自宅サーバー再構築 その23 CentOS 5.3 メールサーバー構築(SSL導入編)
自宅サーバー再構築 その24 CentOS 5.3 メールサーバー構築(メールアカウント作成編)
自宅サーバー再構築 その25 CentOS 5.3 メールサーバー構築(Thunderbird設定編)
自宅サーバー再構築 番外編その1 CentOS 5.3 のリリースと導入済みソフトウェアのアップデート