私はsftp用のchrootを設定し、チュートリアルの組み合わせを使用しました(ソース1、ソース2)次の構成で終了します/etc/ssh/sshd_config
。
Match Group sftpusers
ForceCommand internal-sftp
ChrootDirectory /var/sftp/
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
sftpデフォルトフォルダ/var/sftp
とユーザーは次のように作成されます。
groupadd sftpusers
adduser myuser01
mkdir -p /var/sftp/myuser01
usermod -a -G sftpusers myuser01
chown myuser01:myuser01 /var/sftp/myuser01
systemctl restart sshd
/var/sftp
ログインしようとすると、ログインの仕組みを示すこのフォルダが表示されます。
ユーザーがそのフォルダにあることを望むので、その行の下/var/sftp/<userid>
に次の設定を設定してみました。sshd_config
Match Group
ChrootDirectory /var/sftp/%u
client_loop: send disconnect: Broken pipe
これにより、ログイン時にエラーが発生します。ssh_config
マニュアルページによると、変数は次のように許可されなければなりません。
ChrootDirectory は %%、%h、%u タグを受け入れます。
どんなアイデアがありますか?
環境:
- オペレーティングシステム:Ubuntu 18.04.4 LTS
- sshd: OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 2017年12月7日
答え1
chown myuser01:myuser01 /var/sftp/myuser01
...
ChrootDirectory /var/sftp/%u
OpenSSH SSHサーバーChroot ディレクトリディレクティブでは、chrootディレクトリとその親ディレクトリをルートが所有する必要があります。
Chroot ディレクトリ
認証後にchroot(2)のディレクトリパス名を指定します。セッションの開始時に、sshd(8)は、パス名のすべてのコンポーネントが他のユーザーまたはグループが書き込めないルートが所有するディレクトリであることを確認します。chrootの後、sshd(8)は作業ディレクトリをユーザーのホームディレクトリに変更します。
これはテストしていませんでしたが、考える関連ユーザーの行を含むchroot環境でファイルを生成すると、/etc/passwd
sshdはその行のhomeフィールドをchroot環境内のユーザーのホームディレクトリとして扱います。これが機能したら、それを使用してchrootディレクトリではなく作業ディレクトリからユーザーセッションを開始できます。
答え2
あなたの例では、他のユーザーが所有して書き込むことはできませ/var/sftp
ん/var/sftp/usero1
。root
お客様の問題は、次の場合に発生する可能性が高くなります。
chown myuser01:myuser01 /var/sftp/myuser01
root:root
代わりにchmod 755
sudo mkdir /var/sftp
sudo mkdir /var/sftp/myuser01
sudo chown -R root:root /var/sftp
chmod -R 755 /var/sftp
ユーザーディレクトリはroot:root
他の人が所有しており、書き込みできないため、ユーザーはsshd Internal-sftpを介してディレクトリとchrootにログインできる必要があります。
ForceCommand internal-sftp
ChrootDirectory /var/sftp/
したがって、それらを1つにまとめます。
sudo groupadd sftpusers
sudo mkdir /var/sftp
sudo mkdir /var/sftp/myuser01
sudo chown -R root:root /var/sftp
chmod -R 755 /var/sftp
sudo adduser -h /var/sftp/myuser01 myuser01
sudo usermod -a -G sftpusers myuser01
あなたのものを編集し、/etc/ssh/sshd_config
最後にこれを追加します。
Match Group sftpusers
ForceCommand internal-sftp
ChrootDirectory /var/sftp/%u
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
その後、sshdを保存して再起動します。
systemctl restart sshd
私の問題は、これは、ユーザー「myuser01」が自分のプライマリディレクトリへの書き込みアクセス権を持っていないことを意味することです。したがって、私の場合は悪くありません。実際にwwwディレクトリを持つには「myuser01」が必要です。アクセスが必要です。この問題を解決しました
sudo mkdir /var/sftp/myuser01/www/
sudo chown myuser01:myuser01 /var/sftp/myuser01/www/
(ここで命名規則に従うように名前が変更されました)
これは、そのユーザー用のSFTP chroot刑務所を作成したい場合に機能します。 SFTPのみを使用できますが、使用するコマンドとライブラリの完全なchrootを構築する必要はありません。それ以外の場合は、必要なコマンドを適切なbinディレクトリに追加し、必要なライブラリをそのディレクトリに追加し、ローカルコピーと必要な/lib
グループ/etc/passwd
と/etc/group
ユーザーエントリがあると仮定します(まだテストしていません)。 SFTP chroot刑務所のみが必要です)
答え3
ChrootDirectoryには、ユーザーセッションをサポートするために必要なファイルとディレクトリが含まれている必要があります。対話型セッションの場合、少なくともシェル(通常はsh(1))とnull(4)、zero(4)、stdin(4)、stdout(4)、stderr(4)、ttyなどのデフォルトの/ devノードが必要ですします。 (4)デバイス。 SFTP を使用するファイル転送セッションの場合、インプロセス SFTP サーバーを使用する場合、追加の環境設定は必要ありません。ただし、一部のオペレーティングシステムでは、ロギングを使用するセッションでchrootディレクトリに/ dev / logが必要になる場合があります(詳細はsftp-server(8)を参照)。
答え4
次は私のために働いた。以下は単なる例です。
- 次のように行を編集
/etc/ssh/sshd_config
、変更、およびアクティブにします。Subsystem sftp internal-sftp
- 次に、ファイルの最後に移動します(すでに存在する場合は変更)。 SFTPのデフォルトフォルダは次のとおりです。
/home/sftp
Match Group sftpusers ChrootDirectory /home/sftp ForceCommand internal-sftp X11Forwarding no AllowTcpForwarding no
- ファイルを保存し、SSHサービスを再起動します。
systemctl restart sshd
次に、次のコマンドを実行します。sftpuser
私たちのユーザーになるので、sftpusers
今後は
- SFTP用の新しいユーザーを作成して追加するだけです
sftpusers
。useradd -d /home/sftp -s /bin/false -g users -G sftpusers sftpuser
- パスワードを設定してください
sftpuser
passwd sftpuser
- 次の行を実行します。
chown root:root /home/sftp #rights for group & others chmod go+rx /home/sftp mkdir /home/sftp/{upload,download} chown sftpuser:users /home/sftp/{upload,download} chown sftpuser:sftpusers /home/sftp/{upload,download}
これで、すべてのリモートサーバーまたはSFTPクライアントでSFTPを認証できます。
sftp [email protected]