Posso sudoedit um arquivo em um diretório gravável ao usar o vimdiff?

1

Quando quero vimdiff dos arquivos raiz, uso o seguinte alias, conforme esta sugestão .

alias sudovimdiff='SUDO_EDITOR=vimdiff sudoedit'

Eu posso usar o seguinte comando.

$ sudovimdiff /root/a /root/b

No entanto, se um dos arquivos for gravável pelo meu usuário, o comando falhará.

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

Existe uma maneira de vimdiff um arquivo raiz e um não-root, usando as configurações de ambiente do meu usuário (por exemplo, sudoedit )?

    
por Sparhawk 10.01.2018 / 05:29

2 respostas

1

Pode ser útil relacionado a essa mensagem de erro do sudoedit:

sudoedit: ... editing files in a writable directory is not permitted

Por favor, tente uma modificação no arquivo sudoers usando sudo visudo , adicione uma linha:

Defaults  !sudoedit_checkdir

Mais aqui .

    
por 05.07.2018 / 12:38
2

Em man sudo , na parte que descreve -e ( também conhecido como 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).

Então, também:

  • nós invocamos sudoedit como raiz, o que poderia frustrar o propósito ou
  • copiamos o arquivo do usuário para um novo diretório não editável pelo usuário:

    mkdir /tmp/foo
    cp /tmp/b /tmp/foo
    chmod a-w /tmp/foo
    sudoedit /root/a /tmp/foo/b
    
  • editamos o arquivo raiz e o diferenciamos:

    sudoedit /root/a
    # in Vim
    :vert diffsplit /tmp/b
    
  • como sudoedit trata todos os nomes de arquivos de argumentos não-sudo, você pode usar um script de wrapper:

    $ 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
    
por 10.01.2018 / 07:13