尽管有 visudo ALL 权限,SSH 命令仍然失败

尽管有 visudo ALL 权限,SSH 命令仍然失败

在 DigitalOcean 上设置 rails 服务器(Ubuntu 12.10),我想让非 root 用户运行一些部署命令具有 root 访问权限通过sudo在命令前加上前缀并输入密码。我以为我可以visudo像下面这样编辑,但权限被拒绝。我遗漏了什么吗?

Defaults    env_reset
Defaults    mail_badpass
Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# User privilege specification
root    ALL=(ALL:ALL) ALL
nonrootuser ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

我做了非root用户组成员,deployers以防将来有多个部署代理。visudo 中没有提到这个组,但我不知道它是否相关,所以我在这里提到它。

类似这样的命令在我的开发箱(而不是服务器)中失败。我希望在提示输入非root用户密码后,将我的开发箱公钥的内容附加到服务器上的authorized_keys文件中。实际结果是权限被拒绝

cat ~/.ssh/id_rsa.pub | ssh -p 12345 [email protected] 'cat >> ~/.ssh/authorized_keys'

我尝试过彻底重启盒子,但仍然没有变化。我也尝试过sudo cat...管道命令,但没有结果。

答案1

  1. /etc/sudoers不直接向用户账户授予任何权限。它只授权用户运行各种命令通过sudo工具(在 root 帐户下运行它们)。因此sudo cat /etc/shadow可以工作,但cat /etc/shadow仍然不行。

  2. 管道和重定向由 在每个命令运行之前;也就是说,如果您运行sudo cat > somefile,您的 shell(以您自己的帐户运行)首先尝试打开somefile以进行写入;并且 – 如果成功 – 则只运行sudo cat附加到其标准输出的文件。换句话说,sudo不适用于重定向,除非您以某种方式将它们作为命令的一部分传递,例如sudo sh -c "cat > somefile"

答案2

根据您发布的 sudo 配置,为了让您的用户拥有 sudo 访问权限,他们需要是 admin 或 sudo 组的成员。如果您想将该权限授予组 deployers,请将 sudo 组配置复制到新行并将其更改为 deployers。

%deployers   ALL=(ALL:ALL) ALL

相关内容