7

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

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

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

我需要做的是将密码传递给 sudo su 以便脚本自动运行。我怎样才能做到这一点?

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

4

2 回答 2

15

来自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 执行任意命令很重要。

于 2013-10-03T16:26:40.760 回答
1

此解决方案通过使用设置 pty(终端)的“bsdutiles”包中的“脚本”命令来工作。'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/ 等...)。以空格开头的命令至少可以避免历史记录。

于 2016-08-03T10:49:08.177 回答