2015年3月18日水曜日

ssh ログインできない chroot された sftp 専用ユーザーを作成

以下のような sftpuser を作成します。

  • ssh でのログインはできない
  • sftp でファイルのアップロード、ダウンロードが可能
  • sftp でのログイン時はサーバー側で /some/where/ChrootDir/ に chroot される
環境
Ubuntu 14.04 (Trusty Tahr) Server

/etc/ssh/sshd_config の最後に以下を追加

Match User sftpuser
    ChrootDirectory /some/where/ChrootDir
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no
  • ChrootDirectory /some/where/ChrootDir により sftp した時に指定したディレクトリに chroot されます。
  • ForceCommand internal-sftp により、sftpuser は sftp はできますが、ssh ログインはできなくなります。
  • AllowTcpForwarding no により、シェルを起動しない ssh 接続の場合でもポートフォワードができなくなります。
  • X11Forwarding no により、X11 転送ができなくなるようです。(普段 X11 転送は使っていないので試してません)

sshd を再起動

$ sudo service ssh restart

sftpuser を作成

$ sudo adduser \
--home /sftpuser \
--shell /usr/sbin/nologin \
--no-create-home \
sftpuser
  • --home /sftpuser により、/some/where/ChrootDir/ に chroot された sftp 直後のカレントディレクトリ (ホームディレクトリ) は /some/where/ChrootDir/sftpuser/ となります。
  • --shell /usr/sbin/nologin により、ssh 以外でもログインできなくなります。
  • --no-create-home により、chroot 前の /sftpuser/ ディレクトリが作成されないようにしています。

chroot するディレクトリを作成

$ sudo mkdir -p /some/where/ChrootDir
$ sudo chown root:root /some/where/ChrootDir
$ sudo chmod 755 /some/where/ChrootDir
$ ls -ld /some/where/ChrootDir
drwxr-xr-x 2 root root 4096 Mar 15 18:16 /some/where/ChrootDir
  • chroot 先のディレクトリ (/some/where/ChrootDir/) のオーナーは root である必要があり、更にどんなグループの書き込み権限も付与されていない必要があるようです。

sftp ログイン時のホームディレクトリを作成

$ sudo mkdir /some/where/ChrootDir/sftpuser
$ sudo chown sftpuser:sftpuser /some/where/ChrootDir/sftpuser
$ ls -ld /some/where/ChrootDir/sftpuser
drwxr-xr-x 2 sftpuser sftpuser 4096 Mar 16 20:44 /some/where/ChrootDir/sftpuser

参考


0 件のコメント:

コメントを投稿