我正在开发一个将在 Amazon EC2 实例上运行的应用程序,并执行需要 root 访问权限的某些命令。问题是不同的虚拟机以不同的方式提供根访问权限。例如,某些虚拟机允许直接访问 root 帐户,而其他虚拟机则仅允许默认的非 root 用户访问 sudo。
现在,我可以通过添加一个在所有命令前面添加“sudo”的选项来轻松解决上面的示例。但是,我对unix不太熟悉,我想知道是否有其他方法可以获得root权限,我应该准备我的程序。 su 和 sudo 足够合理吗?
答案1
有几种类似 sudo 的工具(calife、op、super,...) - 请参阅如何以系统管理员 (root) 身份运行命令——但是你可能一生都在 Unix 系统上度过,却没有遇到它们(它们都被 sudo 取代了)。实际上,如果您需要以 root 身份调用脚本,请安排所有计算机都具有无密码 sudo,或者允许以 root 身份进行 ssh 登录。两者之间没有太大的安全差异:无论哪种方式,脚本都必须拥有访问 root 帐户所需的所有凭据。
如果您只希望脚本能够执行特定命令,请在 中使用这些命令的特定条目/etc/sudoers
,或command=
在 中使用带有一行的特定键~root/.ssh/authorized_keys
。
答案2
- POSIX 文件系统通常实现 setuid/setgid 位。从来不推荐这样做,因为它很难保证安全,但它确实有效:
。
cp /usr/bin/id /tmp/rootid
sudo chown root /tmp/rootid
sudo chmod u+s /tmp/rootid
/tmp/rootid
密切关注尤伊德场地
sudo 和 su 工作;当心
sudo -E
或su -
与环境的相互作用。也许最好是明确地包装所有的 su 调用env -i
以免受伤害索拉里斯有RBAC尽管 OpenSolaris 曾经有一个 sudo 包以实现兼容性
答案3
如果您尝试从脚本运行命令,请将-t
选项传递给 ssh:
ssh -i file.pem -t myhost “sudo -n myscript”
sudo选项-n
将阻止 sudo 提示输入密码;如果该命令需要密码,您将收到错误消息。
它可以用于访问 EC2 实例。