【问题标题】:su pass password to scriptsu 将密码传递给脚本
【发布时间】:2013-10-03 16:20:35
【问题描述】:

我正在尝试编写一个将运行以下命令的脚本:

sudo su
runmqsc_result=`su -c "runmqsc QMGR < /home/rob/query_queue.txt" -m "mqm"`

但是,我的问题是,这些命令是由 sudoers 文件中的用户作为 shell 脚本的一部分运行的。但是,显然 sudo su 要求输入运行它的用户的密码。

我需要做的是将密码传递给 sudo su 以便脚本自动运行。我该怎么做?

p.s:我无法更改运行“runmqsc”的权限...它必须以用户 mqm 运行,需要从 root 用户切换到。

【问题讨论】:

  • 只需配置sudo 以允许在没有密码的情况下以用户mqm 执行runmqsc(可能带有特定参数)——这是sudo 的主要目的。 su 在这里当然是多余的; sudo 已经完成了它的工作。

标签: sudo sudoers


【解决方案1】:

来自man sudo

-S    The -S (stdin) option causes sudo to read the password from the standard
      input instead of the terminal device.  The password must be followed by a
      newline character.

因此,虽然它违反了所有安全原则,但echo 'password' | sudo -S su [...] 应该可以工作。


或者,您可以让脚本只能由 root 编写,并将以下内容添加到 /etc/sudoers 以允许用户 johndoe 以 root 权限运行它,而无需输入其密码:

johndoe ALL = NOPASSWD: /full/path/to/your/script

只能由 root 写入部分对于防止 johndoe 修改脚本和以 root 身份执行任意命令很重要。

【讨论】:

  • 我在 Busybox 中违反了所有安全原则:echo password | su -c reboot
  • 我相信问题是关于传递给su,不过;在我的情况下,有问题的机器上没有也永远不会有sudo,所以这个解决方案对于 su 来说几乎是死的。
【解决方案2】:

此解决方案通过使用“bsdutiles”包中的“脚本”命令来设置 pty(终端)。 'sleep' 命令用于防止在'su' 命令准备好读取密码之前发送密码。 “tail”命令删除“su”发出的“密码:”输入行。

 { sleep 1; echo rootpassword } | script -qc 'su -c "runmqsc QMGR < /home/rob/query_queue.txt" -m "mqm"' /dev/null | tail -n +2

请注意,rootpassword 可以通过多种方式查看(历史记录、ps、/proc/ 等...)。以空格开头的命令至少可以避免历史记录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 2020-11-02
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多