Tôi đang viết một bash
kịch bản và cần hỏi người dùng mật khẩu của mình và chuyển nó đến openssl
. Mặc dù openssl
có thể tự đọc mật khẩu, tôi cần hai lần chạy chương trình và không muốn hỏi người dùng hai lần. Đây là kịch bản:
cp file{,.old}
read -sp 'Enter password. ' PASS; echo
export PASS
# decode | edit | encode
openssl enc -d -aes-256-cbc -k "$PASS" -in file.old | \
sed ... | openssl enc -e -aes-256-cbc -k "$PASS" -out file
unset PASS
Điều này không an toàn vì mật khẩu có sẵn dễ dàng bằng cách nhìn vào dòng lệnh; ai đó có thể đọc nó bằng cách sử dụng ps
, ví dụ.
openssl
có thể đọc mật khẩu từ một biến môi trường, vì vậy tôi có thể thay thế -k "$PASS"
bằng -pass env:PASS
, nhưng nó vẫn không an toàn; các biến môi trường của bất kỳ quá trình có thể được đọc tự do (một lần nữa, ps
có thể làm điều đó).
Vì vậy, làm thế nào tôi có thể chuyển mật khẩu một cách an toàn cho hai openssl
trường hợp?
ps
đọc môi trường của một tiến trình từ /proc/<pid>/environ
, nhưng tệp này có 0600
quyền, vì vậy chỉ có root và người dùng đang chạy tiến trình mới có thể đọc môi trường của tiến trình. Tôi muốn nói rằng điều đó khá an toàn.