[Centos 7] FTP (File Transfer Protocol)

2022. 11. 28. 13:56리눅스(Linux)

FTP (File Transfer Protocol) 

   - TCP/IP 환경에서 파일 전송용 Application Protocol

   - 시스템에 등록된 사용자들을 위한 FTP Service와 익명의 모든 사용자에게 개방하는 Anonymous FTP Service 가 있음

   - FTP는 TCP기반으로서 TCP 서비스만 사용하게 됨

   - 20번의 Data 포트(데이터 전송용)와 Control 포트인 21번 포트 2개의 포트를 사용

   - FTP mode에 따라 Data 포트가 항상 20번 포트를 사용하는 것은 아님

   - Active와 Passive 모드가 있으며 접속요청을 하는 클라이언트가 결정하게 됨

 

 

$ Active Mode (능동형)

   - 20번 Data 포트 사용 

   - 클라이언트 5151포트로 21번 포트에 연결

   - 5151(Data 포트로 사용할 포트 번호 )알려줌

   - Server 20(Data 포트)로 5151(Data 포트)에 접근

   - Client에서 방화벽을 신경 써야한다. (Server에서 Client로 접속하기 때문에)

   - vsftp Default

 

$ Passive Mode (수동형)

   - 3267이라는 랜덤포트를 사용하겠다고 알려줌

   - 클라이언트가 해당 포트로 접근해서 송신

   - FTP에 사용할 랜덤 포트범위를 정해놓고 방화벽을 해제해놓아야 한다.

 

$ 설정 파일

FTP 환경설정

 

 

/usr → other 권한없음

/tmp → 퍼미션

로컬계정따로, 퍼미션계정 따로 설정 해야함

 

anonymous로 ftp 접속허용시키고 접속해도 other 권한이 없으면 업로드, 다운 불가능

/var/ftp에 other 쓰기권한을 주게되면 anonymous 접속이 불가

 

$ passive mode 변경

*Active mode(default )

*passive mode 변경
# firewall-cmd --permanent --add-port=3500/tcp 
# firewall-cmd --permanent --add-port=3550/tcp
   - 랜덤포트 추가 (--add-port=3500-3550/tcp )로도 가능 
# firewall -cmd --reload

# /etc/vsftpd/vsftpd.conf
44 # Passive_Mode Config
45 pasv_enable=YES
46 pasv_min_port=3500
47 pasv_max_port=3550

$ 로컬 사용자 리스트

   - 사용자 디렉터리 이동제한 설정

   - 이동제한을 제외시킬 사용자를 리스트 형태로 관리 

chroot_local_user=YES

   - 사용자 디렉터리 이동제한 설정 ( 기본값 : 모든 사용자가 자신의 홈 디렉터리 이외의  다른 디렉터리 이동이 불가)

   

chroot_list_enable=YES 

   - 사용자 디렉터리 이동제한 시 이동제한을 제외 시킬 사용자 목록 정의 파일인 chroot_list_file의 사용 여부를 결정

 

chroot_list_file=/etc/vsftpd/chroot_list 

   - 사용자 디렉터리 이동제한 시 이동제한을 제외 시킬 사용자의 목록을 정의한 파일의 위치 정의 

 

allow_writeable_chroot=YES 

   - chroot를 설정했을 때 같이 들어와야 하는 설정 중 하나, chroot가 적용 된 사용자에게만 쓰기 권한 부여

# vi /etc/vsftip/chroot_list
   - chroot_list에 계정명 나열하기만하면됨, 저기 계정에 있는 사용자만 이동제한을 받지 않음

# systemctl restart vsftpd

 

$ FTP 확장자별로 접근제어

 

# cat /home/user1(사용자디렉터리)  .message 
   - 접속시 메시지 띄움

# cat /var/ftp  .message 
   - 익명사용자 접속시 메시지 띄움

 

 

$ SFTP

   - SSH +FTP

   - 키파일을 사용해서 SFTP 설정

   - openssh만 활성화되어 있으면 사용가능

   - putty gen으로 key만들어서 접속 가능

'파일질라' 라는 tool 사용

$ TCP -Wrapper

   - 서버에 TCP연결 요청이 전송되면, 정당한 사용자인지 확인하는 Linux 보안기능

# vi /etc/hosts.allow 
   - 서비스 접속을 허용 할 HOST를 정의하는 파일

# vi /etc/hosts.deny 
   - 서비스 접속을 거부 할 HOST를 정의하는 파일
   - hosts.allow와 hosts.deny가 충돌하면 allow가 우선순위가 높다
   
[hosts.allow, hosts.deny 작성방법]
 구몬 [서비스명(데몬명)]:[호스트주소]
 EX1) sshd:1.1.1.1, 
 EX2) vsftpd:2.2.2.2 3.3.3.3 (두개 이상 제어)
 EX3) sshd:192.168.1.0/24  | sshd:192.168.1.0/255.255.255.0
 EX4) vsftpd:192.168.1.
 EX5) ALL:ALL

$ xferlog 

# cd /var/log
   - 시스템로그, 서비스로그들이 들어 있다.
   
# vi /var/log/xferlog
Mon Jun 13 12:49:50 2022 1 ::ffff:192.168.1.200 0 /usr/etc/Microsoft_Edge.lnk b _ i r itbank ftp 0 * i
   - FTP 로그파일로써 proftpd 혹은 vsftpd 데몬이 수행한 서비스를 기록하는 파일
Mon Jun 13 12:49:50 2022 1 ::ffff:192.168.1.200 0 /usr/etc/Microsoft_Edge.lnk b _ i r itbank ftp 0 * i
Mon Jun 13 12:49:50 2022   날짜시간
1     초단위 시간
::ffff:192.168.1.200    해당 IP주소
0    byte 단위
/usr/etc/Microsoft_Edge.lnk  작업한 파일명
b 파일형식   a(아스키형식), b (바이널리형식)
_     어떠한 특별한 행위가 나타났는지
i  어떠한 특별한 행위가 나타났는지
r 계정방식           r(인증사용자), a(익명계정) 뒤에 계정명
frp    연결방식
0 *    추가 인증시스템 사용했을 경우 숫자가 올라감
i 성공여부   c(작업이 성공했을 때), i(작업에 실패 했을 때)