使用sudo -u以其他用户身份执行命令时出现问题


12

当我尝试使用以下命令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我就没问题

Answers:


17

您应该配置sudo安全策略,以允许用户xyz exec作为abc用户执行。阅读'man sudoers'并使用visudo命令配置/ etc / sudoers。

例如,允许用户xyz exec / 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

您介意解释为什么应该避免直接编辑/ etc / sudoers吗?
Adi Prasetyo

因为当您直接编辑/ etc / sudoers时,您可能会犯一个错误,破坏了sudoers文件并(在最坏的情况下)使用sudo阻止了自己。“visudo命令,”不只是一个编辑器,它还会检查sudoers文件的语法,有助于避免错误,错别字等
SVQ

4

这是因为sudo与有所不同su。当您su abc使用时abc,就系统而言,您将成为用户。然后,您可以做任何abc可以做的事情。

另一方面,sudo用于允许其他用户通过代理执行某些命令。换句话说,您的sudo配置允许您代表进行一些命令abc。如果您尝试执行的命令不是其中之一,则会收到报告的错误。


0

万一一切正常,但您仍然收到Sorry user xxx cannot execute...消息,并且sudo每次都在询问您密码。

你可以这样做:

  1. /etc/sudoers删除行中符合您的用户设置
  2. 保存存档
  3. 打开文件,为该用户键入(不复制)您的选项
  4. 保存存档
  5. 尝试一下。

这对我有用。原来那行的结尾很糟糕,因为我复制了需要从电子邮件执行的命令。


当然,如果您曾经习惯于对其visudo进行编辑,会被告知吗?
Auspex

不,你不会。
borbar

呃,好吧。我真的会想到...无论如何,我认为您手动输入错误的可能性要比复制和粘贴的可能性大得多。请注意,线端有所不同。
Auspex
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.