【问题标题】:shell script : navigate to rootshell脚本:导航到root
【发布时间】:2011-12-13 19:18:21
【问题描述】:

我正在编写一个需要 root 权限的简单 shell 脚本。如果您输入sudo su 并输入密码,则使用终端肯定可以使用。 我想把密码传给脚本文件,然后传给系统成为root ex:

pass= $1
navigateToRoot($pass)

【问题讨论】:

  • 你不能。如果可以的话,那将是一件可怕的事情。
  • 假设我想从另一个程序中读取它。来自某个应用程序的文本框并将其传递给系统
  • 如果您需要 root 访问权限来执行此操作,那么您做错了。
  • 你是对的,LINUX 忽略任何解释语言,所以这不适用于 shell 脚本。我今天学到了一些东西!

标签: linux shell scripting debian


【解决方案1】:

更好的方法是:

chmod +s yourfile
chown root yourfile

通过设置setuid 位,文件将以root(所有者)身份执行,无需存储或传递root 密码。

确保没有其他人可以修改脚本

chmod o-w yourfile

查看评论:

SETUID 不适用于 Shell 脚本,因此此答案无效。

【讨论】:

  • setuid 不能在 shell 脚本上工作,因为如果这样做会带来可怕的安全隐患。
【解决方案2】:

根据您对该问题的评论,我假设您实际上想以某种替代方式向用户询问密码,而不是在文件中以明文形式保存您的密码。

您可以将-A 标志用于sudo。来自man sudo

通常,如果 sudo 需要密码,它会从当前终端读取密码。如果指定了 -A(askpass)选项,则(可能 图形)帮助程序被执行以读取用户的密码和 将密码输出到标准输出。如果 SUDO_ASKPASS 设置了环境变量,它指定了助手的路径 程序。否则,由 askpass 选项指定的值 sudoers(5) 被使用。

【讨论】:

    【解决方案3】:

    如果您想从脚本发送密码,您需要一种能够在tty-s 上执行奇怪操作的脚本语言,例如expect(它基于 tcl,一种我非常不喜欢的脚本语言)。

    但是配置良好的sudo,或者较少使用的super 命令,或者可能是setuid 并调用其他脚本的二进制可执行文件(在C 中非常谨慎地编码)应该足够了......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-30
      • 2022-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      相关资源
      最近更新 更多