![](/img/trans.png)
[英]Linux shell script programming fundamentals: making a command-line tool that executes a command to execute several
[英]Shell script password security of command-line parameters
如果我使用密碼作為命令行參數,它在系統上使用ps
是公開的。
但是,如果我在 bash shell 腳本中,我會執行以下操作:
...
{ somecommand -p mypassword }
...
這還會出現在進程列表中嗎? 或者這樣安全嗎?
命令行將始終可見(如果僅通過 /proc)。
所以唯一真正的解決方案是:不要。 您可以在標准輸入或專用 fd 上提供它:
./my_secured_process some parameters 3<<< "b@dP2ssword"
使用類似(簡單第一)的腳本
#!/bin/bash
cat 0<&3
(此示例只會將錯誤的密碼轉儲到標准輸出)
現在你需要關心的是:
被調用的程序可以通過簡單地覆蓋argv
來更改其命令行,如下所示:
#include <stdlib.h>
#include <string.h>
int main(int argc, char** argv) {
int arglen = argv[argc-1]+strlen(argv[argc-1])+1 - argv[0];
memset(argv[0], arglen, 0);
strncpy(argv[0], "secret-program", arglen-1);
sleep(100);
}
測試:
$ ./a.out mySuperPassword &
$ ps -f
UID PID PPID C STIME TTY TIME CMD
me 20398 18872 0 11:26 pts/3 00:00:00 bash
me 20633 20398 0 11:34 pts/3 00:00:00 secret-program
me 20645 20398 0 11:34 pts/3 00:00:00 ps -f
$
UPD:我知道,它並不完全安全,可能會導致競爭條件,但是許多從命令行接受密碼的程序都會這樣做。
如何使用文件描述符方法:
env -i bash --norc # clean up environment
set +o history
read -s -p "Enter your password: " passwd
exec 3<<<"$passwd"
mycommand <&3 # cat /dev/stdin in mycommand
看:
避免顯示在進程列表中的唯一方法是重新實現要在純 Bash 函數中調用的程序的全部功能。 Function 調用不是單獨的進程。 但是,通常這是不可行的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.