私は定期的に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から隔離されます。
良いアイデアを見つけることができます。ここ。