정보보안공부
Linux_리눅스 FTP 본문
리눅스 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 |