새 사용자를 생성하고 그에게 sudo 액세스 권한을 부여하고 싶습니다. 특히, 나는 그가 sudo vim
httpd.conf를 사용하고 편집하기를 원합니다. 나는 sudoers에서 다음과 같이 썼습니다.
user ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf
그러나 이것이 위험할 수 있다고 들었습니다. 이것이 왜 문제가 됩니까? 문제가 얼마나 심각한가요?
답변1
명령줄 인수를 제한했지만 사용자가 vim을 사용하는 것을 막을 수는 없습니다.임의의 파일 열기, 편집 및 덮어쓰기일단 루트로 실행 중입니다.
sudo vim /etc/httpd/conf/httpd.conf
사용자는 다음을 실행할 수 있습니다
- 편집 버퍼의 모든 텍스트 지우기
- 그런 다음 편의를 위해 기존 파일을 가져옵니다(필요하지 않더라도). 예: sudo config
:r /etc/sudoers
참고: SELinux에서 제한하지 않는 한 사용자는 읽을 수 있습니다.어느이렇게 접수하세요! - 자신에게 더 많은 sudo 권한 부여
user ALL=(ALL) NOPASSWD: ALL
- 이전 구성 덮어쓰기
:w /etc/sudoers
현재 사용자가 시스템에 액세스하거나 시스템을 수정하거나 손상시킬 수 있는 유사한 방법이 수십 가지 있다고 생각합니다.
그가 sudo 로그 메시지에서 Apache 구성을 편집하는 모습만 볼 수 있기 때문에 이런 방식으로 어떤 파일이 변경되었는지에 대한 감사 추적도 없습니다. sudo
편집자에게 권한을 부여하면 보안 위험이 있습니다.
tar
이는 sudo 및 sudo와 같은 명령에 루트 수준 권한을 부여하는 것이 일반적으로 안전하지 않은 이유 와 거의 같습니다 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 사용자는 noexec를 활성화한 상태에서
aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi
실행할 수 있습니다 . 이렇게 하면 이 두 명령이 다른 명령(예: 쉘)을 실행하는 것을 방지할 수 있습니다./usr/bin/more
/usr/bin/vi
답변2
간단한 대답:
Vim 명령은 다음과 같습니다.
:shell
이제 루트 쉘이 생겼습니다.
답변3
이 구성을 사용하면 이 사용자가 파일을 편집할 수 있습니다. 이를 위해 그는 vim
루트 권한으로 편집자를 시작합니다.
명령이 실행되면 vim
사용자는 편집기를 사용하여 원하는 모든 작업을 수행할 수 있습니다. - 그는 다른 파일을 열 수 있고 vim에서 쉘을 시작할 수도 있습니다.
결과적으로 사용자는 이제 임의의 파일을 보고 편집할 수 있으며 시스템에서 임의의 명령을 실행할 수 있습니다.
답변4
가능한 점진적인 보안 개선 중 하나는 다음을 대체하는 것입니다.
user ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf
그리고
user ALL=(ALL) /usr/bin/rvim /etc/httpd/confs/httpd.conf
그런 다음 사용자가 이를 실행하게 하십시오 sudo rvim /etc/httpd/confs/httpd.conf
.
Vim은 -Z 명령줄 옵션이나 rvim으로 프로그램을 시작하여 실행되는 제한 모드를 지원합니다. 제한 모드가 활성화되면 "외부 쉘을 사용하는 모든 명령이 비활성화됩니다." 이 접근 방식은 사용자가 ex 명령을 사용하여 다른 파일을 여는 것을 막지는 못하지만 :split file
최소한 :!rm -rf /
.