私の ssh サーバーは 4 年間問題なく動作しているので、ユーザーを追加して、特定のフォルダーに chroot したいだけです。
> useradd -m -c /home/thomas -s /bin/sh thomas
> passwd thomas
> chmod 755 /home/thomas
> chown root: /home/thomas
> service ssh restart
これをやると、私はできる接続するssh
とsftp
接続が機能します。問題は、特定のフォルダーに chroot したいことです。
> vim /etc/ssh/sshd_config
ファイルの最後に以下を追加します:
Match user thomas
ChrootDirectory /home/%u
これを追加するだけなら、何かが変わることはないはずですよね? 構成は同じで、sftp に接続したり使用したりできるはずです... で再起動するとservice ssh restart
、sftp に接続できなくなりました。
念のため:
root@xx:/etc/nginx/sites-enabled# /usr/sbin/sshd -v
sshd: illegal option -- v
OpenSSH_6.0p1 Debian-4+deb7u6, OpenSSL 1.0.1t 3 May 2016
usage: sshd [-46DdeiqTt] [-b bits] [-C connection_spec] [-c host_cert_file]
[-f config_file] [-g login_grace_time] [-h host_key_file]
[-k key_gen_time] [-o option] [-p port] [-u len]
root@xx:/etc/nginx/sites-enabled#
何が間違っているのでしょうか?
答え1
マニュアルsshd_config
にはこう書かれている
ChrootDirectory
には、ユーザーのセッションをサポートするために必要なファイルとディレクトリが含まれている必要があります。対話型セッションの場合、これには少なくともシェル (通常は ) と、、、、、、、デバイスなどの基本ノードが必要です。SFTPを使用しsh(1)
た/dev
ファイル転送セッションでは、 インプロセス sftp-server が使用されている場合、環境の追加構成は必要ありませんが、ログを使用するセッションでは、一部のオペレーティング システムで chroot ディレクトリ内が必要になる場合があります(詳細については を参照してください)。null(4)
zero(4)
stdin(4)
stdout(4)
stderr(4)
tty(4)
/dev/log
sftp-server(8)
ディレクトリを作成しdev
、/dev/MAKEDEV
そこにスクリプトをコピーする必要があります。スクリプトを使用して、必要なデバイス ファイルを作成します。
対話型ユーザーの場合は、必要なバイナリと関連ライブラリも chroot にインストールする必要があります。
「インプロセス sftp サーバー」への参照は、ブロックForceCommand internal-sftp
内で使用する必要がりますMatch
。
注: 古い SSH 実装にはアクセスできないため、抜粋は OpenSSH 7.5 からのものです。