web-dev-qa-db-ja.com

ユーザーがホームディレクトリにchrootされた状態でSFTPサーバーをセットアップする方法は?

私は、複数のユーザーがホームディレクトリにchrootするSFTPサーバーをセットアップしようとしています。 このガイドArchive.org link )のアドバイスに従い、ユーザーのディレクトリで次のコマンドを実行しました

chown root:root /home/user/
chmod 755 /home/user/

すべてのユーザーのホームディレクトリにpublicという名前の追加フォルダーがあります。このフォルダーは、ユーザーが所有し、必要に応じてディレクトリを作成し、ファイルをアップロードおよび削除できるようにします。 (これは前に述べたガイドでアドバイスされました)

sftp -P 435 user@localhostを実行すると、次のエラーが表示されます。

書き込みに失敗しました:パイプが壊れています
パケットを読み取れませんでした:ピアによって接続がリセットされました

ここからどのように進めますか?究極のアイデアは、他のマシンの各ユーザーがFileZillaを使用してchrootされたホームディレクトリにログインし、ディレクトリとファイルをアップロードできるようにすることです。これらはすべてSFTPで(より安全だから)

23
Nitin Venkatesh

この記事では、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はAllowUsersAllowGroupsを結合できないため(ログインは両方のルールを満たす必要があります)、追加のグループ、たとえば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のように、オプションはホストの前に表示する必要があります。

25
Lekensteyn

特定の方法で設定する必要があるディレクトリツリーにそのフォルダーのアクセス許可を追加するだけでした。

sshdの厳格な所有権/許可要件により、chrootパス内のすべてのディレクトリはルートが所有し、所有者のみが書き込み可能である必要があります。

ソース

よく似たエラーが発生していました。ディレクトリのアクセス許可を修正すると、問題が修正されました。

12
Nathan Jones

私は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
  1. グループsftpを作成します。

    groupadd sftp

  2. 新しいsftpグループを添付してユーザーを直接作成します。

    Sudo useradd -d /ftpusers/HomeFolder -m UserName -g sftp -s /bin/false

  3. sftpのsshで使用するアクセス許可を設定します。

    chown root:root HomeFolder

    chmod 755 HomeFolder

  4. 再起動サービス:

    service ssh restart

新しいsftpユーザーのホームフォルダーには、ルート所有者を指定する必要があることに注意してください。

9
Aten

許可するステップバイステップガイドは次のとおりです。

  1. ユーザーbobの/ home/bob/uploadsへのSFTPアクセス
  2. ボブをSSHからロックアウトする
  3. キーではなくユーザー名/パスワードを使用します。

最初に、/ 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)としてログインしている間です

3
Rob Mulder

また、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

0
RedScourge