일부 시뮬레이션을 실행하는 Linux 서버(Ubuntu 16.04)가 있습니다. 직원에게 이 서버에 대한 액세스 권한을 부여하여 직원이 자신의 코드를 테스트할 수 있도록 하고 싶지만(개인용 컴퓨터에서 원격으로 액세스함) 서버에서 시스템으로 파일을 다운로드할 수는 없도록 하고 싶습니다.
파일은 꽤 크므로(수 GB) 파일의 전체 내용을 수동으로 복사하여 컴퓨터에 붙여넣는 것에 대해 걱정하지 않습니다.
그렇다면 SCP/WinSCP 액세스는 허용하지 않고 SSH 액세스는 허용하려면 어떻게 해야 할까요?
답변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를 다시 추가할 수 있습니다.
브래드와 마이크의 답변https://serverfault.com/questions/28858/is-it-possible-to-prevent-scp-while-still-allowing-ssh-access