systemd ベースのシステムの mysql で INTO OUTFILE を保存すると、出力ファイルが systemd によってキャプチャされます。なぜですか?

systemd ベースのシステムの mysql で INTO OUTFILE を保存すると、出力ファイルが systemd によってキャプチャされます。なぜですか?

私は定期的にmysql(実際にはmariaDB)データベースから簡単なレポートを実行します。

MariaDB [acts]> SELECT resolution, title FROM acts ORDER BY resolution INTO OUTFILE '/tmp/acts-titles.txt';

最近私はsystemdバージョン218-2を使用してデータベースサーバーをLinux 3.19ベースのシステムにアップグレードしましたが、出力ファイルが私が期待したように/ tmpディレクトリに直接移動せず、代わりに/ tmpのプライベートsystemdフォルダに移動したことに驚きましたです。 :

[root@www tmp]# pwd
/tmp/systemd-private-3589befe3ce34ca1a67ed5a83bc77b8b-mysqld.service-ylvzCn/tmp
[root@www tmp]# ls
acts-titles.txt
[root@www tmp]# ls -ld /tmp/systemd-private-3589befe3ce34ca1a67ed5a83bc77b8b-mysqld.service-ylvzCn/
drwx------ 3 root root 60 Mar 23 04:32 /tmp/systemd-private-3589befe3ce34ca1a67ed5a83bc77b8b-mysqld.service-ylvzCn/

これは悲劇ではありませんが、rootユーザーだけがこのディレクトリにアクセスできるため、不便です。したがって、mysql管理者もシステムへのルートアクセス権を持っている必要がありますが、これは必ずしも望ましくありません。

systemdがこのファイルをインポートする理由を説明できる人はいますか?この動作を回避する方法はありますか?

答え1

/lib/systemd/system/mariadb.service で secure tmp オプションを編集すると、この動作を変更できます。

systemctl stop mariadb

次に、/lib/systemd/system/mariadb.service を編集し、PrivateTmp を false に変更します。

# Place temp files in a secure directory, not /tmp
PrivateTmp=false  # default is true

ついに:

systemctl daemon-reload
systemctl start mariadb

説明で述べたように、より良い解決策は、mariadb.serviceファイルを変更するのではなく、別のディレクトリを選択し、mariadbを実行しているユーザーがそのディレクトリにアクセスすることを許可し、OUTFILEがそのディレクトリを指すようにすることです。 。

PrivateTmpオプションを有効にすると、サービスが表示される/ tmpディレクトリは個人用であり、ホストシステム/ tmpから隔離されます。
良いアイデアを見つけることができます。ここ

関連情報