web-gelistirme-sc.com

Neden mktemp'ye ihtiyacımız var?

mktemp işlevini ve geçici bir dosyanın ne anlama geldiğini anlamıyorum. 

Say touch xyz ve mktemp xyz arasındaki fark nedir (mktemp dosyasının buna eklenmiş xxx dosyasıyla birlikte bir dosya oluşturacağı ve 600 izne sahip olacağı gerçeği dışında)?

Lütfen açıkla.

39
Shehbaz Jaffer

mktemp ismini randomize eder Güvenlik açısından çok önemlidir.

Sadece şöyle bir şey yaptığınızı hayal edin:

echo something > /tmp/temporary-file

kök çalışan betiğinizde.

Ve birileri (betiğinizi okuyan)

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

önce.

mktemp komutu bu durumda size yardımcı olabilir:

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

Şimdi bu ln /etc/passwd saldırısı işe yaramayacak.

48
Igor Chubin

Genellikle bir "scratchpad dosyası" (veya dizin) istersiniz. Dahası, aynı anda bu tür birkaç dosyaya ihtiyacınız olabilir ve bunların nasıl isimlendirileceğini bulmaktan rahatsız olmazsınız, böylece herhangi bir çatışma olmaz.

"mktemp" faturaya uyar :)

19
paulsm4

Kendiniz cevapladınız: mktemp() benzersiz bir isim garanti eder.

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

Mktemp () işlevi, .__ 'dan benzersiz bir geçici dosya adı oluşturur. şablonu. Şablonun son altı karakteri XXXXXX ve bunlar .__ olmalıdır. dosya adını benzersiz yapan bir dize ile değiştirilir.

Ancak, @ MarcB'ın yorumu (ve man sayfası) işaret ettiği gibi, bunu kullanmamalısınız: Bunun yerine mkstemp () kullanmalısınız.

9
Roddy

Tamam, aslında man sayfalarında açıkça yazılmıştır.

mktemp - geçici bir dosya veya dizin oluşturun.

Geçici bir dosya veya dizin oluşturun, güvenle ve adını yazdırın.

Bir dosya veya dizini güvenli bir şekilde oluşturur, başka hiçbir kullanıcının erişemeyeceği anlamına gelir, bu nedenle izninin 600 olması

dokunma - dosya zaman damgalarını değiştir

Önceden oluşturulmuşsa dosyanın zaman damgalarını değiştirir ve yoksa bir dosya oluşturur. Ancak, dosya izni hala varsayılan olarak 644.

Daha fazla detay için aşağıdaki man sayfalarını kontrol ediniz:

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

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

7
linuxexplore

Ek bir neden daha: Tüm sistemler geçici dizin olarak /tmp kullanmıyor . Örneğin https://termux.com/ / teknik nedenlerden dolayı (Android içinde işlem yapıyor) tmp dizini.

mktemp kullanarak geçici dosyalar veya dizinler oluşturan komut dosyaları taşınabilir olacak ve aynı zamanda özel ortamlarda da çalışacaktır.

2

En azından bash Shell'de şöyle bir şey yapabilirsiniz:

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

Örneğin.

0
leed25d