在大多数用户可以sudo
访问其他用户 ID 的 UNIX 环境中,如何保护我的密码列表(例如在不同的数据库中)?
我有一个脚本(main.sh
),其中包含以下内容$HOME
:
$ cat main.sh
mysql --skip-column-names -hmysql_host -umy_user -pmy_password -ADmysql_db << EOF >> /home/my_user/mysql.log
select current_date;
EOF
当另一个用户(another_user
)尝试时sudo su - my_user
,他/她就能看到我的 MySQL 数据库密码。
即使我输入密码.bashrc
并通过脚本中的某些变量访问它,他/她也能够在文件中看到我的密码.bashrc
。
我怎样才能保护我的 MySQL 密码不被该用户知道another_user
?
答案1
因为每个拥有 root 权限的人都可以根据定义访问服务器上的所有文件 - 不,你不能。如果你不信任拥有 root 权限的人,那么你不应该从该服务器运行任何敏感文件。
不过,您仍然可以保护您的 MySQL 服务器。您可以将特定帐户用于特定操作,这样,如果您有一个执行查找的脚本,则用于该操作的帐户就不能用于删除操作。您可以只允许从一个 IP 地址访问帐户,这样,即使有人获得了您的密码,他们仍然只能从那台机器使用它。或者您可以将其设置为让脚本/cron 作业在 MySQL 服务器上运行,并让它连接到另一台服务器以获取所需的数据,例如通过使用无密码 SSH 密钥。
即使您不担心其他 sudo 用户,您也应该考虑这些事情 - 因为即使您相信服务器上所有具有 root 权限的用户都没有恶意,您仍然不能确定他们不会犯导致服务器受到损害的错误,并且您不希望任何第三方攻击者不受限制地访问您的数据库。
答案2
当您授予某人 sudo 访问权限时,您就默认信任他们。如果您不信任他们,则不要授予他们不受限制的 sudo 访问权限,或使用允许他们运行的命令列表来限制他们的访问权限。