Permissions
使用 vimdiff 時,我可以 sudoedit 可寫目錄中的文件嗎?
當我想
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