1.5週間前のDebian6 VPSでSSHを頻繁に使用した後、SFTPを介してファイルのアップロードを開始したいと思いました。私はすでにそれを以前に試しましたが、rootアカウントを使用しましたが、セキュリティの変更により、SSHではこれを行うことができなくなりました。
だから私は別のユーザーを作りました、彼をsftpuserと呼びましょう、彼はグループに属していますsftp。彼はsshd_configに特別なエントリを取得しました。
Match Group sftp
ChrootDirectory /var/www
ForceCommand internal-sftp
PasswordAuthentication yes
したがって、彼は幸運であり、接続するためにキーファイルを必要としませんが、彼は/ var/wwwに制限されています。まあ、それはうまくいきます、私は完全にログインしてそこにあるすべてのファイルを見ることができます。しかし、それらはrootユーザーが所有しているため、何もアップロードできず、非常に役に立たなくなります。
ファイルパーミッションの荒野を旅する中で、8進数の組み合わせと奇妙な回避策をたくさん読みましたが、完全に適合するものは何もありません。私が正しく理解している場合、chmodは特定のユーザーがディレクトリを書き込み可能にするためにのみ使用できます(この場合、root)。 、group(推測、rootこの場合は\ o /)など。 PHP-FPMとnginxの両方を壊さずにこの問題を修正しなければならなかった「最善の」アイデアは、sftpuserをrootグループ。悪い考えだと思っていたとしても、sftpuserのように、大混乱を引き起こすことはないはずです。 chrootされ、シェルを開くことができません。しかし、それでもうまくいきませんでしたsftpuserを使用しても、そこにファイルを書き込むことができませんでしたrootグループ。
とは言っても、自分の目的に合った適切なものを見つけるのに本当に役立つでしょう。私がここで書いたようなテキストの壁を期待するのではなく、正しい方向に向けるためのちょっとしたヒントです。
私がしたことは、rootが所有する必要があり、次の権限と所有権を持つsftpuserのホームボリューム(/ sftphomeと呼びましょう)を作成することでした。
/ sftphome
drwxr-xr-x root root
次に、sftpuserのsftpホームディレクトリもrootが所有する必要があります。
/ sftphome/sftpuser
drwxr-xr-x root root
次に、sftpuserがアップロードおよびダウンロードできるディレクトリを作成します。
/ sftphome/sftpuser/upload
drwx------ sftpuser sftpuser
もちろん/ sftphomeが正しく設定されていることを確認してください:
ChrootDirectory /sftphome
この結果、sftpuserがsftpサーバーにログインすると、このユーザーは/ sftphome/sftpuserに転送されます。ファイルをアップロードおよびダウンロードできるようにするには、アップロードにcdする必要があります。