====== SFTP サーバー構築 ======
[[:linux|一つ上へ]]
===== 概要 =====
sftp-userというユーザーを作成し、''/sftp/chroot/home/sftp-user''というディレクトリ内のみ
アクセス可能でログイン不可能の設定でSFTPサーバーを構築する。
===== 手順 =====
bashログイン不可能なユーザーを作成。ディレクトリを''/sftp/chroot/home/sftp-user''とする。
useradd -m -d /sftp/chroot/home/sftp-user -s /sbin/nologin sftp-user
ディレクトリが作成されなかった場合は作成する。
SFTPユーザーのルートディレクトリとする際、所有者をrootにしておかないとログインできないため、
所有者とグループを''root:sftp-user''としておく。
更に、このディレクトリの中に、書き込み可能なディレクトリを用意しておく。
こちらは所有者とグループを''sftp-user:sftp-user''に設定し、
パーミッションは700としておく。
mkdir -p /sftp/chroot/home/sftp-user
chown root:sftp-user /sftp/chroot/home/sftp-user
chmod 755 /sftp/chroot/home/sftp-user
mkdir /sftp/chroot/home/sftp-user/writable
chown sftp-user:sftp-user /sftp/chroot/home/sftp-user/writable
chmod 700 sftp-user:sftp-user /sftp/chroot/home/sftp-user/writable
ここで、ホームディレクトリ自体は750としてしまっても良い。その方が他のユーザーから読み取られる心配は少なくなる。
鍵を作成する。
ssh-keygen -t rsa 4096
# 名前はsftp-keyで作成、パスフレーズは無しにする
鍵を格納するためのディレクトリを作成し、公開鍵の内容を貼り付けて保存する。
authorized_keysファイルは、ユーザーが参照できるように所有権を設定しておく。
mkdir -p /sftp/chroot/sshkeys/sftp-user
vim /sftp/chroot/sshkeys/sftp-user/authorized_keys
chown sftp-user:sftp-user authorized_keys
chmod 600 authorized_keys
==== SFTP で操作できるディレクトリを制限する ====
ユーザーが操作できるディレクトリを制限したいので、sshd_config を編集して以下を追加する。
''%u''はユーザー名を表す。
# User Configuration
Match User sftp-user
ChrootDirectory /sftp/chroot/home/%u
AuthorizedKeysFile /sftp/chroot/sshkeys/%u/authorized_keys
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
PasswordAuthentication no
ここでは、** ForceCommand ** ディレクティブにinternal-sftp を指定することでsftpでの接続のみに制限している。
変更後、サービスを再起動して反映する。
systemctl restart sshd
==== 構成例2-Chrootなし、パスワード認証での設定 ====
通常のユーザーのホームディレクトリをルートディレクトリとし、パスワード認証で接続するよう設定する。
また、ルートディレクトリ直下で読み書き可能とする。
ユーザーを作成し、パスワードを設定
useradd -s /usr/sbin/nologin sftp-pass
passwd sftp-pass
sshd_configを編集し、以下を追加
Match User sftp-pass
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
sshd を再起動する
systemctl restart sshd
ユーザーのホームディレクトリの所有者をrootに変更し、
パーミッションを775にする。
chown root: /home/sftp-pass
chmod 775 /home/sftp-pass