我有一个 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
,而无需使用visudo
。visudo
只是为了保证独占访问并在提交到实际文件之前检查语法。话虽如此,要回答您的问题,您可以这样做:
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
对我来说听起来很危险)
我一直在编辑和部署sudoers
。确保您执行以下操作:
visudo -c -f <filename>
在将其签入 svn 之前检查语法。0440
由root:root
(或root:wheel
在 BSD 衍生产品上)拥有。如果您用来签入的主机运行的操作系统与您要部署到的操作系统不同,那么您还应该visudo -c -f <filename>
在目标系统上运行,然后再将其复制到位。