以编程方式使用 visudo 编辑 sudoers?

以编程方式使用 visudo 编辑 sudoers?

我有一个 sudoers 文件存储在我们的 svn 存储库中。我想要svn export/etc/sudoers,但不能这样做,因为 sudo 检测到它没有被 visudo 编辑并抛出语法错误。到底是visudo -f做什么的,我可以执行以下操作吗:

cd /tmp && svn export <URL>/sudoers &&  visudo < /tmp/sudoers

无需人工干预?

答案1

这可能不是因为它没有经过 visudo 编辑,而是因为它确实存在语法错误。还要检查权限。/etc/sudoers不使用进行编辑完全没问题visudovisudo仅用于保证独占访问并在提交实际文件之前检查语法。话虽如此,要回答你的问题,你可以这样做:

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:rootroot:wheel

如果您用来签入的主机运行的操作系统与您要部署的操作系统不同,那么您还应该visudo -c -f <filename>在将其复制到位之前在目标系统上运行。

相关内容