Creating temporary files in bash

后端 未结 5 1568
心在旅途
心在旅途 2020-12-02 08:39

Are there objectively better ways to create temporary files in bash scripts?

I normally just name them whatever comes to my mind, such as tempfile-123, since it will

5条回答
  •  旧巷少年郎
    2020-12-02 09:18

    Is there any advantage in creating a temporary file in a more careful way

    The temporary files are usually created in the temporary directory (such as /tmp) where all other users and processes has read and write access (any other script can create the new files there). Therefore the script should be careful about creating the files such as using with the right permissions (e.g. read only for the owner, see: help umask) and filename should be be not easily guessed (ideally random). Otherwise if the filenames aren't unique, it can create conflict with the same script ran multiple times (e.g. race condition) or some attacker could either hijack some sensitive information (e.g. when permissions are too open and filename is easy to guess) or create/replacing the file with their own version of the code (like replacing the commands or SQL queries depending on what is being stored).


    You could use the following approach to create the temporary directory:

    TMPDIR=".${0##*/}-$$" && mkdir -v "$TMPDIR"
    

    or temporary file:

    TMPFILE=".${0##*/}-$$" && touch "$TMPFILE"
    

    However it is still predictable and not considered safe.

    As per man mktemp, we can read:

    Traditionally, many shell scripts take the name of the program with the pid as a suffix and use that as a temporary file name. This kind of naming scheme is predictable and the race condition it creates is easy for an attacker to win.

    So to be safe, it is recommended to use mktemp command to create unique temporary file or directory (-d).

提交回复
热议问题