如果我使用密码作为命令行参数,则使用ps在系统上公开。
但是,如果我在一个bash shell脚本中,并且执行如下操作:
... { somecommand -p mypassword } ...
这是否仍然会显示在进程列表中? 或者这是安全的?
子stream程如何:(…)? 不安全的权利?
共处理?
具有外部jar的Java构build文件
python -c和`while'
Windows命令行/ shell – 丢弃UTF-8 BOM
Perl,执行多行的linux shell命令,需要authentication?
系统path中的多个Python安装
哪种语言最容易开发Linux命令行/简单的GUI?
帮助PDFKit和Rails应用程序
Plink通过Windowsbatch file处理特定的错误
Linux的头部/尾部有偏移量
命令行将始终可见(如果只通过/ proc)。
所以唯一真正的解决办法是:不要。 你可以用stdin或专用的fd来提供它:
./my_secured_process some parameters 3<<< "b@dP2ssword"
#!/bin/bash cat 0<&3
现在你需要关心的是:
MITM(欺骗脚本,甩掉密码,例如通过颠覆PATH)
在命令行中保留密码的bash历史记录(例如,查看HISTIGnorE的bash)
使用的tty的安全;键盘记录器;…正如你所看到的,我们现在已经下降到“一般安全原则”
被调用的程序可以通过像这样覆盖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
看到:
在Unix上隐藏命令行参数的秘密
从进程列表中退出的唯一方法是如果您重新实现了要在纯Bash函数中调用的程序的全部功能。 函数调用不是独立的进程。 但通常这是不可行的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。