Amazon Lightsail インスタンスで SFTP ユーザーを作成したいと考えています。これを行うにはどうすればよいですか?
解決方法
注: 以下の手順では、SSH アクセスなしで chroot 環境 (chroot jail) にアクセスできる SFTP ユーザーを作成します。SFTP ユーザーは、chroot 環境またはディレクトリの外部にあるディレクトリにはアクセスできません。したがって、chroot ディレクトリはユーザーのルートディレクトリになります。
1. SFTP ユーザーのグループを作成します。このグループは、多くの異なる SFTP ユーザーの管理に役立ちます。この例では、グループ名は sftp_group です。名前は、任意のグループ名に変更できます。
sudo groupadd sftp_group
2. ホームディレクトリを持つインスタンスでユーザーを作成します。このユーザーは SFTP タスクのみを実行し、SSH ログインシェルを持ちません。次の例では、sftp_user を任意のユーザー名に置き換えます。
sudo useradd -g sftp_group -m -d /home/sftp_user -s /sbin/nologin sftp_user
3. ユーザーは、SFTP を介してサーバーに接続するときに、さまざまな方法で認証できます。次の例では、パスワードと SSH キーベースの認証を使用しています。
パスワード認証
パスワード認証を要求するには、次のコマンドを使用してパスワードを作成します。
sudo passwd sftp_user
SSH キーベースの認証
SSH キーベースの認証を使用している場合は、ユーザーの SSH ファイルを作成し、公開キーをファイルに追加する必要があります。これを行うには、以下を実行します。
ユーザーのホームディレクトリで、.ssh フォルダと authorized_keys ファイルを作成します。
sudo mkdir /home/sftp_user/.ssh
sudo touch /home/sftp_user/.ssh/authorized_keys
使用する SSH 公開キーを /home/sftp_user/.ssh/authorized_keys ファイルに追加します。詳細については、Set up SSH for your Linux/Unix-based Lightsail instances を参照してください。
次のコマンドを実行して、ユーザーのホームディレクトリの所有権と許可を変更します。
sudo chown sftp_user:sftp_group /home/sftp_user/.ssh -R
sudo chown root:sftp_group /home/sftp_user/
sudo chmod 755 /home/sftp_user/
sudo chmod 700 /home/sftp_user/.ssh/
sudo chmod 600 /home/sftp_user/.ssh/authorized_keys
前述の例では、/home/sftp_user ディレクトリで許可 755 を使用し、所有権を root ユーザーに変更しています。これは、ディレクトリが chroot ディレクトリとして使用されるためです。パス名のすべてのコンポーネントは、他のユーザーまたはグループによる書き込みが不可となっているルート所有のディレクトリでなければならないことに注意してください。
4. 次の手順を実行して、/etc/ssh/sshd_config ファイルを編集します。
Subsystem sftp /usr/libexec/openssh/sftp-server 行をコメントアウトして、Subsystem sftp 行を変更します。
# Subsystem sftp /usr/libexec/openssh/sftp-server
前述の行を次と置き換えます。
Subsystem sftp internal-sftp
SFTP ユーザーのアクセスを制限するディレクティブを追加します。次のディレクティブは、ファイルの末尾に追加する必要があります。
Match Group sftp_group
ChrootDirectory /home/%u
ForceCommand internal-sftp
前述の例では、ChrootDirectory ディレクティブを使用して SFTP ユーザーのルートディレクトリ (chroot jail) を指定しています。ユーザーが sftp_group に属するマッチブロックは、パス /home/%u をルートディレクトリとして使用します。文字 %u はユーザーを表します。ユーザーのルートディレクトリを変更できます。
ForceCommand internal-sftp ディレクティブは、インプロセス SFTP サーバーの使用を強制します。
パスワード認証を使用する場合は、/etc/ssh/sshd_config ファイルで PasswordAuthentication ディレクティブを見つけ、それが [はい] に設定されていることを確認します。
5. ユーザーが使用する chroot ディレクトリを作成します。ディレクトリ名 sftp_user、および uploads を、任意の名前でを置き換えます。
sudo mkdir /home/sftp_user/uploads
ファイルの所有権を変更します。
sudo chown sftp_user:sftp_group /home/sftp_user/uploads
6. ディレクトリの許可が次の例に示すとおりであることを確認します。
ls -ld /home
drwxr-xr-x 3 root root 23 Oct 6 15:17 /home
ls -ld /home/sftp_user
drwxr-xr-x 3 root sftp_group 21 Oct 6 15:17 /home/sftp_user
ls -ld /home/sftp_user/uploads/
drwxr-xr-x 2 sftp_user sftp_group 6 Oct 6 15:17 /home/sftp_user/uploads/
7. sshd サービスを再起動します。
sudo systemctl restart sshd
8. sftp を使用してインスタンスに接続します。
パスワード認証
# sftp sftp_user@example.com
sftp_user@example.com's password:
SSH キーベースの認証
# sftp -i key.pem sftp_user@example.com