LoginSignup
15
17

More than 5 years have passed since last update.

SFTPを用いて特定ユーザをchrootする方法

Posted at

SFTPを用いて特定ユーザをchrootする方法

FTPの変わりにセキュアなSFTPを運用したいが、そのまま運用してしまうとどんなユーザでも「/」以下が丸見えになってしまう。また本来とは違ったディレクトリに対して誤操作してしまう可能性がある。そのため、例えば「hogehoge.xxx」ドメインの運用ユーザは「/var/www/hogehoge.xxx」が「/」となるようにシステム側でしたい。そのためにsshのchrootという仕組みを使用する。

運用の前提

  • 「hogehoge.xxx」ドメインの運用ユーザ名は「hogehoge.xxx」とする。
  • hogehoge.xxxユーザはSFTPのみ使用でき、ssh自体のログインできない物とする。
  • 鍵形式でのログインとする。

ディレクトリの作成

WEBからのドキュメントルートは「/var/www/hogehoge.xxx/doc_root」にしておき、.sshファイルはWEBからは見えないようにしておきます。

mkdir -p /var/www/hogehoge.xxx/doc_root
mkdir -p /var/www/hogehoge.xxx/.ssh

ユーザ・グループの作成

「chroot_sftp」グループに属しているとホームディレクトリにchrootすると後でsshに設定しますのでユーザを「chroot_sftp」に属させます。

groupadd -g 2002 hogehoge.xxx
useradd -u 2002 -g 2002 -N -s /sbin/nologin -M -d /var/www/hogehoge.xxx hogehoge.xxx
usermod -aG chroot_sftp hogehoge.xxx

鍵の作成

セキュアなSSHサーバの作成の手順でhogehoge.xxxユーザの鍵を作成
その中の公開鍵を次の「authorized_keys」の内容に貼り付けます。

authorized_keysの作成

先ほど作成した鍵の内容でファイルを作成します。

vi /var/www/hogehoge.xxx/.ssh/authorized_keys

ファイル、ディレクトリ属性の変更

chrootするためには「/var/www/hogehoge.xxx/」自体はrootの持ち物にしておく必要があります。

chown -R hogehoge.xxx:hogehoge.xxx /var/www/hogehoge.xxx
chmod 700 /var/www/hogehoge.xxx/.ssh/
chmod 600 /var/www/hogehoge.xxx/.ssh/authorized_keys
chown root:root /var/www/hogehoge.xxx

sshd_configの修正

下記を最下部に追加します。

/etc/ssh/sshd_config
Match group chroot_sftp
  ChrootDirectory ~
  ForceCommand internal-sftp
  X11Forwarding no
  AllowTcpForwarding no

反映
/etc/init.d/sshd restart

よく
Subsystem sftp /usr/libexec/openssh/sftp-server
自体をコメントアウトするなどありますが不要だと思います。
マッチで上書きしているので。お任せします。

以上でwinscpなどで入ると「/var/www/hogehoge.xxx/」が最上位となり、またputtyではログインできないようになります。

以上。

15
17
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
15
17