VIM : "sudo vim bad_idea"?


20

#Vim의 irc 사용자는 다음과 같이 Vim과 함께 Sudo를 사용하지 말 것을 권고했습니다.

sudo vim bad_idea

/ var / www /와 같은 위치에서 작업을 수행 할 때 문서를 작성할 수 없습니다. 따라서 sudo를 사용하지 않으면 문제가됩니다. 물론 / tmp /와 같은 다른 위치에서 변경 한 다음 / var / www에 dirs를 복사 할 수 있습니다. 그러나 나는 더 쉬운 방법을 느낀다.

  1. "스도 Vim"을하지 않으면 왜?
  2. 첫 번째 질문에 예인 경우 sudo를 사용하지 않는 문제를 어떻게 피할 수 있습니까?

답변:


35

나는 첫 번째 범주에 속한다 : sudo vim /var/www/html/some_file나쁜 생각이다; 기록되지 않은 쉘 이스케이프를 허용합니다. 대신 sudoedit /var/www/html/some_file;를 사용하십시오 . 같은 효과가 있습니다.


5
"기록되지 않은 쉘 이스케이프"란 무엇입니까? 왜 / var / www에서만 문제가되지 않습니까?
하센

6
vim은 명령 행에서 다른 명령을 실행할 수 있습니다. 그러나 vim은 sudo를 통해 시작되었으므로 root로 실행되므로 해당 명령은 모두 root 권한으로 실행됩니다. 이 명령은 "쉘 이스케이프"라고하며 sudo의 다른 호출 방식은 기록되지 않습니다. 그리고 / var / www에만 국한되지 않습니다. 내가 사용하는 곳은 어디에나 있습니다. 내 bashrc 파일에서 "sudo vi"의 별칭을 "sudoedit"로 지정했습니다.
Kevin M

나는 당신이 얻는 것을보고 동의하지만 명확히하고 싶습니다. 우리는 그의 정상적인 su와 sudo 루트 활동이 기록되고 있는지 전혀 모른다. "sudo vim"을 사용하면 서브 쉘을 루트로 실행할 수 있습니다. 쉘 내에서 "sudo"는 루트가 할 수있는 것과 할 수없는 것을 제어하지 않습니다.
pbr

3
케빈, "sudo vi"의 별칭을 "sudoedit"로 어떻게 지정 했습니까? bash 매뉴얼에서 ... "/, $,`및 = 문자와 위에 나열된 쉘 메타 문자 또는 인용 문자는 별명으로 표시되지 않을 수 있습니다." 우주는 말하고있는 메타 문자 중 하나입니다.
pbr

9
자, 별명은 아니지만 'function sudo () {[[$ 1 == vi]] && shift && sudoedit "$ @"|| sudo "$ @"명령; } '
Kevin M

10

참조 : /programming/1005/getting-root-permissions-on-a-file-inside-of-vi :

%는 현재 파일 이름으로 바뀌므로 다음을 사용할 수 있습니다.

: w! 스도 티 %


tee를 사용하려면 ': w! sudo tee %> / dev / null'을 제안하여 전체 파일이 다시 에코되지 않도록합니다. 입력하는 것이 더 빠르며 같은 것을 달성하기 때문에 일반적으로 ': w! dd of = %'를 대신 사용합니다. 물론 이것은 sudoedit / sudo -e를 잊어 버린 경우에만 해당됩니다.
jamessan

7

vim을 사용하면 사용자가 임의의 쉘 명령을 실행할 수 있으므로 많은 시스템 관리자는 vim을 sudo와 함께 사용할 수 없습니다.

rvim은 vim에 포함되어 있습니다. 쉘 명령을 허용하지 않는 제한된 vim입니다. 또는 같은 이유로 vim을 일시 중지시킬 수 있습니다.

자신의 상자에서 그 극단으로 가야하는지 여부는 논쟁의 여지가 있습니다.


1
+1. 완전히 동의하십시오. sudo vim그런 다음 들어가면 :!bash루트로 쉘 rvim
생깁니다.

3
사실 당신은 아마 정력, 당신은 할 수 sudo를 할 수있는 경우 sudo bash또는 sudo su -권리?
dlamblin

@diamblin 권한은 그보다 더 세밀하게 정리할 수 있으므로 반드시 그런 것은 아닙니다. rvim이 필요한 이유입니다. "sudo vim"은 모든 의도와 목적에서 "sudo su-"와 동일합니다. 한 사용자가 시스템 관리자 인 데비안 비티 박스에서 이것은 모두 학문적입니다.
Richard Hoskins

우분투는이 문제를 어떻게 처리합니까? CentOS vi시작시 vim루트 vi시작 vi. 우분투 vim에서 두 경우 모두에 사용되며 sudo vi또한 시작 vim...
cwd

6

시스템 전반의 구성 파일을 편집 할 때는 완전히 괜찮습니다. 항상 루트 권한을 가지고 있으므로 모든 권한을 가지고 있으므로 더 이상 필요하지 않은 즉시 해당 권한을 삭제하십시오.

특별한 경우 /var/www/, 예를 들어 웹 서버 페이지에서는 일부 소유권 / 그룹 / 권한 변경에 대해 생각할 수도 있지만 특정 설정 (단일 / 다중 사용자, 실제 웹 서버 / 단지 로컬 호스트, 동적)에 따라 달라집니다 / 정적 등)


6
실제로 +1-웹 서버 페이지를 처리하는 가장 좋은 방법입니다. 당신의 특권을 높이기보다는 그들에게 접근 할 수 있는지 확인하십시오.
bedwyr

1
-1 sudoedit이 동일한 작업을 수행 할 때 높은 권한으로 vim을 실행할 이유가 없습니다.
sml

4

이와 같은 질문으로 인해 이마가 부딪 쳤습니다. 저는 보안의 반대편에 있습니다. "일반 사용자가 악의적 인 활동을하는 것을 방지하거나 요구하지 않는 한 보안은 사용자 경험을 방해해서는 안됩니다."

vim의 sudo 사용을 막는 것은 단지 반창고입니다. 앞에서 언급했듯이 누군가는 다음을 사용할 수 있습니다.

sudo su -

또는

sudo /bin/bash

또는

sudo nano file

또는

sudo my_exectuable_text_editor file

요법

만약 누군가가 박스에서 악의적 인 일을하는 것에 대해 정말로 걱정한다면, 그들에게 sudo (혹은 root 암호) 권한, 기간을주지 마십시오. sudo를 사용하여 악의적 인 활동을 막는 은밀한 총알은 없으며 모든 "수정 사항"을 "적용"하여 사람이 악의적 인 일을 할 수 없도록함으로써 자신을 미치게 할 것입니다.

누군가가 소유권 / 그룹 변경을 언급했습니다. 웹 서버가 다른 사용자로 실행 된 것처럼 파일에 대한 권한을 변경하면 사이트가 갑자기 작동하지 않는 것처럼 문제가됩니다. 글쎄, 그건 당신을 도울 수 없습니다. 웹 서버가 실행되는 그룹에 사용자를 추가 할 수 있지만 그룹에 파일에 대한 쓰기 권한이없는 경우 chmod -R g + w * (또는 chmod 개별 파일)를 수행해야합니다. 모든 파일을 chmod 해야하는 경우 원하는 작업과 번거 로움이 될 수 있습니다.

어떤 사람들은 rvim 사용을 제안하기까지했습니다. 물론 특정 사용자 만 rvim을 허용 할 수 있도록 / etc / sudoers에 줄을 추가 할 수도 있지만, 해당 경로로 이동해야하는 경우 웹 기반 파일 관리자를 구현하는 것이 더 좋습니다. 이렇게하면 웹 서버가 실행중인 사용자로 실행되므로 파일 권한 문제가 없으며 누가 어떤 파일을 편집하는지 누가 세밀하게 제어 할 수 있습니다.

어쨌든 내 두 센트.


2

실행 sudo vim해도 $HOME디렉토리가 변경되지 않으므로 루트 권한으로 Vim을 실행하지만 $HOME여전히 일반 사용자를 가리 킵니다.

Vim을 처음 실행하는 경우 ~/.viminfo파일이 일반 사용자 디렉토리 내에 생성되지만 루트 권한으로 생성 될 수 있습니다 .


1
sudo에 따라 다릅니다. 내 노트북 sudo vim -c '!echo $HOME' -c q에는 홈 폴더가 있지만 서버에는 /root. 그 이유를 살펴 봐야 할 수도 있습니다. 하나는 OS X이고 다른 하나는 Gentoo이거나 /etc/sudoers설정 방법과 관련이있을 수 있습니다 .
Nemo157

아하! 당신은 옳습니다-나는 왜 내가 왜 .viminfo루트에 접근 할 수 있었 는지 궁금해했습니다 .
Ayrat

1

이것이 자신의 컴퓨터 라면 ... Denilson이 지적한 가장 중요한 경우를 제외하고 'sudo vim'을 사용할 수없는 이유는 없습니다. 루트가 소유 한 ~ / .viminfo를 만들 수도 있습니다.

그렇지 않은 경우 -시스템 관리자가 "man sudo"에 따라 수행 할 수있는 작업과 수행 할 수없는 작업을 제한하는 경우 : "대부분의 시스템에서 sudo의 noexec 기능으로 쉘 이스케이프를 방지 할 수 있습니다. 자세한 내용은 sudoers (5) 매뉴얼을 참조하십시오. "

따라서이 경우 sysadmin이 vim 내에서 루트로 서브 쉘을 실행할 가능성에 대해 우려하는 경우 noexec 기능을 사용할 수 있습니다. 그러나 ... 초기 사례로 돌아가서-이것이 컴퓨터라면 'sudo vim'을 실행하는 것이 안전하다고 생각합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.