Linux

Linux 명령어 - (6) server 관리 - FTP

우당탕탕인생기 2023. 8. 18. 21:20

2. FTP(File Transfer Protocol)

  • 대용량 데이터 전송에 사용
  • Protocol 방식은 TCP 방식
  • 인증 및 제어 포트는 21번 사용

데이터 activce 모드(포트 20번) 

  • 클라이언트가 결정해서 서버에게 포트를 알려주고 서버는 클라이언트가 알려준 포트로 데이터를 전송
  • 방화벽을 모두 오픈해야함( 클라이언트가 결정한 포트가 어딘지 모르기 때문에)

데이터 passive 모드 : 서버가 데이터 전송 포트를 결정

  • 서버가 데이터 전송포트를 결정함
  • 서버의 설정은 관리자가 하므로, 해당 포트만 열어주면 됩니다.
  • 클라이언트가 서버에 접속하여 데이터를 가져 갑니다.

 

Linux 명령어

1. /etc/vsftpd/vsftpd.conf 에서 설정
2. systemctl start vsftpd 로 실행하면 된다.
3. 해당 포트 방화벽을 열어줘야합니다.
 


1. /etc/vsftpd/vsftpd.conf 에서 설정

yum(dnf) install -y vsftpd  # vsftp 라이브러리 설치

vi /etc/vsftpd/vsftpd.conf  # 설정파일 수정
또 이렇게 많이 나오지만 여기서 설정한것들은 정해져있다.

(1) xferlog 설정 -> 데이터를 주고받을때 로그를 기록해준다.

 
 
(2) 서버에서 일정시간 작업이 없으면 자동 timeout 되는 기능과, 하나의 데이터 전송시간이 일정시간 지나가면 timeout 되는 기능이다.

 
(3) 해당 FTP에 접속했을 때 처음 나오는 배너를 지정할 수 있다. (이부분을 잘 지정해줘야 한다. 기본설정인 welcome으로 되어 있으면, 보안이슈로 법적으로 갔을때 문제가 있다고한다)

 
(4)chroot 설정 : chroot가 설정된 사용자는 자신의 홈디렉토리의 상위 디렉토리까지 다 볼 수 있으며, 설정이 안된 사용자는 자신의 홈디렉토리가 최상위 디렉토리로 보이게되고 상위 디렉토리는 볼 수 없게 된다(보안이슈로 인해 chroot설정을 신경써주는게 좋다) chroot_list에는 제외할 사용자를 설정해준다.
이 설정을 해줬을 때는 마지막에 allow_writeable_chroot=YES 를 해줘야 한다.

 

여기서 active 모드는 따로 설정할 것이 없지만, passive 모드는 따로 설정을 해줘야 한다

또한, active모드는 모든 port을 열어야 하기때문에 보안문제가 발생할 수 있어 가급적 passive 모드를 해주는것이 좋다.
 

pasv_enable=YES
pasv_min_port=65000  # 최소 포트
pasv_max_port=65100  # 최대 포트

 


2. systemctl start vsftpd 로 실행하면 된다.

systemctl start vsftpd ## vsftpd 실행
systemctl enable vsftpd ## 부팅을 해도 항상  실행될 수 있도로 설정

 
 


3. 해당 포트 방화벽을 열어줘야합니다.
이때는 firewall-cmd 명령을 통해 설정해야 합니다.
 

firewall-cmd --permanent --zone=public --add-port=21/tcp  # 인증제어포트
firewall-cmd --permanent --add-port=최소포트-최대포트/tcp  # 어차피 설정한 포트가 public 이기때문에 zone 설정은 따로 안해줘도 된다.
firewall-cmd --reload  # 반드시 reload를 해줘야 한다.

아니면 vi 편집기를 통해서도 설정 가능하다.

vi /etc/firewall/zones/public.xml

 

여기에 포트를 추가 하면된다.

 

**FileZilla

 
FTP 전송을 손쉽게 도와주는 오픈소스프로그램이다.
 
1. 우선 해당 연결한 서버 호스트을 적어준다.
 

 

2. FTP 방식 선택

  • passive 모드는 수동형, active 모드는 능동형으로 하면된다.

 

chroot 제외 사용자로 로그인하면 이처럼 홈디렉토리가 최상위 디렉토리로보이게된다.

 
chroot 사용자는 자신의 홈디렉토리위의 상위 디렉토리도 보인다.


상황

FTP는 패시브모드로 사용하면 유저 aaa와 bbb중 bbb만 chroot 제외
포트는 60000 ~ 60100 사용

여기서 window11에  있는 a.png 파일을 서버(10.0.0.11)로 전송하며,
서버에 있는 aaa.txt 파일을 window11로 파일 전송
방화벽 설정, 21번 포트는 인증 및 제어 포트이기때문에 등록
chroot 제외에 유저 bbb추가

 

 

3. 파일전송(FileZilla 사용)

 

 
 
(1) window에서 1.png파일을 서버로 전송
- 간편하게 드래그 하면된다. 보시는바와 같이 서버 디렉토리에 1.png 파일이 있는걸 볼 수 있다.

(2) 서버에서 window로 aaa.txt파일 전송
 

 
물론 cmd 에서 get이랑 put 명령어로도 보낼 수 있다.
 
put (파일명) (서버에서의 파일)-> 작업하는 서버의 파일을 서버로 전송
get (파일명) -> 서버에서의 파일을 작업하는 서버의 파일로 전송
 

작업하는 서버의 b1.txt라는 파일을 메인서버의 aaa.txt파일이라는 이름으로 전송한다.

 
 


** xferlog에 자동으로 기록이 되기 때문에 이 파일을 읽어보면 어떤 파일이 전송됐는지 알 수 있다.

i -> in 
o -> out 을 뜻한다.