Vim은 sudo와 함께 사용하는 것이 안전합니까?


25

이 링크에 설명 된 sudo것처럼 그래픽 응용 프로그램과 함께 사용 하는 것은 좋지 않습니다 . 따라서 와 함께 사용하는 경향이 있습니다 .geditvimsudo

최근 우분투 16.04 (Xenial Xerus)를 ~/.viminfo새로 설치했을 때 루트가 소유하고 있음을 알았 으므로 Vim조차 그래픽으로 간주되는지 또는 호출에 다른 문제가 있는지 궁금해했습니다 . 다음을 통해 소유권을 본인에게 변경 한 후 :sudo vim

sudo find $HOME -not -user $USER -exec chown $USER:$(id -g) {} +

그 후 달리는 sudo vim나는 ~/.viminfo 루트 가 소유 할 수 없었습니다 . 그러나 최근에 루트가 소유하고 있다고 확신합니다.

호출하는 것이 바람직하지 sudo vim않습니까?



1
sudo없이 vim을 사용할 수 있으며 파일을 저장할 때 다음을 사용할 수 있습니다.:w !sudo tee %
ChatterOne

답변:


22

예, 안전합니다.

문제 sudo gedit는 GUI 응용 프로그램이과 같은 특정 파일을 사용하기 때문에 ~/.cache/dconf상승한 후에 gedit해당 파일이 루트 소유 가되기 때문 입니다. 글쎄, 그 특정 파일에는 데스크탑을 포함한 GUI 응용 프로그램에 대한 사용자 별 설정이 포함되어 있으므로 시스템이 해당 설정을 읽을 수 없다면 좋지 않습니다. IIRC 사용자는 특정 데스크탑을 시작할 수 없습니다. 사용자의 최근 파일 데이터 recently-used.xbel도 영향을받습니다.

반면에 Vim은 그런 문제가 없습니다. GUI 관련 데이터베이스를 사용하지 않으며에 아무것도 넣지 않습니다 recently-used.xbel. gVim도 존재하지만 콘솔 전용으로 만들어졌습니다. 실제로 일부 시스템에서는 Vim이 유일한 편집자 선택입니다. 따라서 동일한 문제를 일으키지 않기 때문에 gedit 보다 안전 합니다. 두 경우 모두 여전히 루트로 편집하고 있으므로 부적절한 편집에 문제가 발생할 수 있습니다.

이 블로그 게시물 에 따르면 :

vim을 처음 사용할 때 파일 ~/.viminfo이 작성 sudo vim되고, 새로운 시스템에 vim을 설치 한 후 vim을 처음 사용할 경우 , 권한 ~/.viminfo이 소유자에게 기본 사용자 대신 root로 설정됩니다.

저자는 문제가 발생할 수 있다고 지적하지만 chown파일은 자신에게 다시 제공하는 것만으로 복잡한 것은 없습니다 .

참조 :


6
vim은 다른 사용자의 관리 권한을 제한하려는 다중 사용자 시스템에서는 안전 하지 않습니다 . 사용자는 sudo vim루트로 실행되는 vim의 사본 :!/bin/sh을 얻은 다음 루트 쉘을 얻는 데 사용할 수 있습니다 .
Mark

3
@ Mark와 사용자가 무엇을하지 못하게 sudo /bin/sh합니까? 실제로 사용자가 이미 루트 액세스 권한을 가지고 있다면 정교한 트릭을 사용할 필요가 없습니다.
Sergiy Kolodyazhnyy

7
/etc/sudoers파일. 당신은하지 않습니다 필요%wheel ALL=(ALL) ALL- sudo구성이보다 훨씬 더 미묘한 차이를 허용합니다.
Mark

1
@Mark OK, 좋은 지적-모든 시스템이 동일한 설정을 갖는 것은 아닙니다.
Sergiy Kolodyazhnyy

음 ... 파일이 있어도 권한이 변경됩니까? 관리자가 아닌 사용자 계정을 해킹했지만 비밀번호를 모릅니다 (쉘을 열었을 수도 있음). 나는 복사 할 수 있습니다이 평균 않음 /bin/bash~/.viminfo사용자가 실행하는 것은 및 대기에의 setuid를 넣어 sudo vim이 루트에 chowned했다고?
ChatterOne

15

sudoedit이를 달성하기 위해 사용할 수도 있습니다 . 편집기에서 파일의 임시 사본을 열고 편집기를 실행합니다. 로부터 man 페이지 :

  1. 소유자가 호출 사용자로 설정하여 편집 할 파일로 임시 사본이 작성됩니다.

  2. 정책에 의해 지정된 편집기가 임시 파일을 편집하기 위해 실행됩니다. sudoers 정책은 SUDO_EDITOR, VISUALEDITOR환경 변수를 순서대로 사용합니다. 아무도 경우 SUDO_EDITOR, VISUAL또는이 EDITOR설정되어 있지 않은, 편집기에 나열된 첫 번째 프로그램 sudoers(5)옵션이 사용됩니다.

  3. 파일을 수정 한 경우 임시 파일이 원래 위치로 다시 복사되고 임시 버전이 제거됩니다.

이것은 vim과 잘 작동하며 (일반적으로 내가하는 일) gedit도 사용할 수 있다고 생각합니다. 있습니다 일부 보안 제한 .


4
루트 대신 자체 vim 구성을 사용하려는 경우 훨씬 좋습니다.
NieDzejkob

2
임의의 플러그인 코드를 루트로 실행하지 않으려는 경우에도 더 안전합니다 (단, 플러그인은 악의적 인 경우 많은 피해를 줄 수 있으므로 신뢰할 수없는 플러그인을 사용하지 마십시오) 처음).
케빈

2

링크는 매우 오래되었습니다 (2013). 그래픽 응용 프로그램을 사용 gksudo하거나 gksu그래픽 응용 프로그램에 사용하는 것이 좋지만 둘 다 사용되지 않습니다. 나중에 받아 들여진 대답에서도 제안 sudo -H합니다.

Ask Ubuntu 커뮤니티 의 일반적인 합의 는 다음을 사용하는 것입니다.

sudo -H gedit /path/to/filename

sudo탭 설정, 확장명, 단어 줄 바꿈, 글꼴 이름, 글꼴 크기 등에 대한 프로필이없는 유일한 문제가 남아 있습니다. 이러한 래퍼 스크립트를 사용하여 사용자 프로필에서 상속 할 수 있습니다. 루트를 동기화하는 방법 사용자 gedit의 환경 설정으로 gedit?


2

예, 사용하는 것이 안전합니다 sudo vim. 내가 겪는 문제는

  • 파일을 종료하고 다시 열어야 sudo vim편집 할 수 있습니다.

  • vimrc내 사용자 정의 유용한 것들이 아닌 루트 를 기본값으로 사용하십시오.

다음 bashrc은 파일을 정상적으로 편집 할 수없는 경우 vim이 자동으로 sudo하도록 허용 하는 기능 입니다.

vim() {
    #only good for auto-sudo. delete if no sudo privileges.
    #If you're not just opening a single file, let's not use this.
    if [[ "$#" -ne 1 ]]; then
        command vim "$@"
    #cases: if we can write to the file, or the file doesn't exist and we can make new files in that directory
    elif [[ -w "$1" || ( -w $(dirname "$1") && ! -f "$1" ) ]]; then
        # \vim or 'vim' only escape aliases, not functions
        command vim "$1"
    else
        sudo env HOME="$HOME" vim -u $HOME/.vimrc "$1"
    fi
}

우분투 sudo에서는 기본적으로 $HOME환경 변수를 유지하므로 사용자 정의 된 .vimrc sudo vim 사용 하고 root : root sudo vim의 소유권을 변경하고 ~/.viminfo약간의 불편을 초래합니다.
Marius Gedminas

수락 된 답변이에 대해 동의하지 않습니다 viminfo.
jeremysprofile 2016

1

vi를 루트로 사용하는 것이 좋습니다. 네트워크 인터페이스 파일 변경 또는 sshd 구성 파일 편집과 같이 sudo 또는 root 권한이 필요한 파일을 편집해야 할 때가 있습니다. 사람들이 IRC에 연결하거나 웹을 루트로 탐색하기 때문에 그래픽에 루트를 사용하는 것은 좋지 않습니다. 그렇게하는 동안 바이러스에 감염되면 전체 루트 액세스 권한을 갖습니다.


2
vi를 루트로 사용하는 데에는 하나의 특정 예외가 있습니다. sudo 경로 (/ etc / sudoers)를 제어하는 ​​파일은 vi로 편집해서는 안됩니다. 해당 파일에는 visudo 명령을 사용해야합니다. 편집중인 파일을 지정하지 않아도 특별한 경우입니다.
user628388

1

다른 답변에서 언급되지 않은 것은 루트로 vim을 실행하면 설치 한 모든 플러그인에 루트 권한을 부여한다는 것입니다. 따라서 루트로 실행하는 것이 안전한지 아닌지에 대한 질문은 플러그인 개발자 (또는 프로젝트 기여자)가 시스템을 핵심에 소유하고 있지 않은지 신뢰할지 여부에 달려 있습니다.

Vim은 일반적으로 모든 Linux 배포판의 패키지 관리자에 의해 심사되므로 신뢰할 수 있습니다. 그러나 vim 플러그인은 일반적으로 GitHub 리포지토리에서 직접 설치되며 일반적으로 감사하는 사용자가 훨씬 적습니다 (아닐 수도 있음). 즉, 그들과 함께 베팅 과정이 없습니다.

루트에있는 동안 플러그인을로드하지 않으면 루트로 실행하는 것이 vim 개발자를 신뢰하는지 여부에 달려 있다고 생각합니다. 그러나 우리가 어쨌든 루트 액세스로 이미 신뢰할 수있는 sudo의 동일한 개발자가 만든 sudoedit를 사용하여 신뢰하지 않아도됩니다. GKFX와 NieDzejkob은 sudoedit가 이상적인 이유를 이미 언급했습니다. sudo 개발자 이외의 다른 사람에 대한 루트 액세스를 신뢰할 필요가 없다는 점 외에도, 일반 사용자 계정으로 이미 신뢰할 수있는 모든 플러그인을로드 할 수 있습니다.


다양한 개발자를 신뢰하지 않는 것에 대한이 토론은 약간 불완전한 것 같습니다. 당신이 경우 sudoedit /etc/apt/sources.listA는 플러그인을 설치 손상으로, 아마 당신은 어쨌든 업데이트를 실행하는 악의적 인 저장소 및 게인 루트 액세스 다음 번에 삽입 할 수 있습니다. 비슷한 것이 적용되는 긴 루트 보호 파일 목록이 있다고 확신합니다. 물론 모든 바이러스에 루트가 필요한 것은 아닙니다. 브라우저 확장만으로 은행 세부 정보를 파악할 수 있습니다.
GKFX
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.