ฉันได้อ่านแล้วว่าการเปลี่ยนเส้นทางเอาต์พุตไปยังไฟล์ชื่อคงที่/tmpอาจเป็นความเสี่ยงด้านความปลอดภัยเพราะหากผู้โจมตี (หรือผู้กระทำความผิด) สังเกตเห็นว่าไฟล์/tmp/tmpfileformyscript.tmpถูกสร้างขึ้นเมื่อฉันเรียกใช้สคริปต์ของฉัน (แม้ว่าเขาจะไม่สามารถเข้าถึงการอ่านของฉัน สคริปต์) ตัวอย่างเช่นเขาสามารถสร้าง symlink ln -s ~wildcard/.bashrc /tmp/tmpfileformyscript.tmpซึ่งจะทำให้ฉันทำลาย.bashrcไฟล์ของฉันเมื่อฉันเรียกใช้สคริปต์ของฉัน
ดังนั้นฉันสามารถใช้สิ่งที่ชอบfilename="tmpfile.tmp.$RANDOM" ; echo outputtext > "$filename"แทน
อย่างไรก็ตามฉันต้องการใช้ไฟล์ tmp สำหรับการแคชในบางครั้งซึ่งในกรณีนี้ฉันต้องการทราบว่า "tmpfile.tmp. *" ตรงกับทุกอย่างใน/tmpนั้นหรือไม่และใช้ไฟล์นั้นแทนการสร้างไฟล์ใหม่หรือไม่ น่าเสียดายtestและสิ่งที่เทียบเท่า[ -f filename ]ไม่สนับสนุนไฟล์ที่ทำให้กลมกลืนไปเท่าที่ฉันสามารถบอกได้
ดังนั้นคำถามของฉันคือสองเท่า:
- ฉันจะสร้าง tempfile อย่างปลอดภัยได้อย่างไร คือ
"predictablename.$RANDOM"การปฏิบัติที่ได้รับการยอมรับหรือมีที่ดีกว่า (ความปลอดภัยมากขึ้นง่ายขึ้น) วิธี? - ฉันจะเข้าถึงไฟล์และ / หรือสร้างการมีอยู่ของไฟล์ได้ในภายหลังโดยการตรวจสอบได้
predictablenameอย่างไร?
$TMPDIRและ~/.cacheเป็นสิ่งที่ฉันต้องการ หลังจากนั้นบางคนก็คิดว่าฉันรู้ว่าเหตุผลเดียวที่ฉันต้องการ/tmpคือแบ่งพาร์ติชัน - ดังนั้นแคชจึงไม่สามารถเติม/homeพาร์ติชันได้ แต่สำหรับกรณีการใช้งานนี้เป็นปัญหาที่ไม่สมบูรณ์ดังนั้นไดเรกทอรีย่อยที่ตรง~/.cacheกับความต้องการของฉันอย่างสมบูรณ์แบบและหลีกเลี่ยงปัญหาด้านความปลอดภัย