ユーザ用ツール

サイト用ツール


linux:sftp_server

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
linux/sftp_server.txt · 最終更新: 2023/08/20 13:34 by mikoto