정보보안공부

Linux_리눅스 FTP 본문

Linux

Linux_리눅스 FTP

Steady_sp 2018. 7. 31. 11:16

리눅스 FTP

- 오라클 가상 머신 사용

- CentOS7

- Windows 10

 

<FTP>

 

#1 FTP ( File Transfer Protocol ) - 20번 ( data ) 포트 , 21번 ( control ) 포트

- FTP는 TCP/IP 기반의 원격으로 떨어져 있는 서버와 클라이언트 사이의 파일 전송을 위한 통신 프로토콜중 하나이다.

- FTP 서비스는 아이디 및 패스워드가 암호화되지 않은 채로 전송되어 간단한 스니퍼에 의해서도 아이디 및 패스워드가 노출될 수 있으므로 반드시 필요한 경우를 제외하고는 FTP 서비스 사용을 제한해야한다.

- 동작모드로는 Active mode 와 Passive mode가 있다.

 

#2 FTP 서버구축후 FTP 실습해보기 ( 서버 : 리눅스 - 클라이언트 : 윈도우 )

서버 : 1.0.0.100 ( 리눅스 )

클라이언트 : 1.0.0.1 ( 윈도우 )

 

*** Server - vsftpd.x86_64 설치

 

 

-> yum을 이용해 vsftpd설치를 통해 서버구축

 

*** Server - 설정파일

/etc/vsftpd/vsftpd.conf

 

*** Server - 서비스 시작

 

 

-> start로 vsftpd 서비스를 시작하고 enable을 이용해 부팅시 항상 시작되도록 설정한다.

 

*** Server - 방화벽 설정

 

 

-> 방화벽에 ftp서비스를 추가한다.

 

*** Client - ftp 서비스 실행 ( 웹브라우저 )

-> 웹브라우저로 ftp서비스 실행시 익명사용자로 적용이된다.

 

 

-> ftp://1.0.0.100 입력해보면 pub이라는 디렉토리가 보인다.

 

 

-> pub이라는 디렉토리가 왜있는지 서버에서 확인해보면 ftp서비스의 홈디렉터리가 /var/ftp인데 홈디렉터리 안에 pub으로 되어있다.

-> 서버에서 pub안에 파일을 작성하면 Client에서 파일을 다운받을수 있고 업로드는 되지 않는다.

==> 웹 브라우저를 통해 ftp 서비스를 하게되면 익명사용자로 적용이되고 ftp 서비스의 홈디렉터리 /var/ftp 에 위치하게 된다.

 

*** Client - ftp 서비스 실행 ( cmd창 )

-> cmd창을 이용해 ftp서비스 실행시 지정한 사용자로 적용이된다.

-> ftp 파일 다운로드를 위해 서버에서 미리 /home/user1 디렉토리에 test.txt를 만들고 안에 test ftp 내용을 작성한다.

get <파일> : 다운로드

put <파일> : 업로드

 

 

-> cmd창에 ftp 1.0.0.100 입력후 user1사용자로 로그인한다.

-> pwd로 접속한 서버의 디렉토리를 확인하고 ( user1로 로그인해서 user1의 홈디렉터리에 위치해있다. ) cd를 이용해 원하는 디렉토리로 이동할 수 있다.

-> ls로 해당 디렉토리에 다운로드받을 파일을 확인한다. ( test.txt 파일 확인 )

-> get test.txt 를 이용해 test.txt파일을 다운로드 받는다. 다운로드되는 경로는 cmd에서 ftp접속을 실행한 위치 "C:\Users\정성필" 이다.

 

 

-> 파일 다운로드가 잘 되었는지 C:\Users\정성필 경로로 들어가 확인한다.

 

#3 FTP 서버구축후 FTP 실습해보기 ( 서버 : 리눅스 - 클라이언트 : 리눅스 )

서버 : 1.0.0.100 ( 리눅스 )    -> 위에서 구축되어있다.

클라이언트 : 1.0.0.110 ( 리눅스 )

 

get <파일1> <파일2> : 다운로드 ( 상대편(서버)이 가지고있는 파일1을 나한테로 파일2이름으로 다운로드 )

put <파일1> <파일2> : 업로드 ( 내가가지고있는 파일1을 상대편(서버)으로 파일2이름으로 업로드 )

   

*** Client - ftp.x86_64 설치

 

 

-> 클라이언트에서 ftp 서비스를 하기위해 ftp 설치

 

*** Client - 업로드할 파일 작성

 

 

*** Client - Server쪽으로 파일 업로드

 

 

-> 서버쪽으로 파일 업로드시 ftp로 접속한 사용자는 user1이기 때문에 업로드할때 디렉토리를 지정한다면 사용자의 홈디렉토리를 고려해서 업로드 해야한다.

-> /root 디렉토리는 root사용자의 홈디렉토리이므로 ftp 업로드가 실패한다.

 

***  Server - Client에서 업로드한 파일 확인해보기

 

 

#4 Active mode (능동) vs Passive mode (수동)

 

*** Active mode

-> 클라이언트 측에서 서버측 21번 포트로 접속하여 제어채녈을 생성하고 데이터는 서버에서 클라이언트로 접속하여 데이터를 보내는 방식

-> 만약 클라이언트 PC에 방화벽이 설치되어 외부에서의 접속을 허용하지 않는다면 FTP접속은 되지만 이후 데이터채녈 연결이 불가능하여 파일을 받을 수 없는 문제가 발생할 수 있다.

 

==> 데이터 채널을 생성할때 서버가 클라이언트에게 연결을 설정한다. 클라이언트는 자신의 데이터포트가 임시포트이므로 active모드로 서비스하기위해 자신의 임시포트를 미리 방화벽에 열어두기 번거롭다.

==> 이런문제로 리눅스에서는 기본적으로 Passive mode로 동작하게 되어있다.

## 동작방식

-> FTP 클라이언트는 FTP 서버의 21번 포트로 연결 설정하여 제어 채널을 생성한다.

-> 사용자가 파일 목록을 보기 위해 "ls" 명령을 입력하면 FTP 클라이언트는 사용할 임시포트 (1024 이상)를 결정하여 FTP 서버에게 알린다.

-> FTP 서버는 FTP 클라이언트가 알려준 포트로 연결을 설정하여 데이터 채널을 형성한다.

-> 데이터 채널을 통해 데이터를 송신한 후 데이터채널 연결을 종료한다.

 

*** Passive mode

-> 클라이언트 측에서 서버측 21번 포트로 접속하여 제어채널을 생성하고 데이터채널도 클라이언트에서 서버로 접속하여 데이터를 보내는 방식

 

==> 데이터 채널을 생성할때 클라이언트가 서버에게 연결을 설정하므로 서버에서는 ftp 서비스 방화벽만 열어두면된다.

## 동작방식

-> FTP 클라이언트는 FTP 서버의 21번 포트로 연결 설정하여 제어 채널을 생성한다.

-> 사용자가 파일 목록을 보기 위해 "ls" 명령을 입력하면 FTP 클라이언트는 수동모드로 연결하기 위해 PASV명령을 전송하고 이 명령을 받은 FTP 서버는 사용할 임시 포트 ( 1024 이상 )를 결정하여 FTP 클라이언트에게 알려준다.

-> FTP 클라이언트는 FTP 서버가 알려준 프토로 연결을 설정하여 데이터 채널을 형성한다.

-> 데이터 채널을 통해 데이터를 송신한 후 데이터채널 연결을 종료한다.

 

*** Server에서 Passive mode 포트 원하는 범위 지정 설정

설정파일 : /etc/vsftpd/vsftpd.conf

-> Passive 모드 설정 포트번호는 50000~50005번으로 , 설정하지않아도 임시포트로 사용된다.

-> pasv_enable=YES 설정을 안해도 기본으로 passvie모드로 동작한다.

 

 

*** Client에서 Server로 ftp 접속

-> get을 이용해 파일 다운로드 해보기 ( 다운로드시 데이터 포트가 사용된다. )

 

 

*** Server에서 Client와 연결된 데이터포트 확인

-> 서버 포트가 20번이 아닌 50000~50005번으로 정해진다.

 

 

#5 FTP서비스를 Xinetd데몬으로 설정

 

*** Xinetd 로 사용하기위해 vsftpd에서 설정사항

#> vi /etc/vsftpd/vsftpd.conf

 

 

-> 슈퍼데몬 방식으로 사용하기위해 listen_ipv6=NO 로 설정

 

*** Xinetd 설치

#> yum -y install xinetd.x86_64

 

 

-> Xinetd 데몬설치

 

*** 설정 파일

#> vi /etc/xinetd.conf

-> 글로벌 설정파일

-> 슈퍼데몬이 관리하는 모든서비스에 해당 설정이 적용된다.

 

#> vi /etc/xinetd.d/*

-> 각 서비스 별 설정 파일

 

*** Xinetd 슈퍼데몬이 관리하도록 파일생성후 작성

#> vi /etc/xinetd.d/vsftpd

 

 

-> xinetd.d 디렉토리 밑에 슈퍼데몬에서 관리할 서비스이름으로 파일을 생성후에 위와같은 형식으로 작성한다.한다.

 

*** 파일생성후 Xinetd 슈퍼데몬 재시작

 

 

-> Xinetd 슈퍼데몬을 재시작하므로써 vsftd 서비스가 슈퍼데몬에의해 관리되어지는것을 Started working : 1 available service로 확인

 

## 방화벽 설정이 안되어있다면

#> firewall-cmd --get-acticve 

-> 자신의 방화벽 영역확인

#> firewall-cmd --zone=<확인한 영역> --add-service=ftp --permanent

-> ftp서비스 영구적으로 해당 방화벽 영역에 등록

#> firewall-cmd --reload

-> 설정한 방화벽사항 적용

 

*** vsftpd를 슈퍼데몬에서 관리하면 vsftpd 독립적으로 서비스실행 불가능

 

 

-> vsftpd서비스 설정을 변경했을때 vsftpd가아닌 xinetd데몬을 재시작해서 vsftpd설정을 반영해야한다.

-> vsftpd로 사용시 에러발생

'Linux' 카테고리의 다른 글

Linux_리눅스 Xinetd 슈퍼데몬  (0) 2018.08.01
Linux_리눅스 FTP 보안 설정  (0) 2018.08.01
Linux_리눅스 SAMBA  (0) 2018.07.26
Linux_리눅스 NFS  (0) 2018.07.24
Linux_리눅스 방화벽(firewall)  (0) 2018.07.23
Comments