Bash
通過 cat 將密碼傳遞給 curl 有多不安全
我有一個執行
curl
多次的腳本。我只想輸入一次密碼(所以我不希望 curl 在每次執行時都要求輸入密碼)。我不希望密碼出現在程序列表或文件描述符或其他內容中。
#!/bin/bash read -p "Enter pw:" -s pw provide_pw() { cat << END "$pw" END } for i in {1..10}; do curl -u $(logname):$(provide_pw) "$url" done
這種方法是否安全,或者如果我這樣做,其他使用者是否可以獲取我的密碼?
對於所有與 read 和 cat 和 heredocs 一起跳舞的事情,最終命令替換將導致
$(provide_pw)
被實際密碼替換。然後它將成為流程細節的一部分。從
man curl
, 關於-u
:在它工作的系統上,curl 將從程序列表中隱藏給定的選項參數。
因此,在這樣的系統上,以及在
hidepid
適當設置的 Linux 系統上,密碼將對其他使用者隱藏,但在其他地方,每個人都可以通過使用 , 等查看 curl 程序的命令行來看到ps
密碼top
。如果您願意
read
輸入密碼,只需curl
為您完成:如果您只是指定使用者名,curl 將提示輸入密碼。
另請參閱:curl 如何保護密碼不出現在 ps 輸出中?這裡有一個競爭條件:在 curl 開始和清理命令行之間,密碼將是可見的,如果它沒有被其他方式隱藏(如
hidepid
在 Linux 上),那麼在該視窗中每個人都可以看到。