LoginSignup
12
11

More than 5 years have passed since last update.

OpenSSHで特定のディレクトリにのみアクセス出来るSFTPユーザーを作成する

Last updated at Posted at 2016-04-28

通常、OpenSSHの設定がされていれば、ssh/scpと同様にsftpが利用可能となります。
しかし、この状態だとcdコマンドでどこへでも移動可能なので、外部の人にデータ授受の目的でユーザーアカウントを提供するのに適していません。

そのような場合、特定のユーザーアカウントにはssh/scpを禁止するとともに、sftpでホームディレクトリ以外への移動を抑制する事ができるChroot機能を使います。

ここでは、その設定について記載します。

OpenSSHの設定

まずはOpenSSHの設定を編集し、特定のユーザーをChroot機能の対象となるようにします。
以下の例では、ワイルドカードを利用してsftp-で始まるユーザーは、Chroot機能の対象となるように設定しています。

su - 
cp /etc/ssh/sshd_config{,.YYYYMMDD}
vi /etc/ssh/sshd_config
diff /etc/ssh/sshd_config{,.YYYYMMDD}
/etc/ssh/sshd_configの変更内容
133,134c133
< #Subsystem    sftp    /usr/libexec/openssh/sftp-server
< Subsystem sftp internal-sftp
---
> Subsystem sftp    /usr/libexec/openssh/sftp-server
143,146d141
< 
< Match User sftp-*                 # `sftp-`で始まるユーザーはChroot機能対象
<   ChrootDirectory ~               # ホームディレクトリ(`~`)以外は利用不可
<   ForceCommand internal-sftp

対象となるユーザー作成

実際に対象となるsftp-で始まるユーザーを作成してみます。

useradd sftp-user00001
passwd sftp-user00001

Chroot機能を使う場合、ホームディレクトリの所有者をrootにする必要があります。
以下の設定では、アクセスは/home/sftp-user00001以下、書き込みは~/upload以下のみにしています。

chown -R root:root /home/sftp-user00001
chmod 755 /home/sftp-user00001                                  # 755にしないと`ls`とか出来ない
mkdir /home/sftp-user00001/upload
chown -R sftp-user00001:sftp-user00001 /home/sftp-user00001/upload  # 書き込めるように

動作確認

以下の動作確認は別サーバから行った。
(対象サーバ: target-server / ポート: 10220)

接続できること
sftp -oPort=10220 sftp-user00001@target-server

sftp> 
各種コマンドが実行できること
sftp> cd upload
sftp> ls
 upload

sftp> put test.txt
test.txt
他のディレクトリに移動できない事
sftp> cd /var
Couldn't canonicalise: No such file or directory
12
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
11