본문 바로가기
Base/Linux(CentOS)

15. FTP

by 귀멸 2022. 6. 26.

0. FTP
  - File Transfer Protocol; 파일 전송에 관련된 프로토콜
  - FTP를 이용한 서버를 운영하여 client와 파일을 공유한다.
    > client가 FTP server에 접속하여 자신의 파일을 server에 넘겨주거나(upload)
       server에 있는 파일을 내 컴퓨터로 전송(download)하는 방식으로 사용

  - FTP 프로그램도 여러가지가 있으나 vsftpd 사용하여 실습

 

  - FTP server는 두 가지로 분류
로컬 FTP server : FTP server가 설치된 OS의 사용자 계정들이 접속하는 FTP
익명 FTP server : 누구나 접근 가능한 FTP

  - FTP는 active mode와 passive mode로 분류

  1) active mode
    기본 사용 상태
    접속은 client가 FTP server로 접속하여 명령어를 주고 받음(client:random1 -> server:21)
    데이터를 주고 받게 되면 client는 FTP server에게 자신의 data port를 알려주고
    FTP server가 client로 연결하여 data 전송(server:20 -> client:random2)
    > FTP server와 client 전부 방화벽 설정이 필요

  2) passive mode
    active mode에서 별도의 명령어를 입력하여 passive mode로 전환
    접속은 client가 FTP server로 접속하여 명령어를 주고 받음(client:random1 -> server:21)
    데이터를 주고 받게 되면 Passive mode 상태여서 server가 client에게 data port를 알려주고
    client가 FTP server로 연결하여 data전송(client:random2 -> Server:random)
    > FTP server에서만 방화벽을 설정, random port를 사용하기 때문에 service로 방화벽 제어

* 현재 윈도우에서는 passive mode를 지원하지 않는다.

 - 정보
패키지 : vsftpd-*
데몬 : vsftpd
방화벽 : port=21 + 20 + random/tcp, service=ftp
설정파일 : /etc/vsftpd/vsftpd.conf

 - 설치 및 사용
yum -y -install vsftpd-*
systemctl restart vsftpd

firewall-cmd --permanent --add-service=ftp : 방화벽 예외처리 셋팅
firewall-cmd --reload

윈도우 cmd ftp 접속
ftp 192.168.10.128
사용자(192.168.10.128:(none)): anonymous
331 Please specify the password.
암호: 입력 없이 엔터
230 Login successful.
ftp> : 익명 FTP 접속


1. ftp 설정 파일 가지고 놀아보기

[root@server ~]# ll /etc/vsftpd/vsftpd.conf
-rw------- 1 root root 5116  6월 10  2021 /etc/vsftpd/vsftpd.conf
[root@server ~]# vi /etc/vsftpd/vsftpd.conf

11 # Allow anonymous FTP?   (Beware - allowed by default if you comment this out).
12 anonymous_enable=NO   : 익명 접속 허용 여부
15 # When SELinux is enforcing check for SE bool ftp_home_dir
16 local_enable=YES
저장 후 나가서 데몬 재실행
systemctl restart vsftpd

윈도우 cmd ftp 접속
ftp 192.168.10.128
사용자(192.168.10.128:(none)): anonymous
331 Please specify the password.
암호:
530 Login incorrect.
로그인하지 못했습니다. : 설정 바꾼 후 접속 불가

C:\Users\user>ftp 192.168.10.128
192.168.10.128에 연결되었습니다.
500 OOPS: vsftpd: both local and anonymous access disabled!
원격 호스트에 의해 연결이 닫혔습니다. : 둘다 접속을 거부해 놓은 경우


접속 할 때 메세지 띄우기
37 dirmessage_enable=YES

 

echo "내용"                    : 내용을 화면에 출력
echo "내용"  >> 파일명  : 화면에 출력된 내용을 파일에 저장  
[root@server ~]# cd ~itbank
[root@server itbank]# echo "itbank's home" >> .message
[root@server itbank]# echo "directory /home" >> ../.message
[root@server itbank]# ls -la ./ ../

C:\Users\user>ftp 192.168.10.128
192.168.10.128에 연결되었습니다.
220 (vsFTPd 3.0.2)
200 Always in UTF8 mode.
사용자(192.168.10.128:(none)): itbank
331 Please specify the password.
암호:
230-itbank's home
230 Login successful.
ftp> cd ../
250-directory /home
250 Directory successfully changed.
ftp>

 

42 # Make sure PORT transfer connections originate from port 20 (ftp-data).
43 connect_from_port_20=YES

* 익명 사용자가 업로드한 파일의 소유권에 대한 제어
48 #chown_uploads=YES
49 #chown_username=whoever

 

60 #idle_session_timeout=600 : 세션 유지 시간
63 #data_connection_timeout=120 : 데이터 연결 후에 타임까지 걸리는 시간
87 #ftpd_banner=Welcome to blah FTP service. : 접속 시 메세지 띄우는 banner 설정
91 #deny_email_enable=YES : 익명 접속 시 이메일 형식의 아이디 사용
93 #banned_email_file=/etc/vsftpd/banned_emails : 특정 이메일 주소는 접속 불가하게 조치
110 #ls_recurse_enable=YES : ls -R 옵션 허용 여부 (default no)

 

* recurse 옵션 : 하위 디렉터리의 내부까지 보여주는 것
  도스나 디도스 공격에 악용될 소지가 있어서 기본적으로 허용되지 않는다.
  ftp 접속 상태로 ls -l은 사용 가능

115 listen=NO   : 데몬프로세스 동작을 standalone / 일반 설정으로 할지
* standalone : 자체적으로 동작하는 데몬이다
CentOS 6버전까지는 YES 7버전부터 systemd에 종속된 상태로 사용하도록 바뀌면서 기본값 NO
IPv4는 보안성이 낮아 기본값 NO, IPv6는 보안성이 높아서 기본값 YES

*chroot : 로컬 사용자격리에 관한 옵션
* 사용자 격리
모든 사용자는 최초 접속 시 자신의 홈디렉토리에서 시작하도록 되어있음
익명 사용자의 경우에 처음 접속 시 /var/ftp/pub으로 시작되지만  : find / -name pub -type d
pwd 명령를 치거나 cd를 해도 항상 "/"에 위치한 것으로 보여짐
보안을 위해 익명의 사용자는 시작 디렉토리를 벗어 날 수 없음
로컬 사용자의 경우에는 기본적으로 /home 디렉토리 이상 벗어나지 못하게 되어 있음
    
* chroot 옵션을 통해 변경 가능
 
  100 # chroot)
  101 #chroot_local_user=YES
  102 #chroot_list_enable=YES
  103 # (default follows)
  104 #chroot_list_file=/etc/vsftpd/chroot_list
  105 #

  100 # chroot)
  101 chroot_local_user=YES
  102 chroot_list_enable=YES
  103 # (default follows)
  104 chroot_list_file=/etc/vsftpd/chroot_list    : touch /etc/vsftpd/chroot_list 만들기
  105 allow_writeable_chroot=YES     : 해당 구문 추가
  106 #

    저장 후 데몬 재실행 >> ftp 로컬 사용자 접속 시도 성공
    로컬 사용자도 익명 사용자 처럼 /var/ftp/pub에 사용자 격리되는 것을 확인 할 수 있다.

    [root@server var]# echo "itbank" >> /etc/vsftpd/chroot_list
    [root@server var]# cat /etc/vsftpd//chroot_list

    list 파일에다가 사용자 이름을 넣어주면 자신의 로컬 시작 디렉터리(/home/itbank)에서 
    시작하는 것을 볼 수 있다. 그러나 상위 /home 폴더로는 이동 불가 

3. 실습

익명 사용자가 파일 업로드를 할 수 있도록 설정해보기
* FTP 접속 후 권한 변경은 반칙

 

Step 1. ftp 설정 변경
[root@server pub]# vi /etc/vsftpd/vsftpd.conf
29 anon_upload_enable=YES
33 anon_mkdir_write_enable=YES
설정 변경저장 후 재실행
ftp로 익명 접속 후 파일 업로드 안됨 (권한이 없음)

Step 2. 시작 폴더 권한 변경

[root@server pub]# chmod 757 /var/ftp/pub
pub 디렉토리의 권한지정
익명 ftp 접속 후 cd pub 으로 들어가서 파일 업로드하면 성공

댓글