![回显到 /etc/sudoers 导致解析错误](https://linux22.com/image/859477/%E5%9B%9E%E6%98%BE%E5%88%B0%20%2Fetc%2Fsudoers%20%E5%AF%BC%E8%87%B4%E8%A7%A3%E6%9E%90%E9%94%99%E8%AF%AF.png)
使用织物如果我第二次回显 sudoers 文件,则文件损坏,第一次回显时运行正常。可能是什么原因?
第一个回声:
sudo('echo "django ALL=(ALL:ALL) ALL" | sudo tee -a /etc/sudoers')
第二次回声:
sudo('echo "celery ALL(www-data) NOPASSWD: /usr/bin/unoconv" | sudo tee -a /etc/sudoers')
在第二次 echo 命令之后,当我尝试执行 sudo 时,出现了解析错误,并且无法再次恢复 sudoers 文件,遗憾的是我必须创建一个新实例:
>>> /etc/sudoers: syntax error near line 28 <<<
sudo: parse error in /etc/sudoers near line 28
sudo: no valid sudoers sources found, quitting
第二条命令不存在语法问题,因为如果我手动输入它,visudo
它就可以正常工作。我不认为这是与 Fabric 相关的问题。Fabric 只是在远程服务器上执行命令。
答案1
正如所发布的,第二个回声中的行是错误的;我尝试手动添加
django ALL=(ALL:ALL) ALL
celery ALL(www-data) NOPASSWD: /usr/bin/unoconv
使用 visudo 添加到我的 sudoers 中,我也遇到了语法错误。您需要在第二行中的 (www-data) 之前添加 =。
一个在不破坏 sudoers 文件的情况下验证 sudo 语法的技巧:echo 'blah blah' | visudo -f - -c
。这至少会告诉您该行是否正常或有错误,而无需触碰您的 sudoers 文件。