sudo로 실행하는 것을 잊은 후에 nano에서 sudo로 저장할 수 있습니까? 때문에 권한 오류가 발생했습니다.

nano로 파일을 편집하는 많은 시간을 저장하고 sudo로 실행하는 것을 잊었 기 때문에 권한 오류가 발생했습니다. 파일을 다시 열고 다시 편집하지 않고도 sudo가 될 수있는 빠른 방법이 있습니까?



답변

아니요, 시작시 가지고 있지 않은 실행중인 프로그램 권한을 부여 할 수 없습니다. ‘privilege escalation’¹이라는 보안 허점입니다.

당신이 할 수있는 두 가지 :

  1. / tmp 또는 어디에서나 임시 파일에 저장하고 편집기를 닫은 다음 임시 파일의 내용을 편집중인 파일에 덤프하십시오. sudo cp $TMPFILE $FILE. mv파일 소유권 및 권한이 변경되어 파일 플레이스 홀더 자체가 아닌 파일 컨텐츠 만 바꾸고 싶으 므로이 용도로 사용 하지 않는 것이 좋습니다.
  2. Ctrl+를 사용 하여 편집기의 배경을 지정하고 z파일 소유권 또는 권한을 변경하여 쓸 수 있도록 한 다음 fg편집기로 돌아가서 저장하십시오. 권한을 수정하는 것을 잊지 마십시오!

¹ 일부 편집자는 실제로 다른 권한으로 새 프로세스를 시작하고 저장을 위해 해당 프로세스로 데이터를 전달하여이 작업을 수행 할 수 있습니다. 예를 들어 파일 버퍼를 프로세스 파이프에 쓸 수있는 고급 편집기의 다른 솔루션에 대해서는 이 관련 질문 을 참조하십시오 . Nano는 새로운 프로세스를 시작하거나 다른 프로세스로 데이터를 전달할 수 없으므로이 파티에서 제외됩니다.


답변

방금 시도했지만 nano가장 놀라운 점은 파일 편집을 시작할 때 파일이 읽기 전용이라는 경고조차하지 않습니다. ( 업데이트 : 분명히 nano 2.2는 경고하지만 2.0은 그렇지 않습니다. )

이를 수행하는 기본 스크립트는 다음과 같습니다.

파일을 편집 할 수 있는지 확인하고, 파일을 편집 할 수 없으면 루트로 “nano”를 실행합니다.

/ usr / local / bin / edit (또는 ~ / bin / edit )

sudo=                       # empty is false, non-empty is true
editor=nano                 # XXX check $EDITOR and $VISUAL

if test -e "$1" && test ! -w "$1"; then
    if test -t 0 && test -t 2; then
        printf "%s is not writable.  Edit with sudo? [y/n] " "$1" 1>&2
        read -n 1
        case $REPLY in
        y|Y)
            sudo=true
            ;;
        n|N)
            sudo=
            ;;
        *)
            printf "\nExpected y or n.  Exiting.\n" 1>&2
            exit 1
            ;;
        esac
    else
        printf "%s is not writable.  Fix the permissions or run \"view\" instead." "$1" 1>&2
        exit 1
    fi
fi

${sudo:+sudo} "$editor" "$1"

그리고 내가 view변경하지 않을 것이라는 것을 알면 프롬프트를 피할 수 있도록 내가 전화 한 명령 .

/ usr / local / bin / view (또는 ~ / bin / view )

editor=nano
readonlyflag=-v

"$editor" $readonlyflag "$1"

viewVi / Vim의 일부 라는 프로그램이 이미 있으므로 더 나은 이름을 제안하십시오.
(그러나 나는이 프로그램의 완전한 구현이 Vi의 view중복을 만들 것이라고 생각합니다 .)


정식 버전