web-dev-qa-db-ja.com

なぜmktempが必要なのですか?

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

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

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

45
Shehbaz Jaffer

mktempは、名前をランダム化します。セキュリティの観点から非常に重要です。

次のようなことをすると想像してください。

echo something > /tmp/temporary-file

ルート実行スクリプトで。

そして、あなたのスクリプトを読んだ人が

ln -s /etc/passwd /tmp/temporary-file

前。

mktempコマンドは、この状況で役立ちます。

TEMP=$(mktemp /tmp/temporary-file.XXXXXXXX)
echo something > ${TEMP}

今、このln /etc/passwd攻撃は機能しません。

52
Igor Chubin

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

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

23
paulsm4

わかりました。実際、マニュアルページに明確に記載されています。

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

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

ファイルまたはディレクトリを安全に作成するため、他のユーザーはアクセスできません。そのため、アクセス許可は600です。

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

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

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

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

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

6
linuxexplore

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

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

少なくともbashシェルでは、次のようなことができます。

dirpath="/tmp/dir1-$$/dir2-$$"  
mkdir -p $dirpath  
chmod -R 0700 /tmp/dir1-$$  

例えば。

0
leed25d