私は定期的にmysql(実際にはmariaDB)データベースから簡単なレポートを実行します。
MariaDB [acts]> SELECT resolution, title FROM acts ORDER BY resolution INTO OUTFILE '/tmp/acts-titles.txt';
最近、systemdバージョン218-2を使用してDBサーバーを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管理者はシステムへのrootアクセスも必要になりますが、これは必ずしも必要なことではありません。
Systemdがファイルを取得している理由を誰かが説明できますか?この動作を回避する方法はありますか?
/lib/systemd/system/mariadb.serviceでsecuretmpオプションを編集すると、この動作を変更できます。
systemctl stop mariadb
次に、PrivateTmpをfalseに変更しながら、/ lib/systemd/system /mariadb.serviceを編集します。
# 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から分離されます。
あなたが見つけることができる良い視点 ここ 。