Linux 보안 · 4 min read · Nov 14, 2025

사용자가 Linux에서 sudoedit를 사용하여 파일을 안전하게 편집하도록 허용하는 방법

가정해 보십시오. 당신은 팀이 주로 제한된 권한으로 Linux에서 작업하는 회사의 시스템 관리자입니다. 이제 한 팀의 구성원이 새로운 작업의 일환으로 자주 편집해야 하는 파일이 있으며, 이 파일은 슈퍼유저 권한이 필요하다고 상상해 보십시오. 당신은 무엇을 할 것인가요?

한 가지 옵션은 그들에게 ‘sudo’ 접근 권한을 주는 것이지만, 이는 낯선 사람에게 당신의 집 전체에 접근할 수 있도록 허용하는 것과 같습니다. 그들이 필요한 것은 단지 당신의 방 중 하나에 있는 것뿐입니다. 즉, 기본 ‘sudo’ 접근 권한을 부여하면 그들은 루트 권한이 필요한 모든 작업을 수행할 수 있게 되며, 필요한 것은 특정 시스템 파일을 편집할 수 있는 능력뿐입니다.

‘sudo’가 제공하는 유연성을 고려할 때, 당신이 가진 다른 옵션은 ‘sudo’ 정책을 조정하여 문제의 파일을 편집할 수 있는 권한만 부여하는 것입니다. 예를 들어, 다음과 같이 설정할 수 있습니다:

%newsudo ALL = vim /path/to/file

이것은 전체 sudo 접근 권한을 제공하는 것보다 훨씬 나은 솔루션이지만, 여전히 누군가가 악용할 수 있는 허점이 있습니다.

내가 말하고 있는 것을 이해하기 위해, 앞서 언급한 제한된 접근 권한이 그룹에 제공되고 누군가가 ‘sudo’ 명령을 사용하여 문제의 파일을 편집하기 위해 여는 시나리오를 고려해 보십시오.

이제 vim에 대한 좋은 지식을 가진 영리한 사람은 편집기 내에서 새로운 셸을 시작할 수 있다는 것을 알 것입니다. 그들이 해야 할 일은 다음 vim 명령을 실행하는 것입니다:

:shell

이 명령은 즉시 상호작용 셸로 들어가게 됩니다. 이 단계를 자신의 기계에서 시도하고 있다면, ‘whoami’ 명령을 실행해 보십시오. 그러면 내가 말하고 있는 허점을 이해할 수 있을 것입니다 - 네, 당신은 root로 셸에 있습니다.

다음은 예시 스크린샷입니다:

말할 필요도 없이, 단일 파일에 대한 편집 접근 권한을 제공하는 목적이 무산되었고, 사용자는 이제 무엇이든 할 수 있습니다.

다른 옵션이 있는지 살펴보겠습니다. sudoers 항목에서 사용할 수 있는 NOEXEC 태그가 존재합니다:

%newsudo ALL = NOEXEC: vim /path/to/file

NOEXEC는 기본적으로 sudo로 실행되는 프로그램이 다른 프로그램을 실행하지 못하도록 방지하는 기능입니다. 그렇다면 이것이 궁극적인 솔루션일까요? 안타깝게도 아닙니다. 이유에 대해서는 sudoers 매뉴얼이 이 태그를 설명하는 방식이 다음과 같습니다:

noexec  

많은 공유 라이브러리를 지원하는 시스템은 환경 변수를 사용하여 기본 라이브러리 기능을 대체할 수 있는 능력을 가지고 있습니다(보통 LD_PRELOAD). 이러한 시스템에서 sudo의 noexec 기능은 sudo로 실행되는 프로그램이 다른 프로그램을 실행하지 못하도록 방지하는 데 사용될 수 있습니다. 단, 이는 네이티브 동적 링크 실행 파일에만 적용됩니다. 정적 링크 실행 파일 및 이진 에뮬레이션 하에 실행되는 외국 실행 파일은 영향을 받지 않습니다.  

noexec 기능은 SunOS, Solaris, *BSD, Linux, IRIX, Tru64 UNIX, MacOS X, HP-UX 11.x 및 AIX 5.3 이상에서 작동하는 것으로 알려져 있습니다.  
...
...
...
명령에 대해 noexec를 활성화하려면 위의 사용자 지정 섹션에 문서화된 NOEXEC 태그를 사용하십시오. 다시 그 예를 들어보겠습니다:  

aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi  

이것은 사용자 aaron이 noexec가 활성화된 상태에서 /usr/bin/more 및 /usr/bin/vi를 실행할 수 있도록 허용합니다. 시스템이 noexec를 지원하는지 확실하지 않은 경우, 항상 시도해 보고 noexec가 활성화된 상태에서 셸 탈출이 작동하는지 확인할 수 있습니다.  

셸 탈출을 제한하는 것이 만병통치약이 아님을 유의하십시오. 루트로 실행되는 프로그램은 여전히 파일을 변경하거나 덮어쓰는 것과 같은 많은 잠재적으로 위험한 작업을 수행할 수 있으며, 이는 의도하지 않은 권한 상승으로 이어질 수 있습니다.  
...
...
...

굵게 강조된 텍스트를 주의 깊게 읽으면 NOEXEC에는 자체적인 제한 사항이 있다는 것을 알 수 있습니다.

그렇다면 가장 신뢰할 수 있는 솔루션은 무엇일까요? 음, 그것은 sudoedit입니다. sudoers 매뉴얼에서도 이 도구를 추천합니다:

특정 편집기의 경우, 사용자에게 sudoedit를 실행할 수 있는 권한을 부여하는 것이 더 안전한 접근 방식입니다.

Sudoedit는 사용자가 파일을 안전하게 편집할 수 있도록 하는 내장 명령입니다. sudo 매뉴얼 페이지에 따르면, ‘sudoedit’는 ‘-e’ 명령줄 옵션으로 ‘sudo’를 실행하는 것과 동등합니다.

왜 더 나은가

‘sudoedit’를 사용하면 사용자가 선호하는 편집기를 선택할 수 있습니다. 이는 사용자가 Vim 편집기를 강제로 사용해야 하는 이 튜토리얼의 시작 부분에서 논의한 솔루션과는 다릅니다. 사용자는 자신의 사용자 정의를 즐길 수 있습니다. 그리고 가장 큰 이유는, ‘sudoedit’를 사용하면 사용자가 ‘root’가 아닌 자신으로 파일을 편집하게 된다는 것입니다.

Sudoedit 작동 방식

sudoedit를 사용하려면 sudoers 항목이 다음과 같이 설정되어야 합니다:

%newsudo ALL = sudoedit /path/to/file

그리고 ‘newsudo’ 그룹의 사용자는 다음 명령을 실행하여 파일을 편집할 수 있습니다:

sudoedit /path/to/file

이 명령이 수행하는 작업은, 먼저 편집하려는 파일의 임시 복사본을 생성하는 것입니다. 그런 다음, 명령은 SUDO_EDITOR, VISUAL 및 EDITOR 환경 변수를 검색하여(그 순서대로) 방금 생성된 임시 복사본을 열기 위해 호출할 편집기를 결정합니다. 사용자가 수정 작업을 마치면 변경 사항이 원본 파일로 복사됩니다.

다음은 ‘sudo’ 명령 매뉴얼 페이지에서의 자세한 설명입니다:

-e, --edit  
명령을 실행하는 대신 하나 이상의 파일을 편집합니다. 경로 이름 대신, 보안 정책을 참조할 때 문자열 "sudoedit"가 사용됩니다. 사용자가 정책에 의해 권한이 부여되면, 다음 단계가 수행됩니다:  

 1. 편집할 파일의 임시 복사본이 생성되며, 소유자는 호출하는 사용자로 설정됩니다.  

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

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

지정된 파일이 존재하지 않으면 생성됩니다. 대부분의 sudo로 실행되는 명령과 달리, 편집기는 호출하는 사용자의 환경이 수정되지 않은 상태로 실행됩니다.** 만약 어떤 이유로 sudo가 편집된 버전으로 파일을 업데이트할 수 없다면, 사용자는 경고를 받고 편집된 복사본은 임시 파일에 남아 있게 됩니다.

이제 ‘sudoedit’에 대한 기본 아이디어를 갖게 되었고, 언제 사용하는지, 파일이나 몇 개의 파일을 편집하고 싶을 때 ‘sudo’를 사용하는 것보다 왜 더 나은지 이해하게 되었습니다. 물론, 다른 보안 관련 도구와 마찬가지로 ‘sudoedit’도 여러 가지 악용 사례가 있었지만, 여전히 많은 사용 사례에서 추천되는 솔루션입니다.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.