
일부 시뮬레이션을 실행하는 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