私は、複数のユーザーがホームディレクトリにchrootするSFTPサーバーをセットアップしようとしています。 このガイド ( Archive.org link )のアドバイスに従い、ユーザーのディレクトリで次のコマンドを実行しました
chown root:root /home/user/
chmod 755 /home/user/
すべてのユーザーのホームディレクトリにpublic
という名前の追加フォルダーがあります。このフォルダーは、ユーザーが所有し、必要に応じてディレクトリを作成し、ファイルをアップロードおよび削除できるようにします。 (これは前に述べたガイドでアドバイスされました)
sftp -P 435 user@localhost
を実行すると、次のエラーが表示されます。
書き込みに失敗しました:パイプが壊れています
パケットを読み取れませんでした:ピアによって接続がリセットされました
ここからどのように進めますか?究極のアイデアは、他のマシンの各ユーザーがFileZillaを使用してchrootされたホームディレクトリにログインし、ディレクトリとファイルをアップロードできるようにすることです。これらはすべてSFTPで(より安全だから)
この記事では、chrootされたシェルアクセスを取得する方法についても説明していますが、sftpのみのアカウントが必要なため、次の手順に従ってください。
/etc/ssh/sshd_config
を編集し、次の行を追加します。
SubSystem sftp internal-sftp
Match Group sftp
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
行UsePAM yes
を見つけてコメントします。
#UsePAM yes
これを無効にしないと、SSHサーバーはリロード/再起動時にクラッシュします。 PAMの派手な機能は必要ないので、これで問題ありません。
セキュリティを強化するために、ログインできるユーザーを制限します。 SFTPユーザーをsftp
グループに追加するのを忘れた場合、無料のシェルアクセスを許可します。素敵なシナリオではありません。 SSHはAllowUsers
とAllowGroups
を結合できないため(ログインは両方のルールを満たす必要があります)、追加のグループ、たとえばssh-users
を作成する必要があります。 SSHを介したログイン(youruser
以下)を許可されているユーザーを追加します。
Sudo groupadd ssh-users
Sudo gpasswd -a youruser ssh-users
そして、次の行を/etc/ssh/sshd_config
に追加します:
AllowGroups ssh-users sftp
次に、ユーザーのホームディレクトリの権限を変更して、chrootを許可します(例:ユーザーsftp-user
):
Sudo chown root:sftp-user /home/sftp-user
Sudo chmod 750 /home/sftp-user
sftp-user
にファイルを自由に配置できるディレクトリを作成します。
Sudo mkdir /home/sftp-user/public
Sudo chown sftp-user: /home/sftp-user/public
Sudo chmod 750 /home/sftp-user/public
問題が発生した場合は、/var/log/syslog
および/var/log/auth.log
で詳細を確認してください。メッセージをデバッグするには、-vvv
オプションを指定してssh
またはsftp
を実行します。 sftp
の場合、sftp -vvv user@Host
のように、オプションはホストの前に表示する必要があります。
特定の方法で設定する必要があるディレクトリツリーにそのフォルダーのアクセス許可を追加するだけでした。
sshdの厳格な所有権/許可要件により、chrootパス内のすべてのディレクトリはルートが所有し、所有者のみが書き込み可能である必要があります。
よく似たエラーが発生していました。ディレクトリのアクセス許可を修正すると、問題が修正されました。
私はUbuntu LTS 12.04を使用していますが、大変な苦労の後、これでうまくいきました。
/etc/ssh/sshd_config
の設定
Subsystem sftp internal-sftp -f AUTH -l VERBOSE
UsePAM yes
Match group sftp
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
グループsftpを作成します。
groupadd sftp
新しいsftpグループを添付してユーザーを直接作成します。
Sudo useradd -d /ftpusers/HomeFolder -m UserName -g sftp -s /bin/false
sftpのsshで使用するアクセス許可を設定します。
chown root:root HomeFolder
chmod 755 HomeFolder
再起動サービス:
service ssh restart
新しいsftpユーザーのホームフォルダーには、ルート所有者を指定する必要があることに注意してください。
許可するステップバイステップガイドは次のとおりです。
最初に、/ etc/ssh/sshd_configファイルを編集します。
Sudo nano /etc/ssh/sshd
下にスクロールして変更します。
PasswordAuthentication yes
そしてこれを下部に追加します:
Match Group sftpusers
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
Ctrl-Xを押して終了し、保存します。
ユーザーを追加します。
Sudo useradd bob
Sudo passwd bob
グループを追加して、sshを無効にします。
Sudo groupadd sftpusers
Sudo usermod -g sftpusers bob
Sudo usermod -s /usr/bin/rssh bob
Sudo usermod -d /home/bob bob
許可を設定します:
Sudo chown root:root /home/bob/
Sudo chmod 755 /home/bob/
Sudo mkdir /home/bob/uploads
Sudo chown bob /home/bob/uploads
Sudo service sshd restart
これはすべて、rootユーザー(Amazon Linux AMIのec2-user)としてログインしている間です
また、Matchディレクティブを構成ファイルに追加する場合、一致するものに関係のないディレクティブは動作しなくなる可能性があることに注意してください。互換性のないすべてをコメントアウトするのではなく、Matchディレクティブを含むセクションを構成ファイルの最後に移動します。
さらに、おそらくchrootディレクトリとすべての親ディレクトリのパーミッションを755に設定し、所有者をroot:rootに設定する必要があります。個人的には、chrootディレクトリsshd_configをユーザーのホームディレクトリである%hに設定してから、ホームディレクトリを/var/www/examplewebsite.comなどの目的の場所に設定します。/var/www /%uなど、静的部分の後にユーザー名が続くchrootホームディレクトリを設定することを好む場合もありますが、もちろん、ユーザーのchroot dirがそのユーザー名と一致することを確認する必要があります。
接続の問題をトラブルシューティングするには、sshサービスを停止し、テストのために最初にSSHセッションまたは2つを開いてから、デバッグモードで対話形式でデーモンを起動して、接続のデバッグ情報を調べます。それらを修正する方法を。
コマンド:service ssh stop;/usr/sbin/sshd -d
完了したら、必ずsshを再起動してください!コマンド:service ssh start