Solaris 및 Linux 서버 및 OpenSSH를 사용하면 "ssh"를 사용하여 쉘 액세스를 허용하면서 "scp"를 사용하여 파일을 복사하지 못하게 할 수 있습니까?
'ssh $ server "cat file"'형식 파일 액세스를 방지하기가 훨씬 어렵다는 것을 알고 있지만 초보자 용 "scp"중지에 대해 알아야합니다.
실패하면 서버 측의 모든 SCP 액세스를 확실하게 기록 할 수있는 방법이 syslog
있습니까?
Solaris 및 Linux 서버 및 OpenSSH를 사용하면 "ssh"를 사용하여 쉘 액세스를 허용하면서 "scp"를 사용하여 파일을 복사하지 못하게 할 수 있습니까?
'ssh $ server "cat file"'형식 파일 액세스를 방지하기가 훨씬 어렵다는 것을 알고 있지만 초보자 용 "scp"중지에 대해 알아야합니다.
실패하면 서버 측의 모든 SCP 액세스를 확실하게 기록 할 수있는 방법이 syslog
있습니까?
답변:
/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
대신 사용자가 무엇을 사용할지 결정합니다. 액세스 할 수있는 명령이 몇 개 밖에 없으면 일반 ssh
쉘을 호출 할 수있는 기능을 제거합니다 .
AllowUsers root
PermitRootLogin forced-commands-only
PermitUserEnvironment no
AllowTcpForwarding no
PermitTunnel no
# Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem smb-reload /usr/bin/smbcontrol smbd reload-config
Subsystem status /opt/local/bin/status.sh
ssh root@example -s smb-reload
만약 당신이 정말로 정상적인 쉘을 실행할 수 있어야한다면, 당신이 정말로 기대할 수있는 것은 느리게하고 더 어렵게 만드는 것입니다.
다른 사람들이 지적했듯이 scp를 차단 할 수 없습니다 (음, 당신은 할 수 있습니다 : rm /usr/bin/scp
있지만 실제로는 어디에도 가지 않습니다).
가장 좋은 방법은 사용자의 쉘을 제한된 쉘 (rbash)로 변경 한 다음에 만 특정 명령을 실행하는 것입니다.
파일을 읽을 수 있으면 화면에서 복사 / 붙여 넣기 할 수 있습니다. 이진 파일? xxd / uuencode / mmencode 모두이 문제를 해결합니다.
활동을 추적하는 데 도움이되도록 프로세스 계정을 사용하는 것이 좋습니다.
문자 그대로 무한한 추가 파일 전송 메커니즘을 허용하는 경우 "scp"를 중지해도 아무런 효과가 없습니다. scp를 허용하지 않지만 파일 복사의 다른 메커니즘을 허용하는 것은 감사 자에게 거짓말을하는 방법입니다. 감사 자들은 종종 거짓말을 요구합니다. 일반적으로 감사인이 관리자와 함께 가짜 수정을 수행하여 "scp 파일 전송 명령이 비활성화되어 scp를 사용하여 서버에서 파일을 복사 할 수 없도록"하는 것과 같은 내용을 알 수 있습니다.
이제 합리적인 로깅 메커니즘이 좋을 것입니다. 어쩌면 감사는 마침내 Linux에서 작동합니다. 어쩌면 Solaris가 마침내 일부 메커니즘을 추가했거나 dtrace를 안전하게 사용할 수 있습니다. 파일에 액세스 할 때마다 OS가 기록되도록하는 것이 합리적입니다. 물론 "읽기"와 "복사"사이에는 차이가 없습니다. 그러나 이것은 감사자를 만족시키고 시스템에 상당한 보안을 제공 할 수 있습니다. 로그가 너무 시끄러워서 데이터가 쓸모 없거나 엄청나게 짧은 감사 추적을 유지해야 할 수도 있습니다. (예를 들어 모든 read ()를 기록 할 수는 없습니다. 놀라운 일을하는 하나의 응용 프로그램은 모든 open ()을 기록하는 것을 재앙으로 만들 수 있습니다).
어떤 SSH가 필요한지에 따라 패킷 크기가 1400 바이트보다 큰 경우 IPTables를 사용하여 세션을 종료하여 사소한 파일을 달성 할 수 있습니다. 이것은 대화식 ssh가 대부분 작동한다는 것을 의미하지만, 1500 MTP를 가정 할 때 scp가 1499 바이트보다 큰 파일의 경우 1500 바이트 패킷을 보내려고하면 연결이 종료됩니다.
이것은 또한 당신이 언급 한 "catting"공격을 막을 것입니다.
불행히도 이것은 화면에 1400 자 이상을 그려야하거나 긴 파일을 만들거나 긴 디렉토리 목록을 작성해야하는 경우 텍스트 편집기로 일부 파일을 편집하는 데 문제가있을 수 있음을 의미합니다.
가장 간단한 경우이 작업을 수행하는 명령은 다음과 같습니다
iptables -I OUTPUT -p tcp --dport 22 -m length --length 1400:0xffff -j DROP
패킷 길이 검사를 ipt_recent와 결합하여이 작업을 더 잘 수행 할 수 있으므로 설정된 시간 내에 1400 바이트보다 큰 제한된 수의 패킷 (예 : 5 초당 8 패킷)을 허용 할 수 있습니다. 이렇게하면 최대 12k의 패킷이 미끄러질 수 있습니다. 파일 등을 편집하는 데 필요한 대화 형 기능을 제공 할 수도 있습니다. 물론 패킷 수를 조정할 수도 있습니다.
이것은 다음과 같이 보일 수 있습니다
iptables -I OUTPUT -p tcp --dport 22 -m length --length 1400:0xffff \
-m recent --name noscp --rdest --set
iptables -I OUTPUT -p tcp --dport 22 -m length --length 1400:0xffff \
-m recent --name noscp --rdest --update --seconds 5 --hitcount 8 \
-j REJECT --reject-with tcp-reset
위의 규칙 예는와 같은 scp 업로드 만 방지 scp myfile.data remote.host:~
합니다. 와 같은 scp 다운로드를 추가로 방지하려면 scp remote.host:~/myfile.data /local/path
위 규칙을 반복하되 대신 --dport
로 교체하십시오 --sport
.
단서가있는 해커는 자신의 컴퓨터에서 MTU를 1400 미만으로 설정 (또는 강제로 mtu 또는 이와 유사한 방법)하여 이러한 제한을 해결할 수 있습니다. 또한 특정 사용자로 제한 할 수는 없지만 iptables 행을 적절하게 수정하여 IP로 제한 할 수 있습니다 !!
건배, 데이비드 고
가장 좋은 방법은 scp를 잠그는 것이 아니라 읽기 액세스를 막기 위해 ACL이있는 파일 시스템을 사용하는 것입니다. SELinux를 사용하여 특정 응용 프로그램이 특정 파일을 읽지 못하게 할 수 있습니다.
번호 scp
와 ssh
동일한 포트에서 작동하고 동일한 프로토콜을 사용합니다. ssh
세션 을 열면 같은 옵션을 사용하여 후속 scp 통화와 연결을 공유 할 수도 있습니다 ControlMaster
.
사람들이 머신에서 특정 파일을 복사하지 못하게하려면 머신에 어떤 종류의 쉘 액세스도 제공해서는 안됩니다.
시스템을 완전히 쓸모 없게 만드는 많은 시스템 유틸리티를 제거하지 않고 파일 전송을 차단하는 것은 불가능합니다. 파일 내용을 stdout에 표시 할 수있는 모든 것과 stdin을 stdout에 쓸 수있는 모든 것을 제거해야하며, 남은 것들을 모두 제거 할 때까지 셸 액세스를 허용 할 필요가 없습니다. 조금도.
대신 로깅 대안에 중점을 둘 것입니다.
거의 모든 배포판에 포함되어 있으며 그렇지 않은 프로그램에는 설치하기 쉬운 "스크립트"라는 프로그램이 있습니다. 선택적으로 타이밍 데이터와 함께 쉘의 모든 입력 및 출력을 기록하는 세션 로거이므로 사용자가 어깨를 보면서 보았을 때처럼 재생하고 볼 수 있습니다. (어쨌든 95 %는 ncurses가 관련되어있을 때 때로는 출력을 보풀하지만 자주는 아닙니다.)
매뉴얼 페이지에는 시스템의 로그인 쉘로 설정하기위한 지침이 포함되어 있습니다. 사용자가 로그를 삭제할 수없는 위치에 로그가 있는지 확인하십시오 (chattr을 통해 설정 가능한 추가 전용 파일 시스템 속성이이 기능에 유용 할 수 있습니다. ACL 또는 스크립트를 비활성화 할 수 있음)
이렇게해도 사용자가 시스템에서 파일을 복사하지 못하게 할 수는 없지만 사용자가 언제 어떤 작업을 수행했는지 검토 할 수 있습니다. 우회하는 것이 불가능하지는 않지만 우회는 거의 확실하게 로그에서 끝나므로 누군가가 정확히 무엇을 숨길 수 있더라도 적어도 누군가가 좋지 않다는 것을 알 것입니다.
서버에서 openssh-clients (또는 이와 동등한)를 제거 할 수 있다고 생각합니다.
scp 클라이언트는 데이터를 복사 할 때 서버에서 scp를 호출하므로 서버에서 scp를 제거하면 괜찮을 것입니다.
$ scp bla server:/tmp/
...
debug1: Sending environment.
debug1: Sending env LC_ALL = en_US.utf8
debug1: Sending env LANG = en_US.utf8
debug1: Sending env XMODIFIERS = @im=ibus
debug1: Sending env LANGUAGE = en_US.utf8
debug1: Sending command: scp -v -t /tmp/
bash: scp: command not found
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype eow@openssh.com reply 0
lost connection