SSHauthorized_keys에 사용되는 두 스크립트를 추가로 보호하려면 어떻게 해야 합니까?

SSHauthorized_keys에 사용되는 두 스크립트를 추가로 보호하려면 어떻게 해야 합니까?

itunes.sh:

#!/bin/sh

set -f
set -- $SSH_ORIGINAL_COMMAND

case "$1" in
  /home/dimm0k/progs/scripts/*)
    ;;
  *)
    exit 1
esac

command="${1#/home/dimm0k/progs/scripts/}"
shift
case "$command" in
  */*)
    # Simplest is to reject anything with a slash...
    ;;
  .*)
    # ...and anything starting with dot.
    # If you need to whitelist subdirectories of /home/dimm0k/progs/scripts
    # then you need much more sophisticated pathname parsing and care.
    ;;
  *)
    ;;
esac

exec "/home/dimm0k/progs/scripts/$command" "$@"

rsync.sh:

#!/bin/sh
case "$SSH_ORIGINAL_COMMAND" in
  *\&*)
    echo "Rejected 1"
    ;;
  *\;*)
    echo "Rejected 2"
    ;;
    rsync*)
    $SSH_ORIGINAL_COMMAND
    ;;
  *true*)
    echo $SSH_ORIGINAL_COMMAND
    ;;
  *)
    echo "Rejected 3"
    ;;
esac

답변1

보안 목표를 정의하지 않았기 때문에 귀하의 질문은 의미가 없습니다. "안전하다"는 것은 아무 의미도 없습니다. 보안은 무엇을 위한 것입니까? 보안 목표는 "개인 키를 모르는 공격자는 시스템의 모든 파일에 액세스할 수 없습니다."(귀하의 구성표가 분명히 만족함) 또는 "해당 키를 제외하고 시스템에 액세스할 수 없는 공격자는 시스템에 액세스할 수 없습니다."와 같은 것입니다. 아래 파일에만 액세스 /home/dimm0k하고 임의 명령을 실행하지 마십시오."(귀하의 시나리오가 만족되지 않음)

하지만, 여기에 여러분이 생각하지 못했을 수도 있는 몇 가지 사항이 있습니다.

  • itunes.sh스크립트 에는 무언가가 거부되었다고 주장하는 주석이 있지만 case명령문에는 코드가 포함되어 있지 않으므로 전체 명령은 case작동하지 않으며 명령에 대한 유일한 필터링은 로 시작해야 한다는 것입니다 /home/dimm0k/progs/scripts/.
  • rsync.sh스크립트 에서는 자체 명령 rsync뿐만 아니라 로 시작하는 모든 명령을 허용합니다 rsync.
  • rsync.sh대본 에서 거절은 기이한 일 &이다 ;. 문자열은 셸에서 평가되지 않으므로 &셸 구문의 의미와 셸 구문을 고려하면 관련이 없습니다. ;이 문자열이 쉘에 의해 실행되는 경우 다른 많은 문자, 특히 `$|<>.
  • 어느 스크립트에서든 호출자가 최종적으로 실행되는 명령에 임의의 옵션을 전달할 수 있습니다. 이것이 itunes.sh허용하는 것은 에 무엇이 있는지에 따라 다르지만 /home/dimm0k/progs/scripts/좋지 않을 수도 있습니다. rsync.sh예를 들어 옵션을 전달하여 임의의 명령을 실행할 수 있도록 하려면 이를 사용합니다 -e.
  • 사용자가 액세스할 수 있는 파일을 제한하는 일은 없습니다. 특히 사용자가 ~/.ssh/authorized_keys그 안에 있는 파일 에 쓸 수 있는 경우 /home/dimm0k/progs/scripts/명령으로 덮어쓴 다음 다시 로그인하여 업로드한 내용을 실행할 수 있습니다.

전체적으로 이 스크립트는 제가 본 어떤 보안 조치도 실제로 시행하지 않습니다. 보안을 위해 사용자가 임의의 명령을 실행할 수 있도록 허용하는 것으로 취급하십시오. 기능적으로 명령 수정은 이상하며 협력 사용자가 스크립트를 사용할 때 추가 이스케이프 오류가 발생할 수 있습니다.

사용자에게 몇 가지 제한 사항을 적용하려는 경우 유용한 작업을 수행할 수 없습니다. 직접 수행하는 것을 잊어버리고 다음과 같은 강력한 도구를 사용하십시오.RSSH또는스폴리. chrooting도 살펴보세요. 가능하다면 최소한의 권한이 있는 전용 계정을 사용하세요. 더 나은 격리를 위해 사용자가 컨테이너 또는 가상 머신 내에서만 로그인하도록 허용합니다.

관련 정보