Amazon Lightsail インスタンスに SFTP ユーザーを作成したいと考えています。
解決策
**注:**以下の手順では、SSH アクセスなしで chroot 環境 (chroot jail) にアクセスできる SFTP ユーザーを作成します。SFTP ユーザーは chroot 環境またはディレクトリの外部にあるディレクトリにはアクセスできません。このユーザーの場合、chroot ディレクトリはルートディレクトリです。
SFTP グループとユーザーのセットアップ
-
次のコマンドを使用して SFTP ユーザーのグループを作成します。
sudo groupadd sftp_group
**注:**sftp_group を自分のグループ名に置き換えてください。
-
SSH ログインシェルにアクセスできないホームディレクトリを持つインスタンスにユーザーを作成します。そのためには、以下のコマンドを実行します。
sudo useradd -g sftp_group -m -d /home/sftp_user -s /sbin/nologin sftp_user
**注:**sftp_user をあなたのユーザー名に置き換えます。
パスワード認証または SSH キーベース認証のいずれかを使用してユーザー認証を設定します
パスワード認証
次のコマンドを使用してパスワードを作成します。
sudo passwd sftp_user
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 ファイルに追加します。詳細については、「Lightsail の SSH キーの設定」を参照してください。
-
ユーザーのホームディレクトリの所有権と権限を変更するには、次のコマンドを実行します。
sudo chown sftp_user:sftp_group /home/sftp_user/.ssh -Rsudo 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 を使用し、所有権をルートユーザーに変更しています。このユーザディレクトリは chroot ディレクトリとして使用されます。
/etc/ssh/sshd_config ファイルを編集します
-
Subsystem sftp 行で、Subsystem sftp /usr/libexec/openssh/sftp-server 行をコメントアウトします。
# Subsystem sftp /usr/libexec/openssh/sftp-server
-
前の行を次のテキストに置き換えます。
Subsystem sftp internal-sftp
-
SFTP ユーザーアクセスを制限するには、ファイルの末尾に次のテキストを追加します。
Match Group sftp_group
ChrootDirectory /home/%u
ForceCommand internal-sftp
前の例では、ChrootDirectory は SFTP ユーザーのルートディレクトリを指定しています。MatchGroup は、ルートディレクトリとして /home/%u というパスを使用する sftp_group 内のユーザーを識別します。%u という文字はユーザーを表します。ForceCommand internal-sftp は、インプロセスの SFTP サーバの使用を強制します。
-
パスワード認証を使用する場合は、/etc/ssh/sshd_config ファイルの PasswordAuthenticationを yes に設定してください。
ユーザーの chroot ディレクトリーを作成する
- chroot ディレクトリを作成するには、以下を実行します。
sudo mkdir /home/sftp_user/uploads
**注:**ディレクトリ名 sftp_user、および uploads を自分のディレクトリ名に置き換えます。
- ファイルの所有権の変更:
sudo chown sftp_user:sftp_group /home/sftp_user/uploads
**注:**ディレクトリ名 sftp_user、および uploads を自分のディレクトリ名に置き換えます。
変更を確認して SSHD サービスを再起動します
-
ディレクトリ権限が次の例のようになっていることを確認します。
ls -ld /homedrwxr-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/
-
SSHD サービスを再起動します。
sudo systemctl restart sshd
SFTP を使用してインスタンスに接続します。
パスワード認証
以下を実行してください。
# sftp sftp_user@example.com's password:
SSH キーベース認証
以下を実行してください。
# sftp -i key.pem sftp_user@example.com