본문 바로가기
넷칼리지

LINUX FTP SERVER vsftp

by 북한산산적 2009. 5. 21.
FTP Service
File Transfer Protocol
과거의 기본 FTP 는 보안상 취약하다는 단점이 존재
FTP Server 구성을 위해 ProFTP, vsFTP 등의 보안이 고려된 프로그램을 별도로 설치 운영

vsFTP 패키지설치

#rpm -qa |grep vsftpd  - 설치 확인
#rpm -ivh vsftpd-(버젼).rpm   - 설치 
-> RPM을 이용한 설치시 vsFTPD Service는 기본적으로 Standalone 타입으로 작동하며,
inetd 타입으로 변경 가능

서비스 실행및 활성화
#chkconfig vsftpd on    ->Run Level 2,3,4,5 상태에서 vsFTPD 활성화
#service vsftpd start     -> vsFTP 데몬 실행

FTP Server 주요 파일
/etc/vsftpd/vsftpd.conf : vsftpd 환경 설정 파일
/usr/sbin/vsftpd : vsftpd 바이너리 파일
/etc/rc.d/init.d/vsftpd : vsftpd 테몬 실행 스크립트 파일
/etc/vsftpd.ftpusers : vsftpd 접속을 막을 사용자 설정
/etc/xinetd.d/vsftpd : xinetd 서비스 파일 (파일명 변경 가능)


------------------------------------------------------------------------------------------------
vsFTPD 환경 설정


/etc/vsftpd/vsftpd.conf
- ; 과 #으로 시작 하는 라인은 주석처리를 의미
-> 일반적으로 #은 설명을 위한 주석으로 , ;은 실행(적용)을 막기 위한 주석으로 사용
vsftpd.conf 기본 설정 및 의미
anonymous_enable=YES
->  FTP server 에서 익명 사용자 (anonymous) 연결을 허용할 것인지 결정
local_enable=YES
-> 로컬 시스템 계정의 로그인 허용 여부 결정
local_umask=022
-> 로컬 시스템 계정이 파일을 업로드할 경우 파일의 퍼미션을 정의하는 항목
#anon_ipload_enable=YES
->익명 사용자 파일 업로드 허용여부 결정
#anon_mkdir_write_enable=YES
-> 익명 사용자 디렉토리 생성 허용 여부 결정
dirmessage_enable=YES
-> FTP server 에 접속한 사용자가 디렉토리를 이동할 경우 메시지 파일 내용을 보여줄 것인지의 여부결정
message_file=.message
->디렉토리를 이동할 경우 보여줄 메시지 파일 이름을 정의
xferlog_enable=YES
->FTP server 접속자의 업로드/다운로드 상황을 로그 파일 (/var/log/xferlog)로 저장할지 여부 결정
connect_from_port_20=YES
->FTP server 를 Standalone 타입으로 운영할 때 데이터 전송을 위해 20번 포트를 사용할지 여부를 결정
#chown_uploads=YES
->익명사용자 가 업로드한 파일에 대해 소유권을 변경할지 여부 결정
#chown_username=whoever
->익명사용자가 업로드한 파일의 소유권 변경시 사용할 유저 설정
#xferlog_file=/var/log/vsftpd.log
->로그 파일 저장 시 사용할 파일명 지정
xferlog_std_format=YES
->로그 파일을 표준 포맷으로 기록하지 여부 결정
->표준 포맷은 사용자의 로그인, 디렉토리 생성 여부 등의 로그를 남기지 않음
->vsftpd 포맷의 로그는 로그인 정보,디렉토리 생성 여부등을 포함하여 상세한 로그를 남김
#idle_session_timeout=600
->접속자가 접속 후 아무 작업도 하지 않고 600초가 유지되면 자동으로 FTP 연결 종료
#data_connection_timeout=120
->파일 전송이 종료된 후 또 다른 데이터 전송을 위해 연결을 유지 하는 시간을 설정
#ascii_upload_enable=YES
->아스키 파일 업로드의 허용 여부 결정
#ascii_download_enable=YES
->아스키 파일 다운로드의 허용 여부 결정
#ftpd_banner=Welcome to blah FTP Service
FTP Server에 접속한 사용자에게 보여줄 텍스트 환영 메시지 결정
#deny_email_enable=YES
->익명 사용자를 통한 로그인 과정에서 패스워드에 입력하는 E-Mail 주소를 확인해
특정 E-Mail 주소의 접근을 거부할지 여부를 설정
#banned_email_file=/etc/vsftpd.banned_emails
->접근 거부할 E-Mail 주소의 목록을 갖는 파일 이름을 정의
#chroot_local_user=YES
->FTP Server에 접근한 사용자에게 홈 디렉토리 이상의 상위 디렉토리 접근 허용 여부 설정 (chroot설정)
#ls_recurse_enable=YES
->사용자들에게 "ls -R"명령어를 사용가능 하도록 할것인지 설정
#pam_service_name=vsftpd
->PAM 인증으로 사용자들의 접근을 허용할 경우 사용할 인증 파일 이름 정의
#max_clients=100
->최대 동시 접속자수 설정(단, Standalone 타입으로 운영될 경우에만 해당)
#max_per_ip=5
->동일 IP당 허용할 동시 접속자수 설정,(단 Standalone 타입으로 운영될 경우에만 해당)
listen=YES
->listen_port에 들어온 요청을 데몬이 받아들일지 여부를 설정 (Standalone 타입으로 운영될 경우에 YES)

------------------------------------------------------------------------------------------------


vsFTP 접근 제어
/etc/vsftpd.ftpusers
FTP Server 접근시 로그인을 거부할 사용자를 등록
- 시스템 관리상 중요한 계정은 (root)FTP 접근시 로그인이 불가능 하도록 설정할 것을 권장
/etc/vsftpd.ftpusers 파일에 사용자 추가


vsFTP Server Type
-FTP Server 의 용도에 따라 시스템 자원관리 측면에서 두가지 타입 중 하나를 선택하여 운영
- Standalone Type : FTP Server로 접근 요청이 많을 경우 사용하여,RPM을 이용하여 vsFTPD 설치시기본타입
- Xinetd Type : FTP Server로 접근요청이 많지 않을 경우 사용

standalone type 에서 xinetd type 로 변경
#netstat -ntlp                          ----------> standalone 타입으로 운영되는 vsFTPD 확인
#service vsftp stop                  ----------> vsftpd 데몬 실행 중지
#vi /etc/xinetd.d/vsftpd           ---------->  xinetd 기반으로 vsFTPD가 돌아 가도록 파일 생성
#vi /etc/vsftpd/vsftpd.conf       ---------->  listen=YES를 listen=NO로 변경
#service xinetd restart             ---------->  xinetd 데몬 재실행
#netstat -ntlp                          ---------->  xinetd 타입으로 운영되는 vsFTPD 확인

---------------------------- Xinetd Type ------------------------------------------

/etc/xinetd.d/vsftpd.conf 작성

service ftp
{
        dlsable           =       no
        socket_type     =       stream
        wait                =       no
        user               =       root
        server             =       /usr/sbin/vsftpd
        log_on_failure +=       USERID
}

/etc/vsftpd/vsftpd.conf 수정
listen=NO

#service xinetd restart

확인 
#netstat -ntlp
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      4231/xinetd

결과값 확인

ftp 관련 명령어
ftp>help    ------> FTP 명령어 목록 확인 및 특정 명령어에 대한 도움말 확인
ftp>ascii   ------> 전송 모드를 ascii 모드로 설정(일반 텍스트 파일 전송시 사용)
ftp>binary ------> 전송 모드를 binary 모드로 설정(프로그램등의 바이너리 파일 전송시 사용)
ftp>prompt -----> 다수의 파일 전송시 파일 각각의 전송 여부를 확인
ftp>hash   -----> 파일 전송시 8192 byte 마다 Hash Mark(#)를 출력
ftp>pwd    -----> Remote System 의 현재 작업 디렉토를 출력
ftp>ls(dir) ----->  Remote System의 디렉토리 내용을 출력
ftp>cd      ----->  Remote System 에서 디렉토리 이동
ftp>lcd     ----->  Local System의 디렉토리 이동
ftp>get     ----->  Remote System 에서 하나의 특정 파일 다운로드
ftp>mget   ----->  Remote System에서 여러 개의 파일 다운로드
ftp>put     ----->  Remote System으로 하나의 특정 파일 업로드
ftp>mput   ----->  Remote System으로 여러 개의 파일 업로드
ftp>delete  ---->  Remote System 의 특정 파일을 삭제
ftp>mkdir   ---->  Remote System 에 새로운 디렉토리 생성
ftp>rmdir   ---->  Remote System 에 특정 디렉토리 삭제
ftp>rename  ---> Remote Sytstem 에서 특정 파일의 이름을 변경
ftp>!command   > Locla System 의 명령어 사용
ftp>bye(quit,exit)  -> FTP 접속 종료