私の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
が機能します。問題は、特定のフォルダにルートを指定したいということです。
> 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
ユーザーセッションをサポートするために必要なファイルとディレクトリを含める必要があります。対話型セッションでは、少なくともシェル(通常は)sh(1)
とプライマリ/dev
ノード(たとえば、、、、null(4)
およびデバイス)zero(4)
が必要です。SFTPを使用するファイル転送セッションの場合、in-process sftpサーバーを使用している場合は追加の環境設定は必要ありませんが、ロギングを使用するセッションには一部のオペレーティングシステムでchrootディレクトリが必要になる場合があります(参考文献を参照)。stdin(4)
stdout(4)
stderr(4)
tty(4)
/dev/log
sftp-server(8)
dev
このディレクトリを作成し、/dev/MAKEDEV
そこにスクリプトをコピーする必要があります。スクリプトを使用して必要なデバイスファイルを作成します。
対話型ユーザーの場合は、chrootに必要なバイナリと関連ライブラリもインストールする必要があります。
「in-process sftp server」への参照は、そのForceCommand internal-sftp
サーバーをブロックで使用する必要があることを意味しますMatch
。
注:この抜粋はOpenSSH 7.5からの抜粋です。これは、以前のSSH実装へのアクセス権がないためです。