以 root 身份执行 shell 命令的方法?

以 root 身份执行 shell 命令的方法?

我正在开发一个将在 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 -Esu -与环境的相互作用。也许最好是明确地包装所有的 su 调用env -i以免受伤害

  • 索拉里斯有RBAC尽管 OpenSolaris 曾经有一个 sudo 包以实现兼容性

答案3

如果您尝试从脚本运行命令,请将-t选项传递给 ssh:

ssh -i file.pem -t myhost “sudo -n myscript”

sudo选项-n将阻止 sudo 提示输入密码;如果该命令需要密码,您将收到错误消息。

它可以用于访问 EC2 实例。

相关内容