1. SFTP用グループの作成
まず、SFTP専用のユーザーを束ねるためのグループを作成します。
# groupadd sftp_users
# getent group sftp_users
sftp_users:x:1002:
2. 制限付きユーザーの追加とパスワード設定
シェルアクセスを無効にしたSFTP専用ユーザーを作成し、グループに所属させます。
# useradd -g sftp_users -s /sbin/nologin ftpuser01
# echo "SecurePass!2024" | passwd --stdin ftpuser01
3. チルトディレクトリの準備
ユーザーごとの隔離されたホームディレクトリを構築します。
# mkdir -p /srv/sftp/ftpuser01
# usermod -d /srv/sftp/ftpuser01 ftpuser01
4. SSHサーバー設定の変更
/etc/ssh/sshd_config を編集し、以下のように設定を追加・変更します。
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
Match Group sftp_users
ChrootDirectory /srv/sftp/%u
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
5. ディレクトリ権限の厳格化
チルトルートはroot所有でなければならず、書き込み不可に設定します。
# chown root:sftp_users /srv/sftp/ftpuser01
# chmod 755 /srv/sftp/ftpuser01
6. アップロード用サブディレクトリの作成
ユーザーがファイルをアップロードできるディレクトリを用意し、適切な権限を付与します。
# mkdir /srv/sftp/ftpuser01/inbox
# chown ftpuser01:sftp_users /srv/sftp/ftpuser01/inbox
# chmod 750 /srv/sftp/ftpuser01/inbox
7. SSHサービスの再起動
設定を反映させるためにSSHデーモンを再起動します。
# systemctl reload sshd
# systemctl is-active sshd
active
8. 接続テスト
クライアントマシンから接続を試み、ディレクトリ構造を確認します。
$ sftp ftpuser01@server-host
ftpuser01@server-host's password:
Connected to server-host.
sftp> ls -la
drwxr-xr-x 3 root sftp_users 4096 Oct 23 11:21 .
drwxr-xr-x 3 root sftp_users 4096 Oct 23 11:21 ..
drwxr-x--- 2 ftpuser01 sftp_users 4096 Oct 23 11:21 inbox
9. 主要なSFTPコマンド
put <local> [<remote>]— ローカルファイルをアップロードget <remote> [<local>]— リモートファイルをダウンロードmkdir <dir>— リモート側にディレクトリ作成rm <file>— ファイル削除chmod <mode> <file>— 権限変更