我有一些用于备份数据的脚本。其中一些需要 root 访问权限,所以我将它们与sudo
. 然而,有时我会感到困惑,例如对于 mySQL 备份,它也需要一个 mySQL root 密码。
我现在已经在这样的 bash 脚本中实现了一个解决方法
echo "Please enter root password"
sudo echo "Ok"
sudo mysqldump --all-databases --opt -u root -p > ~/backup.dump
这背后的想法是:sudo 密码将被缓存。如果一开始就输入,mySQL备份的时候就不会提示了,所以不能再和mySQL的root密码混淆了。
这种方法使用安全吗?它有什么问题吗?
是的,
该方法与任何正常使用
sudo
.当您使用
sudo
时,默认配置中会缓存密码。并且您使用虚拟命令将密码放入该标准缓存中,通过一个什么也不做的命令,作为 root - 这当然不危险。
sudo
只要因为您的示例使用
mysqldump
,它也使用密码,所以我想明确指出以上内容与 mysql 密码无关,它仅与sudo
示例行相关sudo mysqldump ...
。特别是,没有解决
mysqldump
在脚本中为 etc 提供密码,而没有在命令行中显示密码的问题ps
,top
或者系统上所有用户的任何进程管理器 GUI。补充资料:
设置超时
密码缓存的超时时间默认为15分钟,
sudo
可以通过设置更改timestamp_timeout
。sudoers
使用sudo visudo
, 添加一行到
/etc/sudoers
。(设置timestamp_timeout
为0
禁用缓存。)