리눅스(Linux)

리눅스(Linux) FTP 세팅 및 명령어 (6)

백코딩 2023. 12. 15. 12:39
728x90

FTP란? 

네트워크를 통해 파일을 전송하는 표준 프로토콜을 지칭합니다. FTP 서버를 설정하고 사용하는 것은 네트워크 상에서 파일 공유 및 전송의 용이함을 제공하지만, 보안상의 위험도 고려해야 합니다. 따라서, FTP 서버를 구축할 때는 적절한 보안 조치와 함께 구성하는 것이 중요합니다.

 

rpm -qa | grep ftp

이 명령어는 RPM 패키지 관리자를 사용하여 시스템에 설치된 모든 패키지들 중에서 'ftp'가 포함된 이름을 가진 패키지들을 찾습니다. 'rpm -qa'는 모든 설치된 패키지들을 나열하고, 'grep ftp'는 이 중에서 'ftp라는 문자열을 포함하는 패키지들만 필터링 합니다.

 

yum install -y vsftpd

이 명령어는 YUM 패키지 관리자를 사용하여 'vsftpd'라는 패키지를 자동으로 설치합니다.

-y 옵션은 설치 과정 중에 나타는 모든 질문에 자동으로 'yes'로 응답하게 하여 사용자의 추가적인 입력 없이 설치를 진행하게 합니다.

 

sytemctl 명령어

systemctl status vsftpd  -> 서비스의 현재 상태를 확인합니다.
systmectl start vsftpd -> 이 명령어는 'vsftpd'서비스를 시작합니다.
systemctl stop vsftpd -> 이 명령어는 'vsftpd'서비스를 중지합니다.
systemctl restart vsftpd -> 이 명령어는 'vsftpd' 서비스를 재시작합니다.
systemctl enable vsftpd -> 리눅스 시스템에서 'vsftpd'(Very Secure FTP Daemon) 서비스를 부팅 시 자동으로 시작하도록 설정하는 데 사용됩니다.

 

 

firewall 방화벽

firewall-cmd --permanent --zone=public --add-port=21/tcp
firewall-cmd --reload
  • firewall-cmd : 'firewalld' 를 관리하기 위한 명령어 인터페이스입니다.
  • --permanent : 이 옵션은 변경 사항이 영구적으로 적용되도록 합니다. 즉, 시스템이 재부팅되어도 설정이 유지됩니다.
  • --zone=public : 이 옵션은 변경을 적용할 방화벽의 "zone"을 지정합니다. 'public'존은 일반적으로 외부 네트워크에 노출되는 서비스에 사용됩니다.
  • --add-port=21/tcp : 이 옵션은 TCP 프로토콜을 사용하는 21번 포트(FTP 서비스의 기본 포트)를 방화벽 규칙에 추가합니다. 이렇게 하면 외부에서 21번 포트를 통해 FTP 서버에 접근할 수 있게 됩니다.

 

 

보안 설정

  • 익명 계정 접속 비허용
  • 일반 계정은 자신의 디렉터리를 벗어나지 못함
  • 일부 계정은 자신의 디렉터리를 벗어날 수도 있음

 

오픈된 FTP 라면 익명 계정을 허용시켜야하나 지금은 특정 사용자를 FTP라 비허용했습니다. 일반 계정이 다른 디렉터리에 가서 다른 행동을 못하게 막아놓아습니다. 하지만 root계정의 접속이 막혀있으므로 특정 사용자만이 상위 디렉터리로 이동이 가능하게 했습니다. 

 

vsftpd 특정 사용자 상위디렉터리 이동 제한 및 conf 파일 설정

vi /etc/vsftpd/vsftpd.conf

 

 

 

익명 접속을 허용하지 않으면 NO 라고 입력한다.

anonymous_enable=NO

 

로컬계정 사용자들의 접속을 허용하지 않으면 NO 라고 입력한다.

local_enable=YES

 

ftp 전송명령어 중 write를 허용하지 않으면 NO 라고 한다.

write_enable=YES
  • write_enable : 이 지시어 FTP 사용자가 서버에 파일을 ㅇ업로드하거나 서버의 파일을 수정, 삭제할 수 있는 권한을 설정합니다.

umask 의 기본 값은 077이다. umask 값이 077이면 새로 생성되는 파일의 퍼미션은 600이 되고, 새로 생성되는 디렉터리의 퍼미션은 700이 된다. 당연히 보안강화가 된다.

local_umask=022
  • umask (user file-creation mode mask)는 리눅스와 유닉스 시스템에서 새로 생성되는 파일과 디렉터리의 기본 권한을 설정합니다.
  • 이러한 설정은 파일과 디렉터리의 기본 권한을 조정하여 보안 수준을 관리하는 데 중요합니다. 'umask' 값이 077 인 경우에는 보안 더 강화되어, 파일 소유자만 파일을 읽고 쓸 수 있으며 (권한 '600'), 디렉터리에 대해서는 소유자만 접근할 수 있습니다.(권한 '700'), 반면에 '022'로 설정하면 다른 사용자들도 읽을 수 있게 되어, 조금 더 유연한 권한 설정을 제공합니다.

 

ftp 접속한 사용자가 특정 디렉터리로 이동할때 개별 디렉터리의 메시지를 보여주도록 설정 한것이다. 밑에서 message_file이라는 부분을 검색해서 해당 메시지를 넣게 되면 개발 디렉터리 안내 파일로 사용할 파일명을 지정할 수 있다.

dirmessage_enable=YES

 

ftp 접속 후 파일 업로드 및 다운로드에 대한 로그를 남긴다는 의미이다.

xferlog_enable=YES

 

ftp는 기본적으로 21번 포트와 20번 포트를 사용한다. ftp 접속과 명령어에 사용되는 포트는 21번 이며, 실제 데이터전송에 사용되는 기본포트는 20번이다. 이때 20번 포트의 데이터전송 연결을 허용 할 것인가 아닌가를 설정하는 것으로 YES는 허용한다는 의미이다.

connect_from_port_20=YES

 

로그파일에 남길 로그파일의 포맷을 기본포맷으로 남긴다는 뜻이다. 리눅스에서 ftp 기본로그파일로 /var/log/xferlog 을 사용한다. 이 지시자는 이 파일의 표준포맷으로 로그를 남기도록 설정하는 것이다. 이 파일의 포맷보다는 vsftpd 로그포맷을 사용하는 것이 보다 자세한 로그를 남길 수 있다. 즉, 디렉터리 생성로그나 또는 로그인 같은 상세로그까지 기록해 준다.

xferlog_std_format=YES

 

특정 사용자들에 대해 자신의 홈 디렉터리를 루트 리덱터리로 인식하도록 하는 기능이다.

chroot_list_enable=YES

chroot_local_user=YES

chroot_list_file=/etc/vsftpd/chroot_list

 

chroot_list 파일이 없다면 새로 만들어 주어야 한다.

chroot_local_user=YES는 특정 사용자가 아닌 전체 사용자를 대상으로 자기 자신 홈 디렉터리 상위 디렉터리로 이동하지 못하도록 하는 설정이다. chroot_list_enable=YES 로 설정하고 chroot_list_file=/etc/vsftpd/chroot_list 파일에 등록된 사용자들에 한해서 chroot 기능이 적용되어 자기 자신의 홈디렉터리 상위디렉터리 이동이 제한된다.

 

chroot_local_user=YES 와 chroot_list_enable=YES 가 모두 YES 이면, /etc/vsftpd/chroot_list 파일에 등록된 사용자를 제외한 나머지 사용자들이 상위디렉터리 이동이 제한이 되는 것이다. 

더보기

userlist_enable=YES 및 tcp_wrappers=YES: 이 설정들은 추가적인 보안 조치를 활성화합니다. userlist_enable=YES는 특정 사용자 목록을 관리하여 접근을 제한할 수 있도록 합니다. tcp_wrappers=YES는 TCP 래퍼 기능을 사용하여 특정 호스트에서의 접근을 제어합니다.

 

 

vi /etc/vsftpd/chroot_list

해당 user가 상위 디렉터리에 접근을 막게 정보를 입력한다.

 

 

FileZilla 접속 및 연결

 

 

 

vsftp 사용자 허용 및 제한(chroot, user_list, ftpusers)

1. chroot

-> ftp 사용자가 계정으로 접속을 했을 때 해당 계정의 홈 디렉터리의 상단으로 접근이 되지 않게 하는 기능입니다.

 

2. user_list, ftpusers

-> 사용자의 접근을 허용 혹은 거절하는 기능입니다.

 

 

728x90