명령 줄 인수를 제한하더라도 루트로 실행 된 임의의 파일 을 vim을 사용하여 열고 편집하고 덮어 쓰는 데 방해가되는 것은 없습니다 .
사용자는 sudo vim /etc/httpd/conf/httpd.conf
다음을 실행할 수 있습니다
- 편집 버퍼에서 모든 텍스트를 지우십시오.
- 그 다음 편의 원본 (즉,이 경우에도 필요하지 않지만) 기존 파일의 경우 : sudo를 구성, 예를 들어
:r /etc/sudoers
주 : SELinux에 의해 제한되지 않는 사용자가 읽을 수 있는 파일이 방법을!
- 더 많은 sudo 권한을 부여
user ALL=(ALL) NOPASSWD: ALL
- 이전 구성을 덮어 씁니다
:w /etc/sudoers
사용자가 시스템을 액세스, 수정 또는 파괴 할 수있는 수십 가지의 유사한 방법을 상상할 수 있습니다.
sudo 로그 메시지에서 Apache 구성을 편집하는 것만 볼 수 있으므로 이러한 방식으로 변경된 파일에 대한 감사 내역도 없습니다. 이것은 sudo
모든 편집자에게 권한을 부여 할 때의 보안 위험입니다 .
이는 sudo 루트 수준의 권한을 명령과 같은 권한에 부여하는 것과 같은 이유로 tar
, 보안 unzip
이 불안정한 경우가 많으 므로 시스템 바이너리 또는 시스템 구성 파일을 아카이브에 대체 할 수있는 요소는 없습니다.
다른 많은 주석가들이 지적했듯이 두 번째 위험 vim
은 쉘 이스케이프 를 허용 한다는 것입니다 . 여기서 vim 내에서 하위 쉘을 시작하여 임의의 명령 을 실행할 수 있습니다 . sudo vim 세션에서 루트로 실행됩니다 (예 : 쉘 이스케이프).
:!/bin/bash
대화식 루트 셸을 제공합니다
:!/bin/rm -rf /
술집에서 좋은 이야기를 만들 것입니다.
대신 무엇을해야합니까?
사용자는 sudo
자신이 소유하지 않은 파일을 안전하게 편집 할 수 있습니다 .
sudoers 설정 sudoedit
에서 사용자가 편집 할 수있는 파일에 대한 특별한 예약 명령 과 전체 (와일드 카드) 경로 이름을 설정할 수 있습니다.
user ALL=(ALL) sudoedit /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/*.conf
그런 다음 사용자는 -e
sudo 명령 행에서 스위치 를 사용 하거나 다음 sudoedit
명령을 사용할 수 있습니다 .
sudo -e /etc/httpd/conf/httpd.conf
sudoedit /etc/httpd/conf/httpd.conf
매뉴얼 페이지에 설명 된대로 :
이 -e (edit)
옵션은 명령을 실행하는 대신 하나 이상의 파일을 편집하려고 함을 나타냅니다. 명령 대신 문자열 "sudoedit"이 보안 정책을 참조 할 때 사용됩니다.
정책에 따라 사용자에게 권한이 부여되면 다음 단계가 수행됩니다.
- 소유자가 호출 사용자로 설정하여 편집 할 파일로 임시 사본이 작성됩니다.
- 정책에 의해 지정된 편집기가 임시 파일을 편집하기 위해 실행됩니다. sudoers 정책은 SUDO_EDITOR, VISUAL 및 EDITOR 환경 변수를 순서대로 사용합니다. SUDO_EDITOR, VISUAL 또는 EDITOR가 설정되지 않은 경우 편집기
sudoers
(5) 옵션에 나열된 첫 번째 프로그램 이 사용됩니다.
- 파일을 수정 한 경우 임시 파일이 원래 위치로 다시 복사되고 임시 버전이 제거됩니다.
지정된 파일이 없으면 작성됩니다.
sudo로 실행되는 대부분의 명령과 달리 편집기는 호출하는 사용자 환경을 수정하지 않고 실행합니다. 어떤 이유로 sudo가 편집 된 버전으로 파일을 업데이트 할 수없는 경우 사용자에게 경고 메시지가 표시되고 편집 된 사본은 임시 파일로 유지됩니다.
또한 sudoers
매뉴얼 에는 및 옵션으로 쉘 이스케이프 를 제한적으로 보호 하는 방법에 대한 전체 섹션이 있습니다.RESRICT
NOEXEC
restrict
사용자에게 임의의 명령을 실행할 수있는 명령에 대한 액세스 권한을 부여하지 마십시오. sudoedit는 sudo를 통해 편집기를 실행하는 데 더 나은 솔루션이지만 많은 편집기에는 쉘 이스케이프가 비활성화 된 제한된 모드가 있습니다. 쉘 이스케이프를 제공하는 많은 수의 프로그램으로 인해 사용자가 종종 실행 불가능한 프로그램 세트로 제한합니다.
과
noexec
공유 라이브러리를 지원하는 많은 시스템은 환경 변수 (일반적으로 LD_PRELOAD)를 대체 공유 라이브러리로 지정하여 기본 라이브러리 기능을 대체 할 수 있습니다. 이러한 시스템에서 sudo의 noexec 기능을 사용하여 sudo에 의해 실행되는 프로그램이 다른 프로그램을 실행하지 못하게 할 수 있습니다. 참고 ... ...
명령에 대한 NOEXEC 사용하려면 사용하려면 NOEXEC
위의 사용자 사양 섹션에 설명 된대로 태그를. 다음은 그 예입니다.
aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
사용자 aaron이 실행 /usr/bin/more
되고 /usr/bin/vi
noexec가 활성화되어 있습니다. 이렇게하면이 두 명령이 다른 명령 (예 : 셸)을 실행하지 못하게됩니다.
vim
사용자는 원하는 파일을 자유롭게 열고 쓸 수 있습니다.