SFTP サーバー構築
概要
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