はじめに
AmazonLinux2にsftpユーザーにchrootを設定する手順をまとめました。
事前準備
設定する前の事前準備です。
ユーザー作成
まず、sftpuserという名前でユーザーを作成します。
ユーザー作成
$ sudo useradd sftpuser
$ sudo passwd sftpuser
ディレクトリの作成
次にchroot用のディレクトリを作成します。
$ sudo mkdir /opt/chroot
$ sudo chown root.root /opt/chroot
$ sudo mkdir /opt/sftpuser
$ sudo chown sftpuser /opt/sftpuser/data
$ sudo chmod 755 /opt/sftpuser/data
chroot先のディレクトリの所有者はrootにする必要があります。
そのためファイルのアップロード用に配下にディレクトリを作成しています。
設定
準備ができたので設定を行います。
config修正
既存のconfigのバックアップを取り、修正します。
$ sudo cp -pi /etc/ssh/sshd_confg /etc/ssh/sshd_config.bk
$ sudo vim /etc/ssh/sshd_config
Subsystem sftp /usr/libexec/openssh/sftp-server
の行があればコメントアウトをし、以下の内容を追加します。
追加
Subsystem sftp internal-sftp
Match User sftpuser
ChrootDirectory /opt/sftpuser
X11Forwarding no
AllowTcpForwarding no
PasswordAuthentication yes
ForceCommand internal-sftp
パラメータ | 内容 |
---|---|
ChrootDirectory | chrootを行うディレクトリパス |
X11Forwarding | X11転送許可設定 |
AllowTcpForwarding | TCP転送許可設定 |
PasswordAuthentication | パスワード認証を行うか |
ForceCommand | 強制コマンド設定 |
ユーザー単位でなくグループ単位にしたい場合はUser
をGroup
にします。
sshd再起動
設定したら再起動します。
$ sudo systemctl restart sshd.service
$ sudo systemctl status sshd.service
確認
それではsftpコマンドを使って実際にファイルのアップロードができるか試してみます。
$ touch test
$ sftp sftpuser@localhost
sftp> cd data
sftp> put test
sftp> ls
sftp> rm test
sftp> ls
sftp> quit
ファイルのアップロードが確認できました。
おわりに
rootでないとchrootできないにも関わらず、root権限がないのでファイルアップロードができないなんてなんか腑に落ちないです。。。