mktemp
一時ファイルは適当にmkdir /tmp/hoge.tmpで作るよりもmktempを使った方がよい
mktemp
既存のファイルを上書きしない
競合しない
…とあるが、実際には推測可能なので競合しづらい、くらい?
シンボリックリンク攻撃を回避
一時ファイル置き場にむやみに/tmpを使わない
誰でも参照できる
ファイルのモードは必ず0700になる
ファイル内容が漏洩しない
ヘルプを見てみる
code:console
$ mktemp --help
Create a temporary file or directory, safely,
略
Files are created u+rw, and directories u+rwx, minus umask restrictions.
/gosyujin-books/0081: Software-Design-2018年7月号 00.pdf#61dd8e3d2c53d800008aa7f4
早くなるらしい
なぜ早い?(2020/07/31)
一時ファイルシステム(tmpfs)
ローカルメモリ上に作成
ストレージを使わない
I/Oが多い処理で使うと効果的
RAMディスクと似ている(ではない)
容量をあらかじめ確保するのではなく、使用した分で変化する
mktempよりmkstempを使うべき?
セキュリティホールが生まれてしまう?
シンボリックリンク攻撃の話ではないよな
/gosyujin-books/0164: Linuxプログラミングインターフェース.pdf#61d927972c53d80000937f2d
Man page of MKTEMP
Man page of MKSTEMP
決してこの関数は使用しないこと。「バグ」を参照。
mktemp() を決して使わないこと。4.3BSD 系の実装や XXXXXX を プロセス ID と1文字により置き換える方式ではせいぜい26の名前を返す ことができるにすぎない。 この名前は簡単に推測できることや、その名前がすでに存在しているかどうか テストして、そのファイルをオープンする間に競合がある事から、 mktemp() を使うのは毎回セキュリティリスクをおかすことになる。 この競合は mkstemp(3) や mkdtemp(3) を使うことで避けられる。
Man page of MKTEMP
これのことかな
参考
IPA ISEC セキュア・プログラミング講座:C/C++言語編 第7章 データ漏えい対策:テンポラリファイル(Unix の一時ファイル)