![以编程方式使用 visudo 编辑 sudoers?](https://linux22.com/image/32900/%E4%BB%A5%E7%BC%96%E7%A8%8B%E6%96%B9%E5%BC%8F%E4%BD%BF%E7%94%A8%20visudo%20%E7%BC%96%E8%BE%91%20sudoers%EF%BC%9F.png)
我有一个 sudoers 文件存储在我们的 svn 存储库中。我想要svn export
它/etc/sudoers
,但不能这样做,因为 sudo 检测到它没有被 visudo 编辑并抛出语法错误。到底是visudo -f
做什么的,我可以执行以下操作吗:
cd /tmp && svn export <URL>/sudoers && visudo < /tmp/sudoers
无需人工干预?
答案1
这可能不是因为它没有经过 visudo 编辑,而是因为它确实存在语法错误。还要检查权限。/etc/sudoers
不使用进行编辑完全没问题visudo
。visudo
仅用于保证独占访问并在提交实际文件之前检查语法。话虽如此,要回答你的问题,你可以这样做:
VISUAL="cp /tmp/sudoers" visudo
visudo
使用 调用您首选的编辑器/etc/sudoers.tmp
,编辑器返回后检查文件新内容的语法,并/etc/sudoers
在满意时提交。通过将您的首选编辑器设置为cp /tmp/sudoers
,您实际上是在告诉它这样做cp /tmp/sudoers /etc/sudoers.tmp
。
(将该sudoers
临时文件存储在一个世界可写目录中,这对/tmp
我来说听起来很危险)
答案2
sudoers
我一直在编辑和部署。确保执行以下操作:
- 用于
visudo -c -f <filename>
在将其签入 svn 之前检查语法。 - 当您部署时,请确保权限由(或BSD 衍生品)
0440
拥有。root:root
root:wheel
如果您用来签入的主机运行的操作系统与您要部署的操作系统不同,那么您还应该visudo -c -f <filename>
在将其复制到位之前在目标系统上运行。