検証環境はGCPにてUbuntu 16.04 LTSのインスタンスを作成しています。
手順自体はSSHキーの登録より後は他の環境でも共通です。
SSHキーの登録
公開鍵を設置します。
GCPの場合はインスタンスの詳細に入って編集、sshキーがx個ありますのところを表示して編集するとOKです。
「ssh-rsa」からコピーして貼り付けます。
末尾のところが自動でユーザー名になるので利用予定のユーザー名と合わせましょう。他は編集してはいけません。
GCPじゃない場合は
$ sudo adduser sftp-user
でユーザーを作成(useraddだとディレクトリ作成とかされないので面倒)
設定するパスワードを確認も含めて2回入力、その後は空のままEnterでOK
作成した後、適宜SSHキーを登録してください。
SFTP用のユーザーグループを作成
$ sudo groupadd sftp_users
$ sudo usermod -G sftp_users sftp-user
sshd configの設定
$ sudo vi /etc/ssh/sshd_config
Subsystem sftp /usr/lib/openssh/sftp-server をコメントアウト
Subsystem sftp internal-sftp を追加
末尾に
Match Group sftp_users
X11Forwarding no
AllowTcpForwarding no
ChrootDirectory /home/%u
ForceCommand internal-sftp
を追加して保存
$ sudo systemctl restart ssh
ChrootDirectoryに設定するディレクトリはrootにする必要がある(でなければ接続できない)
$ sudo chown root:root /home/sftp-user
sftpでファイルを置くディレクトリを作成(filesも任意に変更可)
$ sudo mkdir /home/sftp-user/files
$ sudo chown sftp-user:sftp-user /home/sftp-user/files
これで sftp-user は/file 以下にのみアクセスできるSFTP用のユーザーになりました。
設定完了です。
参考:
https://www.server-world.info/query?os=Ubuntu_16.04&p=ssh&f=5
https://qiita.com/usutani/items/fdabef73b5dff60c95c6