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

dpe*_*973 6 scripting sudo

我有一个 sudoers 文件存储在我们的 svn 存储库中。我想要svn export/etc/sudoers,但不能这样做,因为 sudo 检测到它不是由 visudo 编辑的并引发语法错误。究竟做了visudo -f什么,我可以做以下事情:

cd /tmp && svn export <URL>/sudoers &&  visudo < /tmp/sudoers
Run Code Online (Sandbox Code Playgroud)

无需人工干预?

Sté*_*las 11

可能不是因为它不是由 visudo 编辑的,而是因为它确实存在语法错误。还要检查权限。它完美的罚款,以编辑/etc/sudoers,而无需使用visudovisudo只是为了保证独占访问并在提交到实际文件之前检查语法。话虽如此,要回答您的问题,您可以这样做:

VISUAL="cp /tmp/sudoers" visudo
Run Code Online (Sandbox Code Playgroud)

visudo使用 调用您的首选编辑器/etc/sudoers.tmp,在编辑器返回并/etc/sudoers在满意时提交后检查文件新内容的语法。通过将首选编辑器设置为cp /tmp/sudoers,您实际上是在告诉它执行cp /tmp/sudoers /etc/sudoers.tmp

(将该sudoers临时文件存储在一个世界可写目录中,这/tmp对我来说听起来很危险)


bah*_*mat 6

我一直在编辑和部署sudoers。确保您执行以下操作:

  • 用于visudo -c -f <filename>在将其签入 svn 之前检查语法。
  • 当您部署时,请确保权限0440root:root(或root:wheel在 BSD 衍生产品上)拥有。

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