[리눅스] FTP server
FTP
파일을 다운로드 할 수 있는 사이트를 FTP 사이트라고 한다.
-
FTP(File Transfer Protocol)는 인터넷상의 컴퓨터들간에 파일을 교환하기 위한 표준
-
FTP 역시 인터넷의 TCP/IP 응용 프로토콜 중의 하나이다.
-
FTP는 웹 페이지 파일들을 인터넷상에서 모든 사람이 볼 수 있도록 하기 위해 저작자의 컴퓨터로부터 서버로 옮기는 과정에서 사용된다.
-
또한, 다른 서버들로부터 자신의 컴퓨터로 프로그램이나 파일들을 다운로드 하는 데에도 많이 사용된다.
FTP 방식
웹브라우저들은 일반적으로 Passive Mode로 설정되어 있고, 알FTP나 WS-FTP, CuteFTP와 같은 FTP 클라이언트 프로그램들은 일반적으로 Active Mode가 기본값으로 설정되어 있다.
- FTP Active Mode의 동작 방식
FTP Active Mode의 동작 방식.
- 클라이언트에서 서버의 21번 포트로 접속 후 클라이언트가 사용할 두 번째 포트를 서버에 알려준다.
- 서버는 클라이언트로 서버로 부터 Ack를 보내고, 서버의 20번 포트는 클라이언트가 알려준 두 번째 포트로 접속을 시도한다.
Active Mode 의 문제점
-
일반적인 TCP/IP의 특징인 ‘클라이언트가 서버에 접속을 시도하는 것’ 이 아니라 ‘서버가 클라이언트에 접속을시도한다’ 는 것이다.
-
이 때문에 만약 클라이언트 PC등에 방화벽이 설치되어 있거나 FTP를 잘 이해하지 못하는공유기 등을 사용하여 외부에서의 접속을 허용하지 않는다면 세 번째 프로세스가 작동하지 않게 되어 FTP 접속이 제대로 되지 않는 문제점이 있다.
-
이러한 경우 FTP 접속은 되지만 이후 데이터 목록을 받아오지 못하여 에러가 발생하게 된다.
-
Active Mode의 문제점을 해결하기 위한 대안으로 디자인된 Passive Mode는 클라이언트에서 서버의 21번 포트로 접속을 시도하면, 서버에서는 사용할 두번째 포트를 클라이언트에게 알려준다.
Passive Mode 의 문제점
- Passive 모드에서는 두 번째 data포트로서 Active 모드가 사용했던 20번을 사용하지 않고 대신 1024 이후의 임의의 비 특권 포트를 사용하게 된다.
- 따라서 Passive 모드는 서버에서 클라이언트로 연결을 시도하는 Active 모드의 문제점을 해결했지만, 서버의 비특권 포트(1024 ~ 65535)를 방화벽에서 모두 열어 두어야 한다는 문제점이 있다.
- 그러나 wu-ftp나 proftpd등 대부분의 ftp 데몬에서는 클라이언트가 Passive Mode로 접속 시 사용할 수 있는 포트를 제한 설정 할 수 있는 기능을 지원하므로 이의 문제점을 해결할 수 있다.
- Passive 모드는 클라이언트에서 서버 쪽 21번 포트로 접속 시도 하고 데이터 포트도 클라이언트에서 서버의 임의의 포트로 접속하여 데이터를 받아오는 방식이다.
vsftp
Vsftpd FTP Server는 UNIX, LINUX 시스템에서 사용할 수 있는 free FTP Server(라이선스는 GPL)이다.
- 보안, 성능, 안전성에서 최상의 제품으로 vsftp 자체 보안 권고가 나온 적이 없다.
- Linux(Redhat, SuSE, Debian), Solaris, FreeBSD, OpenBSD, HP-UX, IRIX 등을 지원
주요기능
-
가상 IP별 별도의 환경설정 기능(설정 파일의 listen_address=이용)
-
가상 사용자 설정
-
전송 대역폭 지정
-
PAM 지원(버전 1.2.0부터 PAM을 통한 wtmp에 로그를 남김) 장착형 인증 모듈(PAM: pluggable authentication module) : 다중 저 수준 인증 계획을 고 수준 API에 통합시키는 메커니즘. 인증에 의존하는 프로그램들이 독립적으로 인증에 쓰일 수 있게 한다.
-
xferlog 표준로그보다 상세한 자체 로그 파일 형식 지원
-
standalone 방식과 xinetd를 통한 운영방식 모두 지원
-
IP별 다른 환경설정 파일 지정 가능(tcp_wrappers와 함께 사용 시)
Linux log file
시스템 로그 파일이란?
- 시스템에 접속하거나 하고 있는 컴퓨터의 정보를 기록하는 파일
시스템 로그 파일 위치 : /var/log/
- telnet. ssh 접속에 대한 유저 로그인 인증 기록(btmp) - # lastb로 확인
- #ls -l log -> btmp 파일 확인가능
- 마지막 접속기록 : #lastb명령어로 확인가능
- 부팅 시 시스템에 의해 기록되는 로그(#dmesg) -/var/log/dmesg
현재 시스템에 로그인한 각 사용자의 상태를 저장하는 바이너리 파일
- utmp 위치 : /var/run/utmp
- w, who, users 명령어로 내용 확인 가능
- JCPU : 모든 프로세스들에 의해서 소모된 CPU 사용 시간
- PCPU : 현재 프로세스에 의해서 소모된 CPU 사용 시간
로그인, 로그아웃, 시스템의 재부팅에 대한 누적 정보 기록
- wtmp 위치 : /var/run/wtmp
- 바이너리 파일로 last 명령어로 내용 확인 가능
계정 사용자들이 마지막으로 로그인한 정보를 기록
- lastlog 위치 : /var/log/lastlog
- 바이너리 파일로 lastlog 명령어로 내용 확인 가능
부팅 시 서비스 데몬들의 실행 상태를 기록
- boot .log 위치 : /var/log/boot.log
로그인에 실패한 내용을 기록하는 바이너리 파일로 # lastb 명령어 사용
- loginlog, btmp 위치 : /var/log/btmp
Vsftpd FTP Server 설치
(6) /etc/vsftpd.conf 파일 주요 내용
- #anonymous 사용자의 접속 허용여부, 즉 anonymous ftp(default=YES)
- 공개된 형태의 FTP서버로 운영할 것이 아니라면 NO로 설정
- anonymous_enable=YES
#write 명령어 허용여부(default=NO)
- write_enable=YES
#로컬 계정 사용자용 umask (default=077), FTP에 접속하여 새로 만들어지는 파일과 디렉토리의 기본 퍼미션을 설정(022 , 디렉토리는 755(drwxr—r–), 파일은 644(-rw-r—r–))
- local_umask=022
#anonymous 사용자가 파일을 업로드 할 수 있는지 여부(default=NO)
- anonymous_upload_enable=YES -주석제거
- anon_root=/ftp/anonymous -> 익명 사용자 로그인 시 홈 디렉토리
#anonymous 사용자가 디렉토리 생성 허용여부(default=NO)
- anon_mkdir_write_enable=YES - 주석제거
#파일 전송 로그를 남길 것인지 여부(default=YES)
- xferlog_enable=YES
#xferlog 표준포맷으로 로그를 남길 것인지 여부(default=YSE)
- xferlog_std_format=YES
#전송할 로그 파일명
- xferlog_file=/var/log/vsftpd.log
#FTP 접속 사용자가 자신의 홈 디렉토리에서만 작업하도록 제한하기 위한 설정
#(default=NO), 제한이 필요할 경우 YES로 바꾼 후 제한할 사용자 ID를
- chroot_local_user=NO
#/etc/vsftpd.chroot_list에 기록한다.
#chroot_list_file=/etc/vsftpd.chroot_list
#FTP-data 전송포트 20번으로 지정여부(default=YES)
- connet_from_port_20 =YES
#ASCII 파일의 업로드, 다운로드 가능여부(default=NO)
#ascii_upload_enable=YES
#ascii_download_enable=YES
#FTP 서버 접속시 로긴 메시지(default=vsFTPd 버전번호)
- ftpd_banner= Welcome to Gachon University FTP service.
실습
(6)번 실습
/etc/vsftpd.conf 파일 수정(25번 YES, 31, 40, 44, 155 주석제거 후 저장)
위는 내부 접속 아래는 외부접속
ftp 클라이언트 filezila가 있다.
윈도우 10에서 서버에 접속하기
FTP 명령어
- ascii : 전송 모드를 ASCII모드로 설정한다.(ftp> ascii또는 as)
- binary : 전송 모드를 BINARY모드로 설정한다.(ftp> binary또는 bi)
- bell : 명령어 완료 시에 벨 소리를 나게 한다.(ftp> bell)
- bye : ftp접속을 종료하고 빠져나간다.(ftp> bye)
- cd : remote시스템의 디렉토리를 변경한다.(ftp> cd 디렉토리명)
- cdup : remote시스템에서 한 단계 상위 디렉토리로 이동한다.(ftp> cdup)
- chmod : remote시스템의 파일 퍼미션을 변경한다.(ftp> chmod 755 index.html)
- close : ftp접속을 종료한다. (ftp> close)
- delete : remote시스템의 파일을 삭제한다.(ftp> delete index.old)
- dir(=ls) : remote시스템의 디렉토리 내용을 디스플레이한다.(ftp> dir)
- disconnect : ftp접속을 종료한다.(ftp> disconnect)
- exit : ftp접속을 종료하고 빠져나간다.(ftp> exit)
- get : 지정된 파일하나를 가져온다.(ftp> get index.html)
- hash : 파일전송 도중에 “#”표시를 하여 전송중임을 나타낸다.(ftp> hash)
- help : ftp명령어 도움말을 볼 수 있다.(ftp> help또는 help 명령어)
- lcd : local시스템의 디렉토리를 변경한다.(ftp> lcd 디렉토리명)
- ls : remote시스템의 디렉토리 내용을 디스플레이한다. (ftp> ls 또는 ls -l)
- mdelete : 여러 개의 파일을 한꺼번에 지울 때 사용한다.(ftp> mdelete *.old)
- mget : 여러 개의 파일을 한꺼번에 가져 오려할 때 사용한다. (ftp> mget *.gz)
- mput : 한꺼번에 여러개의 파일을 remote시스템에 올린다.(ftp> mput *.html)
- open : ftp접속을 시도한다.(ftp> open 168.126.72.51또는 open ftp.kornet.net)
- prompt : 파일 전송 시에 확인과정을 거친다. on/off 토글 (ftp> prompt)
- put : 하나의 파일을 remote시스템에 올린다.(ftp> put index.html)
- pwd : remote시스템의 현재 작업디렉토리를 표시한다.(ftp> pwd)
- quit : ftp접속을 종료하고 빠져나간다.(ftp> quit)
- rstatus : remote시스템의 상황(version, 어디서, 접속ID등)을 표시한다.
- rename : remote시스템의 파일명을 바꾼다.(ftp> remote 현재 파일명 변경 파일명)
- rmdir : remote시스템의 디렉토리을 삭제한다.(ftp> rmdir 디렉토리명)
- size :remote시스템에 있는 파일의 크기를 byte단위로 표시한다.(ftp> size index.html)
- status : 현재 연결된 ftp 세션모드에 대한 설정을 보여준다.(ftp> status)
- type : 전송 모드를 설정한다.(ftp> type 또는 type ascii 또는 type binary
Winscp을 이용한 파일전송
Winscp는 윈도우즈용 그래픽 유저 인터페이스 SFTP 및 FTP 클라이언트 프로그램으로 오픈 소스 프리웨어.
- Winscp를 사용하여 SFTP(SSH 파일 전송 프로토콜) 또는 SCP(secure Copy Protocol)서비스를 사용하는 SSH(SecureShell)서버나 FTP(File Transfer Protocol)서버와 연결 할 수 있다.
Winscp 다운로드 및 설치
- https://winscp.net -> download -> for Ms-windows (WinSCP installer)
FTP 보안설정
댓글남기기