FTP
* FTP ( File Transfer Protocol )
- 파일 전송 프로토콜
- 대량/대용량 파일을 전송하는데 특화
- TCP방식으로 동작하며 20,21번 포트를 사용
21번 포트 - 접속 및 명령어 전달시 사용 ( Command Port )
20번 포트 - 데이터 전송시 사용 ( Data Port )
- FTP 동작방식은 Active(능동)모드와 Passive(수동) Mode가 있다.
동작방식은 클라이언트가 접속할 때 결정한다.
* VSFTP ( Very Secure FTP )
- GNU GPL라이센스 관리하에 배포되는 FTP 서버용 프로그램
- 보안기능이나 성능이 매우뛰어나 대부분의 배포판에
기본으로 채택되어 사용된다.
! ftp 서버 구축
@Server-A
#setenforce 0
#service iptables stop
#yum install -y vsftpd // ftp 서버용 패키지
#vi /etc/vsftpd/vsftpd.conf
-----------------------------
설정 값 변경 ( 지금은 변경 x )
:wq
-----------------------------
#useradd ftpuser // ftp용 계정 생성
#passwd ftpuser
111
111
#cd /var/ftp // ftp 계정의 홈디렉터리
#mkdir fileShare // 공유 디렉터리 생성
#chmod 777 fileShare // 권한 변경
#cd ./fileShare
#touch Server_file{1..10} // 테스트용 공유파일 생성
#service vsftpd start // 서비스 시작
#chkconfig vsftpd on
@Client-Linux
#setenforce 0
#service iptables stop
#cd ~ // 실습을 위해 홈디렉터리로 이동
#touch Client_Linux_file{1..5} // 테스트(공유)용 파일 생성
#yum install -y ftp // ftp 클라이언트 프로그램 설치
#ftp 100.100.100.100 // ftp 서버 접속
계정명 : anonymous
비밀번호 : enter (없음) // anonymous계정으로 서버 접속
ftp>pwd // "/" 추후에 실습
ftp>dir // 현재 위치는 /var/ftp
fileShare pub
ftp>cd fileShare // 공유 디렉터리로 이동
ftp>dir
공유 파일 목록
ftp>get Server_file1 // 1개의 파일 다운로드
( ftp접속을 시도한 디렉터리위치 )
ftp>mget Server_file2 Server_file3 // 복수의 파일 다운로드
( mget 파일명 파일명 .. )
ftp>put Client_Linux_file1 // 업로드 불가
( anonymous는 업로드 기본설정 x )
ftp>exit // 로그 아웃
#ls // 다운받은 파일확인
#ftp 100.100.100.100 // ftp 서버 접속
계정명 : ftpuser
비밀번호 : 111 // local계정으로 서버 접속
ftp>pwd // /home/ftpuser
로컬 사용자의 ftp 서버 접속
처음위치는 로컬 사용자의 홈디렉터리
ftp>cd /var/ftp/fileShare // 공유 디렉터리로 이동
ftp>dir
공유 파일 목록
ftp>get Server_file4 // 1개의 파일 다운로드
( ftp접속을 시도한 디렉터리위치 )
ftp>mget Server_file5 Server_file6 // 복수의 파일 다운로드
( mget 파일명 파일명 .. )
ftp>put Client_Linux_file1 // 단일파일 업로드 ( o )
( 로컬 계정은 업로드 기본설정 o )
ftp>put Client_Linux_file2 Client_Linux_file3 // 복수의 파일 업로드 ( o )
( mput 파일명 파일명 .. )
ftp> dir // 업로드 된 파일 확인
ftp>exit // 로그 아웃
#ls // 다운받은 파일확인
@Client-Window
-> 웹 브라우저
-> https://filezilla-project.org //파일질라 공식홈페이지
-> 화면 중앙에 Donwload Filezilla Client 클릭
-> 다운로드
-> 설치 마법사 ( 설치 진행 )
-> 바탕화면에 테스트용 파일 생성
Client_Linux_file1.txt // 메모장
Client_Linux_file2.txt // 메모장
-> Filezila 프로그램 실행
호스트 : 100.100.100.100
계정 : anonymous
비밀번호 : x
포트 : x
-> 연결 // anonymous계정으로 로그인한 상태
왼쪽 (로컬사이트-클라이언트) 오른쪽 (리모트사이트-파일서버)
fileShare에서
원하는 파일을
왼쪽(클라이언트)의 바탕화면으로
drag & drop (o)
User->Desktop에 있는
Client_Window_file1~2.txt를
파일서버의 fileShare로
drag & drop ( x ) // anonymous계정의 기본설정은
다운로드 ( o )
업로드 ( x )
-> Filezila 프로그램 실행
호스트 : 100.100.100.100
계정 : ftpuser
비밀번호 : 111
포트 : x
-> 연결 // localUser(ftpuser)계정으로 로그인한 상태
왼쪽 (로컬사이트-클라이언트) 오른쪽 (리모트사이트-파일서버)
(/home/ftpuser에 위치)
/var/ftp/fileShare로 이동
fileShare에서
원하는 파일을
왼쪽(클라이언트)의 바탕화면으로
drag & drop (o)
User->Desktop에 있는
Client_Window_file1~2.txt를
파일서버의 fileShare로
drag & drop ( o ) // local 계정의 기본설정은
다운로드 ( o )
업로드 ( o )
* 설정 파일 변경
@Server-A
#vi /etc/vsfptd/vsftpd.conf
---------------------------------
12번행 anoymous_enable=YES // anonymous 계정 로그인 허용
15번행 local_enbale=YES // local 계정 로그인 허용
17번행 write_enable=YES // 파일 업로드 권한 허용
22번행 local_umask=xxx // 파일 업로드시 적용될 UMASK값
(추가 anon_umask=xxx // anonymous파일 업로드시 적용될 UMASK값)
28번행 anon_upload_enable // anonymous계정에게
파일 업로드 권한 부여
32번행 anon_mkdir_write_enable // anonymous계정에게
디렉터리 생성 권한 부여
60번행 idle_session_timout=600 // ftp 접속후 아무입력없을시
세션 종료 ( 단위 : 초 )
86번행 ftpd_banner=원하는 메세지 // Banner 메세지 설정
보안적 관점으로 의미가 있다.
:wq
-----------------------------------
* /etc/vsftpd/ftpusers
- ftp 접속을 '차단'할 계정 정보 파일
@Server-A
#useradd ftp-user1 // 테스트 계정 생성
#useradd ftp-user2
#useradd ftp-user3
#passwd ftp-user1
111
111
#passwd ftp-user2
111
111
#passwd ftp-user3
111
111
@Client-Linux ( 세션 3개 생성 )
#ftp 100.100.100.100
ftp-user1 ( 로그인 o )
111
#ftp 100.100.100.100
ftp-user2 ( 로그인 o )
111
#ftp 100.100.100.100
ftp-user3 ( 로그인 o )
111
@Server-A
#vi /etc/vsftpd/ftpusers
------------------------
하단에 접속을 차단할 계정을 추가
ftp-user2
ftp-user3
:wq
-------------------------
@Client-Linux ( 세션 3개 생성 )
#ftp 100.100.100.100
ftp-user1 ( 로그인 o )
111
#ftp 100.100.100.100
ftp-user2 ( 로그인 x )
111
#ftp 100.100.100.100
ftp-user3 ( 로그인 x )
111
// 계정을 바꾸어가면서 실습해보세요.
* /etc/vsftpd/user_list
- FTP 접속 계정 허용/차단 설정
- /etc/vsftpd/vsfptd.conf 설정에 따라서 동작
( 실습을 위해 ftpusers파일에
ftp-user2, ftp-user3계정 삭제 후 진행 )
! 실습
@Server-A
#vi /etc/vsftpd/vsftpd.conf
----------------------------
119번행 userlist_enable=YES //user_list파일을 사용
(설정 변경 x)
:wq!
----------------------------
#vi /etc/vsftpd/user_list
-----------------------------
~~ 하단에 추가 ~~
ftp-user1 // 로그인 불가
ftp-user3 // 로그인 불가
:wq
---------------------------
#service vsftpd restart
@Client-Linux
#ftp 100.100.100.100
ftp-user1 // 로그인 x
ftp-user2 // 로그인 o
ftp-user3 // 로그인 x
@Server-A
#vi /etc/vsftpd/vsftpd.conf
----------------------------
119번행 userlist_enable=YES // user_list파일을 사용
120번행 (추가)userlist_deny=NO // userlist파일을
허용 목록으로 사용
:wq!
----------------------------
#vi /etc/vsftpd/user_list
-----------------------------
(설정변경x)
ftp-user1 // 로그인 허용
ftp-user3 // 로그인 허용
:wq
---------------------------
#service vsftpd restart
@Client-Linux
#ftp 100.100.100.100
ftp-user1 // 로그인 o
ftp-user2 // 로그인 x
ftp-user3 // 로그인 o
* chroot
- 프로그램이 인식하는 최상위 디렉터리 ( / )를
변경하여 보안을 강화하는 방법
! 실습
@Server-A
#vi /etc/vsftpd/vsftpd.conf
---------------------------
(97번행)#chroot_local_user=YES //변경x , 확인만
//chroot 적용 x
:q
---------------------------
@Client_Linux
세션1(root) 세션2(root) 세션3(root)
#ftp 100.100.100.100 #ftp 100.100.100.100 #ftp 100.100.100.100
ftp-user1 ftp-user2 ftp-user3
111 111 111
ftp>pwd ftp>pwd ftp>pwd
/home/ftp-user1 /home/ftp-user2 /home/ftp-user3
ftp>cd / ftp>cd / ftp>cd /
성공 성공 성공
ftp>cd /etc ftp>cd /etc ftp>cd /etc
성공 성공 성공
// 보안적으로 굉장한 취약점을 가지고 있다.
@Server-A
#vi /etc/vsftpd/vsftpd.conf
---------------------------
(97번행)chroot_local_user=YES // 주석해지
//chroot 적용 o
:wq
---------------------------
#service vsftpd restart
@Client_Linux
세션1(root) 세션2(root) 세션3(root)
#ftp 100.100.100.100 #ftp 100.100.100.100 #ftp 100.100.100.100
ftp-user1 ftp-user2 ftp-user3
111 111 111
ftp>pwd ftp>pwd ftp>pwd
/ / / (Server-A의 /가 아니라
가상의 /공간)
ftp>cd / ftp>cd / ftp>cd /
실패 실패 실패
ftp>cd /etc ftp>cd /etc ftp>cd /etc
실패 실패 실패
@Server-A
#vi /etc/vsftpd/vsftpd.conf
---------------------------
(97번행)chroot_local_user=YES // 주석해지 ,
(98번행)chroot_list_enable=YES // 주석해지 , chroot_list 파일을 활성화
(100번행)chroot_list_file=/etc/vsftpd/chroot_list // 주석해지 ,
chroot_list파일의 경로와
이름을 지정
:wq
---------------------------
#vi /etc/vsftpd/chroot_list
--------------------------
ftp-user2 // ftp-user2만 chroot 적용x
나머지 계정은 chroot가 적용
:wq
-------------------------
#service vsftpd restart
@Client_Linux
세션1(root) 세션2(root) 세션3(root)
#ftp 100.100.100.100 #ftp 100.100.100.100 #ftp 100.100.100.100
ftp-user1 ftp-user2 ftp-user3
111 111 111
ftp>pwd ftp>pwd ftp>pwd
/ /home/ftp-user2 / (ftp-user2만 chroot 적용 x)
ftp>cd / ftp>cd / ftp>cd /
실패 성공 실패
ftp>cd /etc ftp>cd /etc ftp>cd /etc
실패 성공 실패
//chroot_list유저를 변경하면서 실습해보세요.
* Active Mode & Passive Mode
! 실 습
@Server-A
#cd /home/ftp-user1
#chmod 777 /home/ftp-user1
#touch file{1..10} // 테스트 파일 생성
① Passive Mode
@Server-A
#watch -d -n 0.1 "netstat -ntp" // 네트워크 상태를 확인하는 명령어
@Client_Linux
#ftp 100.100.1001.100
ftp-user1
111
~ Server-A의 상태 확인 ~
Local Foreign
100.100.100.100:21 100.100.100.200:?
ftp> get file1
~ Server-A의 상태 확인 ~
Local Foreign
100.100.100.100:21 100.100.100.200:? // 제어
100.100.100.100:? 100.100.100.200:? // 파일전송
ftp> get file2
get file3
get file4
...
...
// 서버와 클라이언트의 포트 확인
서버 1024~ , 클라이언트 1024~
100.100.100.100:21 100.100.100.200:? // 제어
100.100.100.100:? 100.100.100.200:? // 파일전송
100.100.100.100:? 100.100.100.200:? // 파일전송
100.100.100.100:? 100.100.100.200:? // 파일전송
② Active Mode
( 클라이언트 재접속 )
서버 -> 클라이언트 데이터 전송방향으로
클라이언트쪽에서도 방화벽을 해지해야 한다.
#setenforce 0
#service iptables stop
#ftp 100.100.100.100
ftp-user1
111
~ Server-A의 상태 확인 ~
Local Foreign
100.100.100.100:21 100.100.100.200:?
ftp> passive // Active Mode로 변경
ftp> get file21
~ Server-A의 상태 확인 ~
Local Foreign
100.100.100.100:21 100.100.100.200:? // 제어
100.100.100.100:20 100.100.100.200:? // 파일전송
ftp> get file22
get file23
get file24
...
...
// 서버와 클라이언트의 포트 확인
서버 20 , 클라이언트 1024~
100.100.100.100:21 100.100.100.200:? // 제어
100.100.100.100:20 100.100.100.200:? // 파일전송
100.100.100.100:20 100.100.100.200:? // 파일전송
100.100.100.100:20 100.100.100.200:? // 파일전송
3) Passive 모드에서 데이터 전송포트 지정
@Server-A
#vi /etc/vsftpd/vsfptd.conf
---------------------------------
~ 제일하단에 추가 ~~
pasv_enable=YES // 수동모드 사용 ( 기본값 )
pasv_min_port=xxxx // 1023~ , ex) 3000
pasv_max_port=xxxx // ex) 3010
:wq!
---------------------------------
#service vsftpd restart
#watch -d -n 0.1 "netstat -ntp"
@Client-Linux
#ftp 100.100.1001.100
ftp-user1
111
~ Server-A의 상태 확인 ~
Local Foreign
100.100.100.100:21 100.100.100.200:?
ftp> get file41
~ Server-A의 상태 확인 ~
Local Foreign
100.100.100.100:21 100.100.100.200:? // 제어
100.100.100.100:3000~3010 100.100.100.200:? // 파일전송
ftp> get file42
get file43
get file44
...
...
// 서버와 클라이언트의 포트 확인
서버 1024~ , 클라이언트 1024~
100.100.100.100:21 100.100.100.200:? // 제어
100.100.100.100:3000 ~ 3010 100.100.100.200:? // 파일전송
100.100.100.100:3000 ~ 3010 100.100.100.200:? // 파일전송
100.100.100.100:3000 ~ 3010 100.100.100.200:? // 파일전송
+@제어포트 변경하기
@Server-A
#vi /etc/vsftpd/vsfptd.conf
---------------------------------
~ 제일하단에 추가 ~~
pasv_enable=YES // 수동모드 사용 ( 기본값 )
pasv_min_port=xxxx // 1023~ , ex) 3000
pasv_max_port=xxxx // ex) 3010
~ 제일하단에 추가 ~~
listen_port=xxxx // 제어포트 변경 ex)2121
:wq!
---------------------------------
#service vsftpd restart
#watch -d -n 0.1 "netstat -ntp"
@Client-Linux
#ftp 100.100.100.100 //로그인 불가
#ftp 100.100.100.100 2121 //포트를 입력해야 로그인 가능
ftp-user1
111
~ ServerA에서 연결된 포트 확인 ~
'LINUX(Server)' 카테고리의 다른 글
| DNS (0) | 2024.04.28 |
|---|---|
| NFS (2) | 2024.04.27 |
| DHCP (0) | 2024.04.25 |
| Samba (0) | 2024.04.24 |
| NC , Telnet , SSH , VNC (1) | 2024.04.23 |