私が参画している案件で、EFS をマウントしたディレクトリに SFTP ユーザでアクセスし、ファイル転送ができるようにしてほしいとの要件がありました。その構築を行ったので、備忘録として残したいと思います。
本記事では、EFS がマウントされた EC2 インスタンスに SFTP ユーザを作成、そのユーザから SFTP クライアントの WinSCP を使用してファイル転送ができるか確認していきます。
また、EC2 インスタンスを FTP サーバとして稼働させるために vsftpd をインストールし、パッシブモードで起動させます。
Amazon Linux 2023 の EC2 インスタンスと EFS はすでに構築しており、マウントもしています。
マウントする際、以下の設定をしています。
amazon-efs-utils
/efs/mnt
/etc/fstab
に以下を追記
ファイルシステムID:/ /efs/mnt efs _netdev,noresvport,tls,iam 0 0
今回は SFTP ユーザの作成から設定をしていきます。
sftp-user という名前で作成します。
sftp-user のホームディレクトリが EFS をマウントしたディレクトリ配下になるよう作成
useradd -d /efs/mnt/sftp-user sftp-user
公開鍵を設定
鍵認証でアクセスするため、公開鍵を配置して以下の構成にします。
SFTP ユーザがアクセスできるディレクトリを制限
作成した SFTP ユーザがホームディレクトリ配下のみアクセスできるよう、/etc/ssh/sshd_config
ファイルに以下を追記します。
Match User sftp-user
ChrootDirectory /efs/mnt/sftp-user
ForceCommand internal-sftp
※ChrootDirectory
に記載するディレクトリは、オーナーとグループを root 、パーミッションを 755 にする必要があります。
sshd 再起動/etc/ssh/sshd_config
ファイルを変更したので sshd を再起動します。
systemctl restart sshd.service
冒頭にも記載しましたが、今回 EC2 インスタンスを FTP サーバとして稼働させるため vsftpd をインストールし、パッシブモードで起動させていきます。
vsftpd をインストール
dnf -y install vsftpd
/etc/vsftpd/user_list
ファイルに、作成した SFTP ユーザを追記
/etc/vsftpd/vsftpd.conf
ファイルに以下を設定
①/etc/vsftpd/user_list
ファイルに記載されているユーザのみが FTP・SFTP で接続可能
userlist_enable=YES
userlist_deny=NO
②パッシブモード有効
pasv_enable=YES
③パッシブモードで使用するポートの範囲
SFTP通信のパッシブモードでは 2 つのポートが使用されます。
データ転送用がランダムとなるため、サーバ側で使用するポートの範囲を設定する必要があります。
今回は 60000 ~ 60010 を範囲とします。
pasv_min_port=60000
pasv_max_port=60010
※設定したポートでの通信を可能にするため、EC2 インスタンスのセキュリティグループにはポート 22 番、60000 ~ 60010 番のインバウンドルールを許可する設定が必要です。
④パッシブモードで接続する際の接続先 IP アドレスを指定
pasv_address=グローバルIPアドレス
vsftpd 起動
vsftpd の設定が完了したので起動させます。
systemctl start vsftpd.service
最後に WinSCP を使用して SFTP 接続を行い、ファイル転送をしていきます。
補足 : WinSCP はコンピュータ間でファイル転送が行えるオープンソースのクライアントソフトウェアです。
WinSCP を起動・接続
WinSCP を起動させて以下を入力します。
入力できたらログインを押下します。
問題なければ画像のように左側がローカル、右側がリモート接続先となります。
右側のリモート接続先のディレクトリを確認すると、「/」となっています。
実際は sftp-user のホームディレクトリ /efs/mnt/sftp-user
ですが、ホームディレクトリ配下のみアクセスできるよう設定したため「/」と表示されます。
ファイル転送/efs/mnt/sftp-user
配下に test ディレクトリを作成し、その中にローカルにあるテキストファイルを転送していきます。
test ディレクトリのオーナーとグループは sftp-user で作成します。
test ディレクトリ作成とテキストファイル(test.txt)を準備すると画像のようになります。
ローカル(左側)にあるテキストファイル(test.txt)をリモート接続先(左側)のtest ディレクトリ内にドラッグアンドドロップします。
test ディレクトリの中を確認すると、テキストファイル(test.txt)が転送できました。
EFS がマウントされた EC2 インスタンスに SFTP ユーザを作成、そのユーザから SFTP クライアントの WinSCP を使用してファイル転送を実施しました。
SFTP 接続の設定・構築を初めて行ったので、とても勉強になりました。
EFS を使用しているため、複数の EC2 インスタンスにマウントさせて利用することも可能です。
どなたかのお役に立てれば幸いです。