기본적으로 파일 전송 프로토콜의 대명사는 FTP 이다. 

http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch15_:_Linux_FTP_Server_Setup#.WP8e71I680p
http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch15_:_Linux_FTP_Server_Setup#.WP8e71I680p

FTP는 TCP Port 20, 21 을 사용해서 제어 채널과 데이터 채널을 개방하고 데이터를 송수신한다. 그러나 1971년도에 설계되었을 당시에는 보안(Security)이슈가 대두되지 않았을 시기였다. 대부분의 FTP는 전송 내용을 암호화하지 않기 때문에 이것을 가로채는 기밀성 침해 공격이 가능하다.


서론이 너무 길었는데, 이것을 해결하는 대안이 된 프로토콜이 SFTP이다. 이는 기존 22번 포트를 사용해서 사용하는 SSH의 터널링 기능을 파일전송에도 이용하는 것이다. 사실 나도 그동안에는 무조건 SFTP만 썼기 때문에 파일 전송으로 골치아플 일은 없었다.


그러나 WebOS 프로젝트를 하면서 참으로 당황스러운 경험을 하게 되었다.

command not found ㅋㅋㅋㅋㅋㅋㅋㅋㅋ


그동안 아무생각없이 잘 쓰고 있던 SFTP는 사실 open-ssh에서 제공되는 기능이었고, WebOS의 ssh는 open-ssh가 아니라, BusyBox: The Swiss Army Knife of Embedded Linux 라는 툴에 포함된 Dropbear-ssh를 이용하고 있었다. 그리고 dropbear에는 sftp 기능이 구현되어있지 않았다. 확인해보니 아래와 같은 질문글에 답변한 친절한 개발자의 설명을 보면 일단은 SFTP를 개발할 생각은 없어보인다.


각설하고, 다른 방법을 찾아보자. 우선은 가장 쉬운 방법. 

SCP를 사용하는 것이다.


호스트 컴퓨터를 나의 맥북프로(192.168.0.11)이라고 하고,

클라이언트 Nexus 7 WebOS(192.168.0.7)이라 할 때 

아래와 같은 방법으로 파일을 송수신 할 수 있다.


맥에서 LuneOS로 파일 넣기

scp file... user@host.domain:path

scp -P ssh포트번호 파일명 계정명@IP주소:/디렉토리/경로


LuneOS에 있는 파일을 맥으로 파일 꺼내오기

scp user@host.domain:path ... dest

scp -P 포트번호 계정명@IP주소:/디렉토리/경로/파일명  저장할호스트의경로

*호스트에서 명령어를 실행하는 것이다.


WebOS는 어쨌든 SCP를 이용하도록 설계한 것 같다.

검색 중에 발견한 것인데, 디지털 포렌식을 할때보면 NAS 같은 장비에서 어떻게서든 파일을 꺼내와야하는 경우가 있는데 이때 SFTP, SCP, FTP 모두가 안된다면 어떡할까?


Netcat으로도 할 수 있다.. 


외부 서버(test.cpuu.xyz)에서 아래와 같이 포트를 연다.

그리고 대상 타겟(예를들면 여기에서는 LuneOS)에서 아래와 같이 명령어를 입력

이렇게 하면 LuneOS 내부의 파일을 외부서버로 꺼내올 수 있다.


반대로 서버의 파일을 LuneOS에 넣으려면..

서버(10.0.2.2)에서

LuneOS에서


*참고로 일반적인 리눅스라면 그냥 nc를 열고 닫는 부분을 반대로 바꿔서 실행하면 꺼내오든 집어넣든 편리하게 이용하면 된다. 이렇게 서버의 경우와 클라이언트를 나누어서 따로 실행하는 이유는, LuneOS 내부의 nc 역시 풀 패키지가 아니라 busybox용 버전이라서 -l 옵션을 제공하지 않기 때문이다. 따라서 반대쪽에서 포트를 열고 리버스 방식으로 파일을 보내는 것이다.


**기능이 정상적으로 작동한게 맞는지, 무결성 체크를 해주는 것이 좋다. md5sum이나 shasum 해보아서 송신한 쪽과 수신한 쪽의 파일의 해시값이 일치하면 성공.

CPUU님의 창작활동을 응원하고 싶으세요?