如何以其他用户身份运行命令

时间:2019-06-27 12:37:50

标签: bash sudo

我有一个Shell脚本,该脚本有时会向Asterisk进行几次调用,并显示一些输出。打电话给星号是我尝试过的第一件事,看来不是可行。我确定我设置为运行脚本的用户没有运行Asterisk的权限,因此我研究了以root身份运行该脚本的方法(可以绕过该角色)(系统上唯一的其他用户)。

我没有运气就尝试使用su。在过去的两个小时中,我一直在搞弄sudosudoers,但无法使其正常工作。

例如,这是我的脚本中调用的一些代码,由用户com运行:

printf "\n"
calls=`sudo "asterisk -rx 'core show channels'" | grep "active call"`
lastinboundcaller=`cat /var/log/asterisk/lastcaller.txt`
printf '%s\n' "Current Call Count: $calls"
printf '%s\n' "Last Inbound Caller: $lastinboundcaller"

输出:

[sudo] password for com:
sudo: asterisk -rx 'core show channels': command not found
Current Call Count:
Last Inbound Caller: Unknown

这里有两个问题,

  1. 正在提示您输入密码。为什么不提示输入当前用户密码而不是root密码,我不知道,但根本不提示输入任何密码。
  2. Asterisk命令asterisk -rx "command"仍然不起作用-换句话说,尽管它具有权限,但仍无法运行Asterisk shell。

我尝试更新我的sudoers文件并在/etc/sudoers.d中创建一个名为asterisk的新文件,并将命令放在其中。

我对该文件的最新修改是:

com ALL = (ALL:ALL) NOPASSWD: /usr/sbin/asterisk

在此之前,我尝试过:

com ALL = (root) NOPASSWD: /usr/sbin/asterisk

我的理解是,应该允许用户com在没有密码的情况下以sudo 的身份执行星号。显然,有些事情不起作用。

我遵循了许多类似的SO帖子的答案,例如:

不幸的是,尽管遵循了我在这个问题上能找到的所有答案,但没有一个对我有用。

有人可以在这里向我指出正确的方向或提出其他建议吗?我已经咨询过Linux专家,这似乎是正确的方法。在Windows中,这一切都是超级容易做到的,而令我惊讶的是,在Linux中却是如此。

1 个答案:

答案 0 :(得分:1)

不要引用sudo的参数。它希望第一个参数是命令的名称,因此它认为整个命令行是程序名称。

应该是

calls=`sudo asterisk -rx 'core show channels' | grep "active call"`
  

为什么不提示输入当前用户的密码,而不提示root用户密码,但根本不提示输入任何密码。

sudo就是这样工作的。它提示输入当前用户的密码,并检查/etc/sudoers以查看是否允许他们运行该命令。您正在考虑使用su,它会提示您输入root密码。