ファイルを含むフォルダがあります。
/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 1
Webアプリケーションによって記録された出力を取得するためのものです。動作したら削除します。)
Sudoが正しく設定されているようです。
実行すると、期待どおりに印刷されますsudo -u tomcat ./the-script.sh /path/to/data/one /path/to/user/bob/one
。it_works.txt
それからと、私もcd /path/to/user/bob/one
見つけるでしょう。 (その後、umountとrmdir $ Targetを実行します。)Webアプリケーションでスクリプトを実行すると、ログも記録されます(予想)。しかし、もし私が、私は探しています。他のプロセスでも同様です(私の場合はWebDAV; WebDAVがシンボリックリンクをサポートしていないため、シンボリックリンクを使用できない理由です)。ls
it_works.txt
it_works.txt
cd /path/to/user/bob/one
ls
it_failed.txt
マウントバインディングは、それを実行するプロセスにのみ適用されますが、sudo
システムの残りの部分には適用されないようです。
最初はサンドボックスのせいでこんな現象が起こると思いましたが、systemd
設定をしてみるとProtectSystem=false
ずっと同じ現象が発生しますね…。
Tomcatプロセスの範囲外でマウントバインディングを適用するには?
(DistroはDebian 10.10です)
ベストアンサー1
行動以前はが原因で発生しましたsystemd
。unshare
(1)環境ならどのコマンドではInaccessiblePaths
、PrivateMounts
、、、、、、またはファイルで有効にPrivateTmp
なります。PrivateDevices
ProtectSystem
ProtectHome
ReadOnlyPaths
ReadWritePaths
tomcat9.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
。)