ฉันเขียนสคริปต์และจำเป็นที่จะต้องขอให้ผู้ใช้รหัสผ่านของเขาและผ่านไปbash
openssl
ในขณะที่openssl
สามารถอ่านรหัสผ่านได้ฉันต้องการโปรแกรมสองรันและไม่ต้องการถามผู้ใช้สองครั้ง นี่คือสคริปต์:
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
รหัสผ่านนี้ไม่ปลอดภัยเนื่องจากสามารถดูรหัสผ่านได้อย่างง่ายดายโดยดูที่บรรทัดคำสั่ง บางคนสามารถอ่านโดยใช้ps
ตัวอย่างเช่น
openssl
สามารถอ่านรหัสผ่านจากตัวแปรสภาพแวดล้อมดังนั้นฉันสามารถแทนที่-k "$PASS"
ด้วย-pass env:PASS
แต่ก็ยังไม่ปลอดภัย ตัวแปรสภาพแวดล้อมของกระบวนการใด ๆ สามารถอ่านได้อย่างอิสระ ( ps
สามารถทำได้อีกครั้ง)
ดังนั้นฉันจะส่งรหัสผ่านไปยังสองopenssl
อินสแตนซ์ได้อย่างปลอดภัยได้อย่างไร
ps
อ่านสภาพแวดล้อมของกระบวนการ/proc/<pid>/environ
แต่ไฟล์นี้มี0600
สิทธิ์ใช้งานดังนั้นเฉพาะผู้ใช้รูทและผู้ใช้ที่ทำงานในกระบวนการเท่านั้นที่สามารถอ่านสภาพแวดล้อมของกระบวนการได้ ฉันจะบอกว่ามันค่อนข้างปลอดภัย