62

mktemp一時ファイルの機能と意味がわかりません。

saytouch xyzと( xxxが追加されたファイルを作成し、600のアクセス許可を持つmktemp xyzという事実を除いて)の違いは何ですか?mktemp

どうか明らかにしてください。

4

5 に答える 5

68

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またはその代替手段があり、標準のデファクトになっています。面白いことに、mktempC関数は安全でないため非推奨になりました。

于 2012-07-24T18:14:09.317 に答える
39

多くの場合、「スクラッチパッドファイル」(またはディレクトリ)が必要です。さらに、そのようなファイルを同時に複数必要とする場合があり、競合が発生しないように、名前の付け方をわざわざ考えたくない場合があります。

「mktemp」は法案に適合します:)

于 2012-07-24T18:13:37.373 に答える
9

もう 1 つの追加の理由: すべてのシステム/tmpが一時ディレクトリとして使用するわけではありません。たとえば、https://termux.com/は技術的な理由 (Android 内のプロセスとして実行される) により、tmp ディレクトリとは異なる長いパスを持ちます。

を使用して一時ファイルまたはディレクトリを作成するスクリプトはmktemp移植可能であり、そのような特殊な環境でも機能します。

于 2016-11-27T12:03:34.777 に答える
8

実際、manページに明確に書かれています。

mktemp - 一時ファイルまたはディレクトリを作成します。

一時ファイルまたはディレクトリを安全に作成し、その名前を出力します。

ファイルまたはディレクトリを安全に作成することは、他のユーザーがアクセスできないことを意味します。そのため、その権限は600です

touch - ファイルのタイムスタンプを変更する

既に作成されている場合はファイルのタイムスタンプを変更し、存在しない場合はファイルを作成します。ただし、ファイルのアクセス許可はデフォルトで 644 のままです。

詳細については、次の man ページを確認してください。

http://linux.die.net/man/1/mktemp

http://linux.die.net/man/1/touch

于 2012-07-24T18:28:49.947 に答える