システム全体に影響を与えるためにTomcatでmount --bindを取得する方法は?

システム全体に影響を与えるためにTomcatでmount --bindを取得する方法は?

ファイルを含むフォルダがあります。

/path/to/data/one/it_works.txt

空のフォルダがあります。

/path/to/user/bob

TomcatのWebアプリケーションで実行する必要があるスクリプトがあります。これは次のとおりです。

#!/bin/sh

Source="$1"
Target="$2"

/bin/mkdir "$Target"
/bin/touch "$Target/it_failed.txt"
sudo /bin/mount --bind "$Source" "$Target" || exit 1
ls "$Target"
exit 1

(これはexit 1Webアプリケーションによって記録された出力を取得するためのものです。動作したら削除します。)

Sudoが正しく設定されているようです。

実行すると、期待どおりに印刷されますsudo -u tomcat ./the-script.sh /path/to/data/one /path/to/user/bob/oneit_works.txtそれからと、私もcd /path/to/user/bob/one見つけるでしょう。 (その後、umountとrmdir $ Targetを実行します。)Webアプリケーションでスクリプトを実行すると、ログも記録されます(予想)。しかし、もし私が、私は探しています。他のプロセスでも同様です(私の場合はWebDAV; WebDAVがシンボリックリンクをサポートしていないため、シンボリックリンクを使用できない理由です)。lsit_works.txtit_works.txtcd /path/to/user/bob/onelsit_failed.txt

マウントバインディングは、それを実行するプロセスにのみ適用されますが、sudoシステムの残りの部分には適用されないようです。

最初はサンドボックスのせいでこんな現象が起こると思いましたが、systemd設定をしてみるとProtectSystem=falseずっと同じ現象が発生しますね…。

Tomcatプロセスの範囲外でマウントバインディングを適用するには?

(DistroはDebian 10.10です)

ベストアンサー1

行動以前はが原因で発生しましたsystemdunshare(1)環境ならどのコマンドではInaccessiblePathsPrivateMounts、、、、、、またはファイルで有効にPrivateTmpなります。PrivateDevicesProtectSystemProtectHomeReadOnlyPathsReadWritePathstomcat9.service

私はそれらの1つをコメントアウトしてこの問題を取り除きました。現在のセキュリティセクションの外観は次のとおりです[Service]

# Security
User=tomcat
Group=tomcat
# PrivateTmp=yes
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=false
CacheDirectory=tomcat9
CacheDirectoryMode=750
# ProtectSystem=strict
# ReadWritePaths=/etc/tomcat9/Catalina/
# ReadWritePaths=/var/lib/tomcat9/webapps/
# ReadWritePaths=/var/log/tomcat9/
# ReadWritePaths=/path/to/data/
# ReadWritePaths=/path/to/user/

NoNewPrivileges=false成功のために必要ですsudo。)

おすすめ記事