我在 Ubuntu 15.04 服务器上运行了一个名为 HomeSeer 的家庭自动化软件包。我已将其配置为使用服务帐户(称为“_homeseer”)运行,并且已将应用程序目录更改为 _homeseer:_homeseer。
要安装此软件包的更新,我下载了一个 tar.gz 文件,然后运行供应商提供的“update.sh”脚本。此脚本会提取压缩文件,而该文件恰好也会覆盖其自身(update.sh)... 所以我想我不能直接更改该脚本,除非我将其复制到某个单独的文件夹中。
作为 update.sh 的一部分,有一行调用“sudo update_extra.sh”。由于我以服务帐户身份运行 update.sh,因此此 sudo 行会提示输入服务帐户的密码...我不记得了(也不认为我想记得)。
我不想在没有密码的情况下授予该帐户完全 sudo 权限,因为这将带来重大安全风险(例如,该应用程序运行 Web 服务器)。我也不太愿意授予它完全 sudo 权限以 root 身份运行该 update_extra.sh 文件,因为该文件可以由同一个服务帐户更新。
我的问题:
是否可以配置 sudo(即 visudo),这样如果 _homeseer 帐户尝试使用 sudo,它会提示我输入个人帐户的密码,并使用我拥有的 sudo 权限运行?如果可以避免,我宁愿不设置 root 密码……但初步看来,如果我想走这条路,我可能别无选择。
或者我是否需要修改该 update.sh 脚本,配置组权限,以便我可以以自己的身份应用更新,然后将其 chown 到服务帐户?
答案1
您可以使用 sudo 来处理这个问题。
如果你将其添加到你的 sudoers 文件中:
_homeseer hostname = (_homeseer) NOPASSWD: /path/to/update.sh
- 主机名
hostname
=您的机器上的输出。
需要注意的一点是,没有 100% 安全的方法来处理 update.sh,因为它可能包含任何命令,并且我假设它会随着时间而改变,这意味着您不能使用 HASH 函数来确保脚本与以前相同。