当我尝试ls
以用户身份执行abc
以下命令时,出现错误:
xyz@host:~/temp$ sudo -u abc ls
[sudo] password for xyz:
Sorry, user xyz is not allowed to execute '/bin/ls' as abc on host.
但如果我这样做su abc
然后执行ls
我就没有问题
答案1
您应该配置sudo
安全策略以允许用户xyz
以 user 身份执行某些操作abc
。阅读sudoers
手册(man sudoers
)并使用visudo
命令进行配置/etc/sudoers
。
例如,让我们允许用户以没有密码的用户身份xyz
执行。将此字符串添加到(使用,不要直接编辑):/usr/bin/whoami
abc
/etc/sudoers
visudo
/etc/sudoers
xyz ALL = (abc) NOPASSWD: /usr/bin/whoami
现在,测试一下:
xyz@host:~$ sudo -u abc /usr/bin/whoami
abc
答案2
这是因为sudo
不同于su
。当您 时,您就成为系统的su abc
用户。abc
然后你就可以做任何abc
能做的事情。
另一方面,sudo
用于允许其他用户通过代理执行某些命令。换句话说,您的sudo
配置允许您代表 执行一些命令abc
。如果您尝试执行的命令不是其中之一,您将收到报告的错误。
答案3
如果一切看起来都正常,但您仍然收到Sorry user xxx cannot execute...
消息,并且每次都会要求您输入sudo
密码。
你可以这样做:
- 在
/etc/sudoers
删除行中包含您的用户设置 - 保存存档
- 打开文件,输入(不复制)您对该用户的选项
- 保存存档
- 尝试一下。
这对我有用。事实证明,该行的结尾很糟糕,因为我复制了需要从电子邮件执行的命令。