아래 스크립트에 심각한 문제가 있으며 NOEXEC 및 RESTRICT로는 문제를 해결할 수 없다는 것을 알고 있습니다.
user ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf
그러나 저는 이 두 가지 옵션에 대해 여전히 약간 혼란스럽습니다.
한계
많은 수의 프로그램이 셸 이스케이프 기능을 제공하므로 일반적으로 셸 이스케이프 기능을 제공하지 않는 어셈블리 집합으로 사용자를 제한하는 것은 불가능합니다.
이것이 왜 문제가 됩니까? 일반 사용자가 임의의 명령을 실행하도록 허용해서는 안 되기 때문에 일반 사용자를 쉘 이스케이프를 허용하지 않는 프로그램으로 제한하는 것은 sudoedit와 같은 것 같습니다. 이것이 sudoedit와 어떻게 다릅니까?
실행하겠다고 약속하다
noexec 기능은 SunOS, Solaris, *BSD, Linux, IRIX, Tru64 UNIX, MacOS X, HP-UX 11.x 및 AIX 5.3 이상에서 작동하는 것으로 알려져 있습니다.
시스템이 noexec를 지원할 수 있는지 확실하지 않은 경우 언제든지 noexec가 활성화되었을 때 쉘 이스케이프가 작동하는지 확인할 수 있습니다.
NOEXEC가 제대로 작동하는지 확인할 수 있는 좋은 방법이 있나요? 명령을 실행하는 것이 가장 안전한가요?
답변1
한계
"쉘 이스케이프를 허용하지 않는 어셈블리에서 사용자를 제한하는 것은 일반적으로 작동하지 않습니다"라고 설명하면 표면적으로 단일 보안 작업을 수행하는 것처럼 보이지만 실제로는 사용자가 무엇이든 실행할 수 있도록 허용하는 프로그램에 일반적이라는 의미입니다. 다른 프로그램, 일반적으로 사용자에게 단일 명령에 대한 액세스 권한을 부여하면 실제로 원하는 명령을 실행할 수 있다고 가정해야 합니다.
일반적인 예는 텍스트 편집기일 수 있습니다. 사용자가 편집기에서 모든 파일(명령줄에 제공된 파일뿐만 아니라)을 열 수 있도록 허용하는 것 외에도 널리 사용되는 편집기에서는 사용자가 전체 셸을 시작할 수도 있습니다.
sudoedit 메커니즘은 특정 파일만 편집할 수 있는 편집기를 제공합니다(사용자에게 편집할 파일의 복사본을 제공하고 권한 있는 파일을 업데이트한 후에만 사용자가 직접 편집할 수 있도록 함). RESTRICT를 사용하여 사용자가 특정 파일(예: emacs)을 실행할 수 있도록 하려면 권한 있는 사용자로 실행 중인 emacs 편집기의 해당 사용자가 실제로 해당 사용자가 액세스할 수 있는 모든 파일을 편집하고 해당 사용자로 쉘을 시작할 수 있습니다.
실행하겠다고 약속하다
프로그램이 이런 방식으로 시작되면 일반 동적 라이브러리가 대체되어 새 셸 생성이 비활성화됩니다. 동적 실행 파일 less
인 경우 less
내부에서 셸 명령을 실행하려는 시도는 실패합니다. 특정 파일의 편집을 허용하려는 상황에서는 사용자가 sudoedit를 사용하는 것이 더 안전하고 더 나을 수 있습니다(이를 통해 자신의 편집기의 사용자 정의 설정에 액세스할 수 있기 때문입니다).
NOEXEC가 귀하의 시스템에서 실행되는지 여부를 확인하는 것과 관련하여 대상 프로그램이 실제로 동적으로 링크되어 있다면 문서에 나열된 모든 운영 체제에서 실행될 것이라고 가정합니다. 그러나 문서에서 알 수 있듯이 수동으로 확인하는 것이 좋습니다.