mktempTahmin edilemeyen bir adla geçici bir dosya oluşturmak için yardımcı programı kullanın . POSIX tarafından standartlaştırılmamıştır, ancak Linux'un yanı sıra * BSD'de de mevcuttur.
> /tmp/predictable.$RANDOMiyi bir seçim değildir çünkü çoğunlukla tahmin edilebilirdir¹, bu da komut dosyanızı saldırganın komut dosyanızı yazma erişimine sahip olduğunuz bir dosyanın üzerine yazması veya geçici dosyaya erişmesi için kandırabileceği bir saldırıya açar. Bu, güvenli olmayan geçici bir dosya güvenlik açığıdır. mktempbu güvenlik açığı bulunmaz çünkü dosyayı güvenli bir şekilde oluşturur (sembolik bağlantılar olsa bile mevcut bir dosyanın üzerine yazmaz) ve hizmet reddinden kaçınmak için yeterince öngörülemeyen bir ad kullanır.
Bir geçici dosya oluşturmak ve onunla çalışmak yeterince iyi değilse, ile geçici bir dizin oluşturun mktemp -dve orada çalışın.
mktemp$TMPDIRdeğişken ayarlanmışsa, ayarlanmamışsa geri düşmeye de özen gösterir /tmp.
Giderek daha fazla dağıtım TMPDIRözel bir dizin olarak ayarlandı , örneğin UID'niz /run/1234/tmpnerede 1234. Bu, geçici dosyaları güvenlik açıkları riskini ortadan kaldırır, maliyetler artık kullanıcılar arasında geçici dosyaları paylaşamayacaktır (bu bazen yararlıdır, ancak çok sık değildir; /tmphala mevcut değildir, sadece mevcut değildir TMPDIR).
Yeniden üretilebilir bir dosya adına ihtiyacınız varsa, kullanıcının ana dizini altında iyi tanımlanmış bir ada sahip (rastgele bir bileşeni olmayan) bir dosya oluşturun. Modern kural XDG kullanıcı dizini belirtimidir . Dosya veri kaybına neden olmadan kaldırılabilirse XDG_CACHE_HOME, varsayılan olarak ortam değişkenini kullanın ~/.cache. Muhtemelen uygulamanızın adını taşıyan bir alt dizin oluşturmalı ve orada çalışmalısınız.
CACHE_DIR="${XDG_CACHE_HOME:-"$HOME/.cache"}"/Wildcard-scripts
[ -d "$CACHE_DIR" ] || mkdir -p -- "$CACHE_DIR"
CACHE_FILE="$CACHE_DIR/tmpfileformyscript"
¹ Sadece gelmez $RANDOMsadece 32767 olası değerleri alır, ama hatta birçok değerleri denemeden tahmin etmek kolaydır. Bash'ın rasgele sayı üreteci, PID ve ilk kullanım zamanı ile tohumlanan bir LCG'dir . Zsh's, platformun randbaşlangıç zamanına göre ekildi. ATT Ksh's, platformun randPID tarafından tohumlandığını gösteriyor. Mksh, daha karmaşık ama yine de güvenlik kalitesinde bir tohumu olmayan bir LCG'dir. Hepsi oldukça büyük bir başarı şansı olan başka bir süreçle tahmin edilebilir.
$TMPDIRve~/.cachetam da ihtiyacım olan şey bu. Biraz daha düşündükten sonra, bunun olmasını istediğim tek nedenin/tmpbölümleme olduğunu fark ettim - böylece önbellek/homebölümü dolduramadı . Ancak bu kullanım durumu için bu tam bir sorun değil, bu yüzden bir alt dizin~/.cacheihtiyaçlarıma mükemmel bir şekilde uyuyor ve güvenlik sorununu önlüyor.