Tôi đã đọc rằng việc chuyển hướng đầu ra sang một tệp tên cố định /tmp
có thể là một rủi ro bảo mật, bởi vì nếu kẻ tấn công (hoặc kẻ xấu) thông báo rằng một tệp /tmp/tmpfileformyscript.tmp
được tạo khi tôi chạy tập lệnh của mình (ngay cả khi anh ta không đọc được quyền truy cập vào kịch bản), ví dụ anh ta có thể tạo một liên kết tượng trưng ln -s ~wildcard/.bashrc /tmp/tmpfileformyscript.tmp
khiến tôi phá hủy .bashrc
tệp của tôi khi tôi chạy tập lệnh của mình.
Vì vậy, thay vào đó tôi có thể sử dụng một cái gì đó như filename="tmpfile.tmp.$RANDOM" ; echo outputtext > "$filename"
.
Tuy nhiên, đôi khi tôi muốn sử dụng tệp tmp để lưu vào bộ đệm, trong trường hợp đó tôi muốn biết liệu "tmpfile.tmp. *" Có khớp với bất cứ điều gì không /tmp
và nếu có, hãy sử dụng tệp đó thay vì tạo tệp mới. Thật không may test
và tương đương [ -f filename ]
không hỗ trợ tập tin toàn cầu như tôi có thể nói.
Vì vậy, câu hỏi của tôi là gấp đôi:
- Làm thế nào tôi có thể tạo tempfile một cách an toàn? Là
"predictablename.$RANDOM"
một thực tiễn có thể chấp nhận hoặc có một cách tốt hơn (an toàn hơn, dễ dàng hơn)? - Làm thế nào tôi có thể dễ dàng truy cập tệp và / hoặc thiết lập sự tồn tại của nó sau này bằng cách kiểm tra
predictablename
?
$TMPDIR
và~/.cache
chính xác là những gì tôi cần. Sau khi suy nghĩ thêm, tôi nhận ra rằng lý do duy nhất tôi muốn nó/tmp
là phân vùng vì vậy bộ đệm không thể lấp đầy/home
phân vùng. Nhưng đối với trường hợp sử dụng này thực sự không phải là vấn đề hoàn chỉnh, vì vậy một thư mục con~/.cache
phù hợp với nhu cầu của tôi một cách hoàn hảo và tránh được vấn đề bảo mật.