Linux 서버로의 SSH 파일 전송은 허용하지만 파일 전송은 허용하지 않는 방법은 무엇입니까?

Linux 서버로의 SSH 파일 전송은 허용하지만 파일 전송은 허용하지 않는 방법은 무엇입니까?

일부 시뮬레이션을 실행하는 Linux 서버(Ubuntu 16.04)가 있습니다. 직원이 자신의 코드를 테스트할 수 있도록 이 서버에 대한 액세스 권한을 부여하고 싶지만(개인용 컴퓨터에서 원격으로 액세스) 서버에서 시스템으로 파일을 다운로드하는 것은 허용하지 않습니다.

파일은 꽤 크므로(수 GB) 파일의 전체 내용을 수동으로 컴퓨터에 복사하여 붙여넣는 것에 대해 걱정하지 않습니다.

그렇다면 그에게 SSH 액세스는 허용하되 SCP/WinSCP 액세스는 허용하지 않으려면 어떻게 해야 할까요?

답변1

그들이 정말로 데이터를 다른 곳으로 옮기기를 원한다면 그렇게 할 수 있을지 모르겠습니다. scp또는 실행을 방지할 수 있지만 sftp여전히 파일을 전송하는 다른 많은 방법이 남아 있습니다.

첫째, 정말 간단한 파일 전송 프로토콜은 다음과 같습니다.

ssh user@hostname 'cat /some/remote/file' > /some/local/path

그리고 cat거의 모든 프로그램으로 대체할 수 있습니다. 도대체 cp somefile /dev/stdout작동하는 것 같습니다.

댓글에는 특정 시간 이후 또는 특정 양의 데이터가 전송된 후 세션 연결을 끊는 것에 대한 제안이 있었습니다. 사용자가 만들 수 있는 연결 수를 제한하면 표면적으로는 작동하는 것 같습니다. 하루에 10개의 연결을 허용하고 1MB/연결로 제한하면 이동이 10MB로 제한됩니다. 아마도 정상적인 사용이 원치 않는 시나리오보다 훨씬 적은 데이터 전송을 필요로 한다면 이와 유사한 것이 작동하도록 만들어질 수 있을 것입니다.

하지만 파일을 다른 곳으로 보내면 어떻게 될까요? SSH/FTP/다른 서버를 설정하고 이를 통해 파일을 보내는 것은 쉬워야 합니다. 또는 HTTP(S)를 통해 최소한 및 curl같은 옵션이 있으며 서버 측 설정이 어렵지 않습니다. 기존 도구를 제거하는 경우 시스템에서 실행되는 프로그램이 데이터를 처리하는 동안/대신 데이터를 보내면 어떻게 될까요?--data @filename--upload-file


당신이 해야 할 일은 데이터에 액세스하는 프로그램이 일종의 샌드박스를 사용하여 수행할 수 있는 작업을 제한하는 것입니다.

유효한 업로드와 유효한 결과로 허용되는 항목에 대한 적절한 제어를 통해 코드 업로드 및 결과 다운로드를 위한 일부 인터페이스 외에 외부에 액세스할 수 없는 가상 머신에서 코드가 실행되도록 준비합니다. 아니면 다음과 같은 것을 사용하십시오seccomp코드가 수행할 수 있는 작업을 제한합니다.

답변2

/etc/ssh/sshd_config를 다음과 같이 편집할 수 있습니다.

ForceCommand           /bin/sh
PermitOpen             0.0.0.0
AllowTcpForwarding     no
PermitTunnel           no
# Subsystem sftp       /usr/lib/openssh/sftp-server
PermitUserEnvironment  no

서버에서 scp를 제거하고 그의 계정에 대한 sudo 액세스도 제거합니다. 필요에 따라 scp를 다시 추가할 수 있습니다.

예의 Brad와 Mike의 답변https://serverfault.com/questions/28858/is-it-possible-to-prevent-scp-while-still-allowing-ssh-access

관련 정보