微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

命令行参数的Shell脚本密码安全性

如果我使用密码作为命令行参数,则使用ps在系统上公开。

但是,如果我在一个bash shell脚本中,并且执行如下操作:

... { somecommand -p mypassword } ...

这是否仍然会显示在进程列表中? 或者这是安全的?

子stream程如何:(…)? 不安全的权利?

共处理?

具有外部jar的Java构build文件

python -c和`while'

Windows命令行/ shell – 丢弃UTF-8 BOM

Perl,执行多行的linux shell命令,需要authentication?

系统path中的多个Python安装

从lsof(Linux命令行)中提取字段/属性

哪种语言最容易开发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] 举报,一经查实,本站将立刻删除。

相关推荐