Permissions

使用 vimdiff 時,我可以 sudoedit 可寫目錄中的文件嗎?

  • August 5, 2018

當我想vimdiff根文件時,我根據這個建議使用以下別名。

alias sudovimdiff='SUDO_EDITOR=vimdiff sudoedit'

然後我可以使用以下命令。

$ sudovimdiff /root/a /root/b

但是,如果我的使用者可以寫入其中一個文件,則該命令將失敗。

$ sudovimdiff /root/a /tmp/b
sudoedit: /tmp/b: editing files in a writable directory is not permitted

有沒有辦法使用我的使用者的環境設置(即)vimdiff 一個根文件和一個非根文件sudoedit

可能與該 sudoedit 錯誤消息有關:

sudoedit: … 不允許在可寫目錄中編輯文件

請嘗試使用 修改 sudoers 文件sudo visudo,添加一行:

Defaults  !sudoedit_checkdir

更多在這裡

man sudo,在描述-e(又名sudoedit)的部分:

To help prevent the editing of unauthorized files, the
following restrictions are enforced unless explicitly allowed
by the security policy:

·   Symbolic links may not be edited (version 1.8.15 and
    higher).

·   Symbolic links along the path to be edited are not
    followed when the parent directory is writable by the
    invoking user unless that user is root (version 1.8.16
    and higher).
·   Files located in a directory that is writable by the
    invoking user may not be edited unless that user is root
    (version 1.8.16 and higher).

所以,要麼:

  • sudoedit我們以 root 身份呼叫,這將破壞目的或
  • 我們將使用者的文件複製到使用者不可編輯的新目錄:
mkdir /tmp/foo
cp /tmp/b /tmp/foo
chmod a-w /tmp/foo
sudoedit /root/a /tmp/foo/b
  • 我們編輯根文件並在裡面進行比較:
sudoedit /root/a
# in Vim
:vert diffsplit /tmp/b
  • 由於sudoedit處理所有非 sudo 參數文件名,您可以使用包裝腳本:
$ cat foo.sh
#! /bin/sh
exec vimdiff "$@" "$DIFF_FILE"

$ SUDO_EDITOR ="$PWD/foo.sh" DIFF_FILE="$PWD/.zshrc" sudoedit /etc/zsh/zshrc
[sudo] password for muru:
2 files to edit
sudoedit: /etc/zsh/zshrc unchanged

引用自:https://unix.stackexchange.com/questions/415978