仅使用 sudo 权限编辑 root 可写文件

仅使用 sudo 权限编辑 root 可写文件

我们的系统管理员使用具有 sudo 权限的非特权帐户登录到计算机。出于习惯,我经常在vim而不是中打开文件sudoedit。我不想养成使用 的习惯sudoedit。我的同事建议vim在指向 的路径中创建一个符号链接sudoedit。这对我来说似乎是一个糟糕的主意。

我通常只是:w /tmp/service.conf然后mv -i /tmp/service.conf /etc/

sudoedit这看起来很笨重,但我几乎倾向于说,与养成使用或的习惯相比,我更信任这个过程sudo vim

有什么看法?

边注:我们通常可以轻松访问这些文件的备份,因此这不是一个问题。

答案1

我将继续使用 VIM,让它为您完成工作。当您打开没有写入权限的文件时,您仍然可以通过在 VIM 中发出以下命令来保存它: <ESC>:w !sudo tee %

这将允许您执行 sudo,并将您的编辑内容发送到您当前正在编辑的文件中。执行此操作后,该文件实际上是在 VIM 之外编辑的,因此它会要求您加载新内容。

答案2

vim 命令,您可以执行vim sudo:path-to-file。如果您已经在没有 的情况下打开了一个文件sudo:,您可以执行:f sudo:%切换到使用sudo进行读/写。(您可能:set noro也想这样做,以避免在您尝试编辑/写入 Vim 在第一次打开时认为是只读的文件时出现警告。)

请注意,Alex 的:w !sudo tee %解决方案和 sudo.vim 都存在 shell 转义问题。除非您知道文件名是安全的,否则请不要使用。

答案3

如果您拥有 sudo 权限,可以以 root 身份运行任何命令,这sudoedit实际上并没有什么好处。它的存在是为了使原本没有特权的用户能够安全地编辑某些文件,而不必让他们以某种受限模式(很难做到)以 root 身份运行整个编辑器。

因此,您的方法似乎不错,尽管我认为记住输入sudo vim并不是那么糟糕,因为您需要输入sudo whatever才能以 root 身份执行其他命令。

附注:我认为我更担心意外覆盖另一个文件(-i尽管如此 — — 你希望对这个问题回答“是”,所以很容易养成这样做的习惯),而不是弄乱你打算编辑的文件。因此,请确保你也备份了所有其他文件。

答案4

sudo su -

如果做不到这一点,请编写一个 shell 脚本,如下所示。请注意,如果您想将参数传递到 vim,它将中断(您可以扩展它以使其工作,但它更像是一个 PoC)

#!/bin/sh
# Pretend to be vim, write to /tmp then sudo copy to original file
$TMPFILE = $(mktemp)
cp $1 $TMPFILE
vim $TMPFILE
sudo mv -i $TMPFILE $1

这可能就是你想要的?你也可以轻松地将其设置为创建文件的两个副本,并在移动之前警告你它们是否仍然不相同(这意味着有人已经更改了原始文件)

相关内容