web-dev-qa-db-ja.com

Apache2内からencfsを使用する場合、/ etc / mtabにマウントポイントがありません

Encfs暗号化フォルダーをリモートでマウントできるWebページを作成しました。このフォルダーには、WebDAVからアクセスできます。これは基本的に、マウント/アンマウントボタンが付いた単なるパスワードフォームであり、フォームを介して提供されたパスワードを使用して、事前定義されたencfs暗号化ドライブをマウント/アンマウントしようとします。基本的にインターネットでアクセス可能なラッパー

encfs --stdinpass /encfs/drive/encrypted/ /var/www/unencrypted

暗号化されたドライブをマウント/マウント解除したり、WebDAVを介して暗号化されていないデータを表示/読み取りしたりできるため、これは意図したとおりに機能します。

しかし、何か奇妙なことが起こっています:フォルダーの暗号化されていないビューには、WebDAV経由でのみアクセスできます。

Sudo -u www-data ls -la/var/wwwを実行した場合(www-dataはWebサーバーを実行しているユーザーであるため、ユーザーのマウントも行いますドライブ、私はこれをhtopで確認しました)、または他のユーザーとして、マウントポイント(上記の例では/ var/www/unencrypted)は、通常のencfsフォルダーとは異なり、通常のフォルダーとして表示されます。通常は次のようになります。

drwxr-xr-x  5 www-data www-data  4096 Feb  1 02:25 .
drwxr-xr-x 15 root     root      4096 Jan 31 11:46 ..
d?????????  ? ?        ?            ?            ? unencrypted

しかし実際には次のようになります。

drwxr-xr-x  5 www-data www-data  4096 Feb  1 02:25 .
drwxr-xr-x 15 root     root      4096 Jan 31 11:46 ..
drwxr-xr-x  2 www-data www-data  4096 Jan 31 21:47 unencrypted

通常のフォルダーと同じです(WebDAV経由でアクセスすると、同じフォルダーにデータが含まれますが、空であると報告されます)。

また、/ etc/mtabには、encfsドライブがマウントされたことを示すエントリはありません。 htopに示すように、WebDAV経由でアクセスでき、ecnfsプロセスが明確に実行されているため、実際には確実にマウントされていますが、すべての目的と目的で、ドライブがマウントされていないように見えます。

これはどのように発生し、これを修正する方法は?

PS:私が走ったら

Sudo -u www-data bash -c "echo $(cat /tmp/passwort_file) | encfs --stdinpass /encfs/drive/encrypted/ /var/www/unencrypted"

ターミナルからは、そのような動作はありません。このフォルダーには引き続きWebDAV経由でアクセスできますが、この場合は/ etc/mtabにも正しく表示され、ls -laを使用するとencfsドライブとしても表示されます。 -)。

2
luksen

これはDebianLinuxまたはUbuntuであり、systemdがサービスマネージャーであると想定しています。

Linuxは、ファイルシステムのさまざまなビューをさまざまなプロセスに提供する「マウント名前空間」をサポートしています(chrootのようですが、はるかに柔軟で頭痛の種になります)。 Systemdでは、この機能を使用して、セキュリティの問題や攻撃に対してシステムを強化できます。たとえば、特定のサービスでは、/ homeが空であると見なされたり/ etcが読み取り専用であると見なされたりする場合があります。

ほとんどのディストリビューションは、Apache2.serviceでこれらのセキュリティ設定を使用します– systemctl cat Apache2を実行すると、独自のプライベート/tmpディレクトリを持つように構成されていることがわかります。

[Service]
...
PrivateTmp=true

マウント名前空間の副作用は、それらがややグローバルであるということです。systemdが/を「共有解除」すると、その下にApacheのみのマウントを作成できるようになり、マウントが1つだけ必要な場合でも、同じ効果が適用されます。 all Apacheサービスによって作成されたマウント。 (サービスの場合、これはある程度意図的なものです。Webサーバーがファイルシステムをマウントする必要があるのはなぜですか?最小特権の原則です。)

したがって、findmntまたはcat /proc/self/mountsを実行すると、ルート名前空間にのみマウントが表示されます。ただし、nsenter --mount --target <Apache_PID> findmntまたはcat /proc/<Apache_PID>/mountsを実行すると、ルート名前空間から継承されたものと、Apacheプロセス専用のものの両方が表示されます。

この保護を無効にするには、systemctl edit --full Apache2を実行し、Private*ReadOnly*、またはInaccessible*で始まるすべての設定を削除します。

1
user1686