CentOS 7でchroot環境+sftp専用のユーザを作成する

だいぶ久しぶりにsftpの設定をすることがあったので、自分用にまとめておく。セオリーというか、一般的に行われている設定と同様にchrootをし、かつsftpのみ実行可能なユーザとする。わざわざsftpに制限するユーザを作るので、ログインは鍵認証のみに制限する。まず、以下のコマンドでユーザ(ここではsftpユーザ)の作成をしておく。

useradd sftp # -dでホームディレクトリを任意のディレクトリ
mkdir ~sftp/.ssh # .sshディレクトリを作成

 

ログイン元の公開鍵が/tmp/publicとして置いてあると仮定して、以下のように公開鍵設定をする。
設定完了後、とりあえず今の時点で鍵認証でsshログインが行える事を確認すると良いだろう。

cat /tmp/public >> ~sftp/.ssh/authorized_keys
chown -R sftp. ~sftp/.ssh
chmod 700 ~sftp/.ssh
chmod 600 ~sftp/.ssh/*
Sponsored Links

「/etc/ssh/sshd_config」を編集し、接続ユーザがsftpだった場合のみ、以下の条件の設定をする。
なお、Matchで設定できる条件はユーザの他グループや接続ネットワークなどを指定できるので、設定したい環境に応じて記述してやると良いだろう。

  • 実行可能プログラムのsftpへの制限
  • Chrootで、接続ユーザから見たルートディレクトリを指定したディレクトリとする(ホームディレクトリを指定する場合は「~」)
# 標準のsftpサーバからinternal-sftpに変更する
#Subsystem       sftp    /usr/libexec/openssh/sftp-server
Subsystem       sftp    internal-sftp
# 接続ユーザがsftpだった場合、chrootの設定と実行プログラムとしてsftpの指定
Match User sftp
ChrootDirectory ~
ForceCommand internal-sftp

 

なお、この時chrootを設定するディレクトリは、所有者・グループがroot:root、権限は755にする必要が有るので注意。
これができてないと、鍵認証で接続ができた直後に切断されてしまう。

設定完了後、sshdを再起動する。
再起動後、sftpで接続できること、sshでの接続ができないこと、Chrootがされていることを確認する。

blacknon@BS-PUB-DEVELOP:~$ ssh sftp@BS-PUB-CENT7-01
Could not chdir to home directory /home/sftp: No such file or directory
This service allows sftp connections only.
Connection to BS-PUB-CENT7-01 closed.
blacknon@BS-PUB-DEVELOP:~$ sftp sftp@BS-PUB-CENT7-01
Connected to BS-PUB-CENT7-01.
sftp> pwd
Remote working directory: /
sftp> ls -la
drwxr-xr-x    3 0        0              90 May 29 22:33 .
drwxr-xr-x    3 0        0              90 May 29 22:33 ..
-rw-------    1 1000     1000            5 May 29 22:33 .bash_history
-rw-r--r--    1 1000     1000           18 Dec  6 23:19 .bash_logout
-rw-r--r--    1 1000     1000          193 Dec  6 23:19 .bash_profile
-rw-r--r--    1 1000     1000          231 Dec  6 23:19 .bashrc
drwx------    2 1000     1000           28 May 29 22:31 .ssh
sftp>

 

 


Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。

*