Dor*_*Dor 9 security password bash-script
在了解了在命令行中使用密码的问题后,我需要找到一种方法来为程序提供密码而不会出现问题(密码不会被记录在某处)。
我有一个 bash 脚本,它可以从源代码自动安装整个 LAMP 服务器:Apache、FastCGI、PHP 和 MySQL。这些安装需要密码,尤其是 MySQL。
如何在不泄露密码的情况下使脚本完全自动化?
编辑(UTC 时间 6 月 9 日,3:55):
我在命令行上通过 root 使用密码调用 mysql:
root@dor-desktop:/home/dor# PASS=`cat /home/dor/tmpf/pass`
root@dor-desktop:/home/dor# mysql -u root -p"$PASS"
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Run Code Online (Sandbox Code Playgroud)
(在我们的例子中,PASS="p4ssw0rd")
我ps aux | grep mysql
通过我的普通用户(dor)执行,它没有显示密码!
(一些)ps
输出是:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 3562 0.0 0.0 34156 2864 pts/0 S+ 05:53 0:00 mysql -u root -px xxxxxx
Run Code Online (Sandbox Code Playgroud)
这怎么可能?
Run*_*ium 12
关于您的更新:
当一个进程启动时,它有一个专用的内存区域,用于存储参数和一个 int ,它告诉我们传递了多少参数。
MEMORY
argc 2
argv[0] program_name
argv[1] foo
argv[2] bar
Run Code Online (Sandbox Code Playgroud)
MySQL 检查密码是否通过命令行传递-p
,如果是将其复制到不可见的新变量,则用x
'es.覆盖该内存区域。
简单来说,例如:
argc 2
argv[1] -p
argv[2] p4ssw0rd
new_var = copy(argv[2]);
argv[2] = "xxxxx";
Run Code Online (Sandbox Code Playgroud)
您可以在例如client/mysqladmin.cc
源代码中找到它:
case 'p':
...
opt_password=my_strdup(argument,MYF(MY_FAE));
while (*argument)
*argument++= 'x'; /* Destroy argument */
Run Code Online (Sandbox Code Playgroud)
当ps
运行它读取的参数存储区域中,( argv[N]
),因此,它是xxxx
。
在很短的时间内密码是可见的,但只有几个 CPU 周期。
您可以使用特殊--init-file
选项和过程更新 MySQL 密码。C.5.4.1.2. 重置根密码:Unix 系统
mysqld_safe --init-file=/home/me/mysql-init &
Run Code Online (Sandbox Code Playgroud)
编辑:
作为@Gilles说,你可以echo
,printf
或使用here
一个脚本文件。
您还可以将此添加到.my.cnf
您的主目录或(临时)文件中并使用该--defaults-extra-file
选项。(相信您必须尽早在命令行中添加该选项。)还可以选择包含用户。另外,请注意额外的选项名称,除非你想使用仅该文件作为配置:
[client]
user=foo
password='password!'
Run Code Online (Sandbox Code Playgroud)
shell> chmod 400 my_tmp.cnf
shell> mysql --defaults-extra-file=my_tmp.conf -...
Run Code Online (Sandbox Code Playgroud)
可选地,[client]
分组使mysqld
跳过配置。
也可以使用MYSQL_PWD
环境变量,但永远不要使用它,因为您可以在 Linux 上的文件中列出许多ps
实现中的环境等。ps -e
/proc/<PID>/environ
tr '\0' '\n' < /proc/<PID>/environ
Run Code Online (Sandbox Code Playgroud)
更多关于这里的主题。
您可能还想查看MySQL 配置实用程序,它使您能够将密码存储在主目录中的加密文件中 – .mylogin.cnf
.
归档时间: |
|
查看次数: |
3820 次 |
最近记录: |