매우 제한된 원격 Linux 쉘에 대한 기본 솔루션

매우 제한된 원격 Linux 쉘에 대한 기본 솔루션

SSH를 통해 원격 컴퓨터에 연결 M하고 고정된 명령 집합( N전체적으로)에서 하나를 실행해야 하는 사용자가 있습니다.

이러한 명령은 Python, 해당 라이브러리 및 (머신이 가지고 있는) 네트워크에 대한 권한 있는 액세스에 의존합니다 M.

N다음과 같은 가능성 없이 Linux 사용자 셸을 이러한 명령 실행으로만 제한하는 기본 전략이 있습니까?

  • fs에 대한 추가 액세스
  • 명령 자체의 내용 읽기
  • 네트워크에 대한 권한 있는 액세스 획득
  • 그리고 똑같이

즉, 로그인 후 사용자에게 제한된 콘솔을 표시하는 기본 전략은 무엇입니까? 예를 들어 1와 사이의 숫자만 N입력으로 허용합니까?

답변1

Authorized_keys 파일에는 깔끔한 트릭이 있습니다. 명령 옵션을 사용하여 로그인 시 실행될 명령을 정의하고 키로 식별할 수 있으므로 N 명령이 정적이라면 서버에서 정의할 수 있습니다. 네트워크를 제한하지 않고 명령만 실행합니다. Authorized_keys 파일에는 다음과 같이 표시됩니다.

command = "date" ssh-rsa AAAA

이에 대한 자세한 정보를 찾을 수 있습니다.지도 시간

사용자의 네트워크 액세스를 방지하려면 SELinux 또는 기타 유사한 소프트웨어를 사용할 수 있으며 eBPF 후크를 작성하여 원하는 것을 정확하게 허용할 수도 있습니다.

답변2

이것이 필요한 것만을 담은 작은 chroot나 컨테이너가 아니라 범용 다중 사용자 운영 체제라고 가정해 보겠습니다.

자동화가 충분히 이루어지면 호스트에 로그인할 필요가 없을 수도 있습니다. 자동화가 수행하는 일부 셀프 서비스 시스템을 통해 이러한 제한된 옵션을 제공할 수도 있습니다.

호스트에서 작업을 수행하도록 하려면 캡티브 텍스트 메뉴를 사용해 보세요. 작성해야 할 스크립트는 무엇입니까?

그 사람이 다른 일을 하지 못하도록 엄격하게 제한하려면 몇 가지 트릭이 필요합니다.

  • 이상적으로는 해당 사용자에게 고유한 비특권 사용자로 로그인하십시오. doas 또는 sudo와 같은 도구를 사용하여 권한이 있는 항목을 에스컬레이션하세요.
  • 이 메뉴는 OpenSSH 블록으로 실행되는 메뉴입니다 ForceCommand.
  • 또한 쉘 프로필에서 실행하십시오. exec 셸 프로세스를 대체하고 메뉴가 종료되면 세션도 종료됩니다.
  • 메뉴 스크립트에서 신호를 트랩합니다.
  • 임의의 명령을 실행할 수 있는 프로그램을 조심하세요. 껍질을 벗기는 것은 사소한 일입니다vim에서 명령은 다음과 같습니다.:shell
  • 더 복잡한 작업이나 출력에 대한 더 많은 제어를 위해 메뉴 항목 래퍼 스크립트를 작성하고 사용합니다.

메뉴를 작성할 스크립트 언어를 선택하십시오. 기존 텍스트 메뉴 라이브러리 사용을 고려하십시오. 입력 루프 자체는 어렵지 않지만 견고하고 수정하기 쉬우며 좋은 UX를 갖춘 것이 실제로 프로덕션에서 원하는 것입니다.

관련 정보