在 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
/etc/sudoers
不直接向用户账户授予任何权限。它只授权用户运行各种命令通过sudo
工具(在 root 帐户下运行它们)。因此sudo cat /etc/shadow
可以工作,但cat /etc/shadow
仍然不行。管道和重定向由壳 在每个命令运行之前;也就是说,如果您运行
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