【Linux】 SSHの設定
SSHとは、 Secure Shellの略です。
SSHで接続したい場合は、接続先(サーバなど)に公開鍵を置き、接続元(クライアント)に秘密鍵を置くようにする。接続する際はリスクが大きいので、rootは使わないようにする。
機器のVer
SSHの設定手順
1, サーバの設定
SSH接続userの作成
useradd username
passwd username
インストール
yum install openssh-server
2, クライアントの設定
SSH接続userの作成
useradd username
passwd username
インストール
yum install openssh-clients
SSH サーバー初期状態でのアクセス確認
$ ssh username@hostname
# あるいは直接 IP アドレスを指定して
$ ssh username@192.168.XXX.XXX
# もし .ssh がなければ
server$ mkdir .ssh
server$ touch .ssh/authorized_keys
server$ exit
SSH サーバー側に .ssh ディレクトリがなければ作成しておく。
ログインの確認ができたらexitする。
キーの生成
ssh-keygen -t rsa
# パスフレーズを求められるが、運用上必要なければEnterで飛ばしていく
#作成後
秘密鍵:~/.ssh/id_rsa
公開鍵:~/.ssh/id_rsa.pub
rsa:一般的な鍵
ed25519:RSA よりも強固で高速
dsa:脆弱性があるため使用しない
※パスフレーズを設定しておくと、仮に管理用 PC が悪意ある第三者の手によって陥落しても、パスフレーズが特定されるまでの間は SSH の不正利用を防ぐことができる。
3, SSH 公開鍵のサーバーへの登録
client$ scp ~/.ssh/id_rsa.pub username@hostname:~/.ssh/authorized_keys
client$ ssh username@hostname
server$ cd .ssh
server$ chmod 600 authorized_keys
scpコマンドでサーバ側の~/.ssh/authorized_keysに鍵を配置するようにし、~/.ssh/authorized_keysの権限を600に変更する。
scpで権限がなく弾かれるようなら、(本来は弾かれることはないが)authorized_keysの権限を変更するのも1つの手になる。危険なのでお勧めはしない。
サーバ側で/etc/ssh/sshd_config の設定
変更を行う際は事前にバックアップを取る。
また、クライアントでSSH接続したままsudoコマンドで変更しても良いし、サーバに改めてログインして設定することも可能。
vi /etc/ssh/sshd_config # (必要に応じて設定を取捨選択する。以下は主な設定)
-----------------------------------------------------------------
Port 2 # SSH接続を受け付けるポート番号。セキュリティを考慮して1024番以降の設定も可能。
PermitRootLogin no # SSHのrootでのログインを拒否。rootでのログインは危険。
PubkeyAuthentication yes # 公開鍵認証を有効化
PasswordAuthentication no # パスワード認証を拒否。ブルーフォレストの防御。
Protocol 2 # 接続をSSH version2 のみに限定する。1には脆弱性がある。
AllowUsers tanaka yamada # ログインを許可するユーザーのリスト(スペース区切り)
PermitEmptyPasswords no # 空PWの禁止
-----------------------------------------------------------------
その他の設定
# ログインを許可しないユーザを制限する
DenyUsers user3 user4
# 公開鍵認証に使用する認証ファイルのパスを指定する
AuthorizedKeysFile .ssh/authorized_keys
# X11転送を有効にする
X11Forwarding yes
# TCPラッピングを有効にする
UseTcpWrappers yes
# SSH接続のタイムアウト時間を変更する
ClientAliveInterval 120
ClientAliveCountMax 720
# SSH接続のログレベルを変更する
# QUIETはログ出力を無効 、FATAL、ERRORは異常状態のエラー、INFOは一般的な情報
LogLevel VERBOSE
LogLevel QUIET
LogLevel FATAL
LogLevel ERROR
LogLevel INFO
# SFTPのみを許可する
Subsystem sftp /usr/lib/openssh/sftp-server
# 接続先ホストの公開鍵を自動的に保存する
StrictHostKeyChecking no
# 接続の最大同時数を制限する
MaxSessions 10
# パスワードの最小文字数を指定する
MinPasswordLen 8
# ログイン時にメッセージを表示する
Banner /etc/ssh/banner
# SSHリモートログインを許可するIPアドレスを指定する
ListenAddress 192.168.1.1
# ログイン時にホスト名の正当性を検証する
VerifyReverseMapping yes
# SSH接続時にIPv6を使用する
AddressFamily inet6
# 一定時間接続がなかった場合に接続を自動的に切断する
ClientAliveInterval 300
ClientAliveCountMax 0
TCPKeepAlive yes
# SSH接続に使用される秘密鍵を指定
HostKey /etc/ssh/ssh_host_rsa_key
# 認証試行回数の上限を設定
MaxAuthTries
# known_hostsファイルを無視する
IgnoreUserKnownHosts yes
sshdを再起動
systemctl restart sshd
4, ファイアウォールの確認
ファイアウォールでSSHを拒否していると設定が正しくても接続できないので、同時に確認しておく。案件でルールがある場合はそれに従う。
Firewall
$ firewall-cmd --add-port=<変更したポート番号>/tcp --permanent
$ firewall-cmd --reload
iptable
$ iptables -I INPUT -p tcp --dport <変更したポート番号> -j ACCEPT
$ service iptables save
時短の設定(~/.ssh/config)
~/.ssh/configファイルを設定することで、ユーザーの入力やポートや秘密鍵の指定を簡略化することができる。
ちなみに、システム全体の設定は /etc/ssh/ssh_config になり、読み込みは、ssh_config → config の順になります。
設定例
# 198.51.100.10 のサーバ
Host 198.51.100.10
User hoge
Port 22222
IdentityFile ~/.ssh/id_rsa
# example.com のサーバ
Host example
HostName example.com
User fuga
IdentityFile ~/.ssh/piyo.pem
IdentitiesOnly yes
上記の設定をすれば、SSH接続時のコマンドは以下の通りになる。
$ ssh 198.51.100.10
$ ssh example
$ ssh [tabキー] # Host 候補が表示される
ワイルドカードでも設定できる。
Host *
ServerAliveInterval 60
ServerAliveCountMax 10
Host 198.51.100.*
User hoge
Port 22
Host fuga*
User piyo
Port 22222
Hoge fugaA, fugaB, fugaC
$ ssh 198.51.100.1
$ ssh 198.51.100.10
$ ssh fugaA
$ ssh fugaC
踏み台サーバを設定する
config ファイルには、踏み台サーバ経由の接続も設定できます。
Host serverA
User hoge
Port 22
IdentityFile ~/.ssh/id_rsa
Host serverB
User fuga
Port 22222
IdentityFile ~/.ssh/piyo.pem
ProxyCommand ssh -W %h:%p serverA
$ ssh serverB # serverA 経由で serverB にログイン
chrootの設定
指定した任意のサブディレクトリを新たなルートディレクトリとすることができる。
設定例
ユーザー作成
$ useradd hoge
$ passwd hoge
コマンドの実行ファイル・関連ファイルをホームディレクトリ直下に配置する
$ cd /home/hoge
$ cp -p -r /bin /home/hoge/bin
$ cp -p -r /lib /home/hoge/lib
$ cp -p -r /lib64 /home/hoge/lib64
$ mkdir usr
$ cp -p -r /usr/bin /home/hoge/usr/bin
$ cp -p -r /usr/lib /home/hoge/usr/lib
$ cp -p -r /usr/lib64 /home/hoge/usr/lib64
chroot用のディレクトリ/home/hogeはroot:root, 755に変更する。 /home/hoge以下のディレクトリ、ファイルはhoge:hogeに変更する。
$ chown root:root /home/hoge
$ chmod 755 /home/hoge
$ cd /home/hoge
$ chown hoge:hoge *
/etc/ssh/sshd_configの設定変更
# vi /etc/ssh/sshd_config # backupは取る
(デフォルトのsubsystemをコメントアウト)
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
Match User sftp-user # user単位で設定。groupも使える
ChrootDirectory /home/chroot/sftp-user #chrootを行うディレクトリパス
X11Forwarding no # X11転送許可設定
AllowTcpForwarding no # TCP転送許可設定
ForceCommand internal-sftp # 強制コマンド設定
PasswordAuthentication yes # パスワード認証を行うか
sshd再起動
$ systemctl restart sshd.service
$ systemctl status sshd.service
SSH接続できないこと
# ssh hoge@IPaddress
hoge@IPaddress's password:
This service allows sftp connections only.
Connection to IPaddress closed.
SFTP接続できること
# sftp hoge@IPaddress
Connecting to IPaddress...
hoge@IPaddress's password:
sftp>
Chroot,ファイル作成確認
sftp> pwd # chrootしたディレクトリに繋がっていること
sftp> put index.html
Uploading index.html to /html/index.html
index.html 100% 5 0.0KB/s 00:00
※chrootされていないユーザから作成されていることを確認
[root@tagutagu01 /]# ll /var/www/html/
total 4
-rw-r--r-- 1 sftp-user web-team 5 Apr 22 07:23 index.html
その他の