mktemp
一時ファイルの機能と意味がわかりません。
saytouch xyz
と( xxxが追加されたファイルを作成し、600のアクセス許可を持つmktemp xyz
という事実を除いて)の違いは何ですか?mktemp
どうか明らかにしてください。
mktemp
一時ファイルの機能と意味がわかりません。
saytouch xyz
と( xxxが追加されたファイルを作成し、600のアクセス許可を持つmktemp xyz
という事実を除いて)の違いは何ですか?mktemp
どうか明らかにしてください。
mktemp
名前をランダム化します。これはセキュリティの観点から非常に重要です。
次のようなことをすると想像してみてください。
echo something > /tmp/temporary-file
ルート実行スクリプトで。
そして誰か(あなたのスクリプトを読んだ人)は
ln -s /etc/passwd /tmp/temporary-file
前。
これにより/etc/passwd
上書きされ、システムから始まりシステムで終わるさまざまな不快なものがハッキングされる可能性があります(入力something
を慎重に作成できる場合)。
このmktemp
コマンドは、この状況で役立ちます。
TEMP=$(mktemp /tmp/temporary-file.XXXXXXXX)
echo something > ${TEMP}
これで、このln /etc/passwd
攻撃は機能しなくなります。
mktempの歴史についての簡単な洞察:このmktemp
コマンドはOpenBSDの人々によって発明され、1997年にOpenBSD2.1で最初に登場しました。彼らの目標はシェルスクリプトのセキュリティを向上させることでした。以前は、$$
一時ファイル名に追加するのが一般的でしたが、これは絶対に安全ではありませんでした。現在、すべてのUNIX / Linuxシステムにはいずれかmktemp
またはその代替手段があり、標準のデファクトになっています。面白いことに、mktemp
C関数は安全でないため非推奨になりました。
多くの場合、「スクラッチパッドファイル」(またはディレクトリ)が必要です。さらに、そのようなファイルを同時に複数必要とする場合があり、競合が発生しないように、名前の付け方をわざわざ考えたくない場合があります。
「mktemp」は法案に適合します:)
もう 1 つの追加の理由: すべてのシステム/tmp
が一時ディレクトリとして使用するわけではありません。たとえば、https://termux.com/は技術的な理由 (Android 内のプロセスとして実行される) により、tmp ディレクトリとは異なる長いパスを持ちます。
を使用して一時ファイルまたはディレクトリを作成するスクリプトはmktemp
移植可能であり、そのような特殊な環境でも機能します。
実際、manページに明確に書かれています。
mktemp - 一時ファイルまたはディレクトリを作成します。
一時ファイルまたはディレクトリを安全に作成し、その名前を出力します。
ファイルまたはディレクトリを安全に作成することは、他のユーザーがアクセスできないことを意味します。そのため、その権限は600です
touch - ファイルのタイムスタンプを変更する
既に作成されている場合はファイルのタイムスタンプを変更し、存在しない場合はファイルを作成します。ただし、ファイルのアクセス許可はデフォルトで 644 のままです。
詳細については、次の man ページを確認してください。