SCP를 사용하여 읽을 수 있는 일종의 저장소를 설정해야 합니다. 클라이언트 사용자는 다른 어떤 것도 볼 수/손상/실행할 수 없습니다.
나는 끝까지 읽었다SSH/SCP/SFTP 사용자를 특정 디렉터리로 제한마찬가지로 rssh, scponly 및 chroot를 기반으로 하는 방법도 잘 알려져 있습니다. 또한 SFTP를 무시합니다.
이상적으로는 진정한 chroot 기반 접근 방식을 위해 아무것도 설치하거나 라이브러리 등을 복사하고 싶지 않습니다. 그래서 나는 다음과 같은 쉘 스크립트를 생각해 냈습니다.
#!/bin/sh
echo "$(date) $*" >> /tmp/scpwrap.log
# Allow only plain SCP get, neither -r nor -v etc
if [ "${1}" = "-c" ] && expr "${2}" : '^scp -f ' >/dev/null
then
shift
files=$(echo $1 | sed 's/scp -f //')
echo "SCPing ${files}" >> /tmp/scpwrap.log
# However, permit multiple files (e.g. /tmp/x*)
for f in ${files}
do
if [ ! -O "${f}" -o -w "${f}" ]
then
echo "Can only get read-only files owned by $(whoami)." >&2
ls -l "${f}" >> /tmp/scpwrap.log
exit 1
fi
done
echo "Executing $*" >> /tmp/scpwrap.log
exec $*
fi
[ "${1}" = "-c" ] && shift
echo "Executing $* not permitted." >&2
exit 1
그런 다음:
# useradd -m -s /tmp/scpwrap.sh scpwrap
이제 저장소 내용을 ~scpwrap에 복사하고 올바른 소유권/권한을 부여하면 다음을 허용하기에 충분할 수 있습니다.
client$ scp 'scpwrap@reposerver:repo/bla*' /tmp
너무 단순해 보이지만... 문제나 개선 사항이 있나요? 매우 감사합니다!
답변1
우려 사항: 보안 셸 스크립트를 작성하는 방법을 확실히 모르시는 것 같습니다. 귀하의 코드는 분명히 깨졌습니다.큰따옴표가 누락되었습니다., 어느단순한 기능적 버그가 아닌 보안 버그입니다..
정말로 보안을 유지하고 싶다면 직접 작성하지 마세요. 보안 엔지니어로서 저는 기존 솔루션이 이미 존재하기 때문에 귀하가 직접 만든 솔루션을 완전히 거부합니다. 언뜻 보기에 고장난 것처럼 보이지 않더라도 이렇게 할 것입니다. rssh 또는 scponly와 같은 도구를 사용하십시오. 이를 설치하는 것은 자신의 스크립트를 작성하는 것보다 작업량이 적고 더 안전합니다.