web-dev-qa-db-ja.com

あるサーバーから別のサーバーへのSSHFSファイル

サーバー間でファイルを転送する最も安全な方法を見つけようとしています。

私は次のアーキテクチャを持っています:

Architecture

現在、ディレクトリをマウントするためにメインユーザーsalamisを使用しています。

元のディレクトリ内のファイルは、PHPファイルマネージャーelfinderを介して作成されます。

残念ながら、PHPを介してマウントされたディレクトリからmoverename、またはdeleteのファイルを作成することはできません。許可が拒否されました。

1)www-dataの代わりにsalamisを使用してファイルシステムをマウントしたためですか?

2)ファイルシステムをServer 2としてwww-dataとしてマウントするのは安全ですか?はいの場合、どうすればそれを達成できますか? www-dataにはパスワードがなく、su -m www-dataを使用してログインできません。 authentication failureを取得します。

3)より良いアーキテクチャを考えられますか?

6
glarkou

SSHFSは Fuse ファイルシステムです。これらは、ファイルシステムをマウントするユーザーとして実行されるユーザーランドプロセスによって管理されます。実行するsshfsプロセスは、ファイルシステムドライバーとしても機能します。デフォルトでは、ほとんどのFuseファイルシステムでは、マウントするユーザーのみが内部のファイルにアクセスできます。

Sshfsを介してファイルにアクセスするには、次の3つが必要です。

  1. Server1でsshを介して認証されるユーザーは、ファイルにアクセスできる必要があります。
  2. Server2のsshfsファイルシステムにアクセスするユーザーには、必要なアクセス許可が必要です。
  3. Server2のsshfsファイルシステムにアクセスしようとするユーザーは、そのファイルシステムへのアクセスを許可されている必要があります。

上で書いたように、マウントするユーザーのみがその最後の許可を持っています。 sshfsコマンドラインに-o allow_userを追加することでこれを緩和できますが、他の2つの問題は解決しません。 -o allow_userは、/etc/Fuse.confuser_allow_userが含まれている場合、またはsshfsをルートとして実行している場合にのみ有効であることに注意してください。

server2で、www-dataユーザー(SSH秘密鍵へのアクセス権を付与する必要があるユーザー)としてsshfsを実行するか、allow_userを有効にしてローカルwww-data必要なファイルにアクセスできます。それを行うにはいくつかの方法があります:uidオプションを使用するか、-o default_permissionsを渡すか、-o umask 770,gid=www-dataを渡します。 allow_userを有効にする場合、www-dataが必要以上のファイルにアクセスすることを許可しないようにし、他のユーザーがすべきことを表示または変更することを許可しないようにしてください。 't。 sshfswww-dataとして実行すると、単純であるという利点があります。誤って寛容になりすぎる可能性がはるかに高くなります。

問題#1の場合、www-dataserver1アカウントにsshするか、これらのファイルへのアクセスに使用するアカウントを許可する必要があります。 www-dataなどのシステムアカウントへのリモートログインを許可しないと、監査が不十分になります(実際にアカウントを使用したユーザーがわからないため)。ただし、それは問題外ではなく、設定が多少簡単です。 www-dataアカウントへのリモートログインを許可したくない場合は、www-dataグループにsalamis¹を追加し、server1上のファイルシステムがaclオプションでマウントされていることを確認してください(追加必要に応じて/etc/fstabの関連エントリに追加)、 ACLwww-dataのファイルに追加します。

setfacl -d -m group:www-data:rwx -R /path/to/www-root
setfacl -m group:www-data:rwx -R /path/to/www-root

¹ server1のアカウントの場合、salamisserver1のユーザーであるか、server2のユーザーであるか、またはその両方であるかを質問から理解できませんでした。

2
Gilles

1)はい、Gillesが答えたように、使用するログインIDは作成されたファイルのデフォルトの所有者です。これはほとんどのプロトコルに当てはまります。

2)www-dataユーザーのパスワードは正しくありません。ただし、コマンドssh-copyを使用して、www-dataに一時的なパスワードを指定し、サラミス証明書をwww-dataにコピーできます。これが完了すると、サラミはパスワードを入力せずにログインしてwww-dataとしてマウントできます。 (ssh-keygenで作成された証明書が必要です。)

3)別の可能な解決策は、2つのサーバー間でファイルをrsyncすることです。 Rsyncはssh/sftp/sshfsと同じ安全なインフラストラクチャを使用します。2で行ったようにssh-copyを使用できます。rsyncを使用すると、www-dataがサラミからファイルをフェッチできます。 ssh-copyを使用すると、同期をスクリプト化する機会が得られます。ほとんどの場合、/ etc/cron。[dayly | hourly]の1行で十分です。 Rsyncは堅牢です。salamis-serverに問題があり、アプリケーションが同期した最後のファイルで引き続き機能する場合、ネットワークによってアプリケーションの速度は低下しませんが、salamisのファイルの変更には遅延があります。 -ディレクトリおよびサーバー。また、bzrなどのVCSの使用を検討し、リポジトリからファイルを取得することもできます。これにより、ソースコードの優れたリビジョン管理が可能になります。

0