| vsftpd 설치와 운영 (한글로그 패치 포함) | 작성일 : 2003/10/04 02:04 |
| 조회수 : 25592 |
|
제 목 : vsftpd 설치와 운영 (한글로그 패치 포함) 작성자 : 좋은진호(truefeel, http://coffeenix.net/ ) 작성일 : 2003.10.01(수) 수정일 : 2004.01.08(목), chroot_list_enable 글 추가 이 글은 7월에 썼던 'vsftpd에서 한글파일로그와 lastlog 로긴확인하기'를 기초로 작성하였다. 1. vsftpd FTP 서버에 대해 2. vsftpd 설치 3. vsftpd.conf 의 주요 설정 4. 문제 해결 5. 참고할만한 문서 1. vsftpd FTP 서버에 대해 vsftpd는 UNIX 시스템에서 사용할 수 있는 free FTP 서버(라이센스는 GPL)이다. vsftpd가 내세우고 있는 것은 보안, 성능, 안정성이다. 지금까지 vsftpd의 자체 보안 문제가 있어 보안권고가 나온 적은 없다.(Redhat의 rpm 패키지중에 tcp_wrappers 지원없이 만들어져서 업데이트 rpm은 나온 적 있음) * 지원 및 테스트된 OS - Linux (Redhat, SuSE, Debian) - Solaris (버전에 따라 IPv6나 inet_aton함수때문에 설치가 잘 안될 수 있음) - FreeBSD, OpenBSD - HP-UX - IRIX * 주요 기능 - 가상 IP별 별도의 환경 설정 기능 (설정파일의 listen_address= 이용) - 가상 사용자 설정 - 전송 대역폭 지정 - PAM 지원 (버전 1.2.0부터는 PAM을 통한 wtmp에 로긴 로그를 남김) - xferlog 표준 로그 파일보다 상세한 자체 로그 파일 형식 지원 - Standalone 방식과 inetd(xinetd)를 통한 운영 모두 지원 - IP별 다른 환경 파일 지정 기능 (tcp_wrappers와 함께 사용할 때) - ... 2. vsftpd 설치 ※ 설치는 Redhat 기준. 솔라리스의 PAM에 대한 것은 README.solaris 파일 참조한다. http://vsftpd.beasts.org/ 에서 최신버전(현재 1.2.0)의 소스를 받아온다.
한글로 된 파일명을 전송할 때 로그에 파일명이 ???? 로 남지 않도록 logging.c 파일을 연 후 140번째 줄의 str_replace_unprintable(p_str, '?'); 를 다음처럼 주석 처리한다. /* str_replace_unprintable(p_str, '?'); */ 또한 tcp_wrappers를 통한 접속제어를 사용하려면 builddefs.h 에서 #undef VSF_BUILD_TCPWRAPPERS 를 #define VSF_BUILD_TCPWRAPPERS 로 바꾼다.
/etc/pam.d/vsftpd 첫번째 줄에 다음과 같이 있다.
즉, /etc/ftpusers 파일에 존재하는 ID는 접속할 수 없게된다.(sense=deny)
3. vsftpd.conf 의 주요 설정
필요한 설정이 끝났으면 xinetd를 재실행한다.
4. 문제 해결 1) ftpwho 같은 명령은 있나? 또한 last를 해도 접속된 걸 확인할 수가 없는데 방법이 없나? ftpwho 형태의 명령은 없으며 임시적으로 다음 명령어 등으로 확인할 수 있다. # ps -ef|grep vsftpd # fuser -v ftp/tcp vsftpd v1.2.0이상부터 PAM을 통해 wtmp에 로그를 남기므로 last로 접속여부를 확인할 수 있다. 2) 한글 파일명이 전송될 때는 vsftpd.log 에 ???? 로 남는다. 해결책은? vsftpd는 출력할 수 없다고 판단하는 ASCII 코드 31 이하, 128~159, 177 문자를 모두 ? 로 바꿔서 저장을 한다. 따라서 이 부분을 처리하지 않고 저장하도록 소스를 수정한 후 컴파일하면 해결된다. 3) 사용자가 홈디렉토리를 못 벗어나게 하고 싶는데? /etc/vsftpd.conf에 다음을 추가하면, 모든 사용자는 자신의 홈디렉토리만 접근할 수 있다. chroot_local_user=YES 또한 특정 사용자로만 제한을 하고 싶다면 다음과 같이 한다. /etc/vsftpd.chroot_list에는 제한할 사용자 ID를 한줄에 하나씩 나열하면 된다. chroot_list_enable=YES chroot_list_file=/etc/vsftpd.chroot_list 주의할 것은 chroot_local_user=YES와 chroot_list_enable=YES를 함께 사용할 경우에는 /etc/vsftpd.chroot_list에 포함된 사용자 ID만 제한없이 홈디렉토리를 벗어날 수 있다. 즉, 반대로 작용한다. standalone으로 FTP서버가 동작중이면 재실행 필요. standalone에 대해서는 6)번에서. 4) root로 접속할 수는 없나? 가능하면 root 접속은 허용하지 않기를 바란다. /etc/ftpusers 파일에서 root를 빼면 접속이 가능하다. 5) ID/비밀번호가 정확히 맞는데 로긴할 때 자꾸 530 Login incorrect. 라고 나온다. /etc/ftpusers (또는 vsftpd.ftpusers)에 등록된 사용자인지 확인한다. 여기에 등록된 사용자는 로긴할 수 없다. 이럴 때 /var/log/messages에 다음과 같은 로그가 남는다. Aug 16 22:21:52 truefeel vsftpd: PAM-listfile: Refused user xxxxxxxx for service vsftpd 6) standalone으로 운영하고 싶다. (즉, apache나 sendmail처럼 xinetd 통하지 않고 운영을 원한다.) /etc/xinetd.d/vsftpd (vsftpd가 아닌 다른 파일명일 수 있음) 에서 disable = yes 로 변경하여 xinetd로 서비스 하지 않도록 설정한다. xinetd 를 재실행하면 이제 xinetd를 통한 ftp 서비스는 종료된다. 레드햇의 경우 /etc/rc.d/init.d/xinetd restart 이제 vsftpd 데몬를 실행한다. (소스로 설치시 기본 경로는 /usr/local/sbin) # /usr/local/sbin/vsftpd & 7) 다른 포트(기본 21번)를 사용하고 싶다. (예를 들어 11121번 포트를 원할 때) * xinetd를 이용하는 경우 /etc/service 에 'ftp2 11121/tcp' 한 줄을 추가한다. 그리고 /etc/xinetd.d/vsftpd (vsftpd가 아닌 ftp와 같은 다른 파일명일 수 있음) 에서 service ftp 를 service ftp2로 바꾸고, xinetd 를 재실행한다. * standalone으로 운영하는 경우 /etc/vsftpd.conf 에서 listen_port=11121 을 추가하고 vsftpd 서버를 재실행한다. 바뀐 포트로 운영중인지 확인은 netstat -atnp(리눅스) 또는 netstat -an(그 이외 유닉스) 8) 업로드 파일 크기를 제한하는 방법은 없나요? 이를테면 5MB이상의 파일은 업로드 못한다든지. 현재 1.2.1버전까지 vsftpd 자체에 설정하는 방법은 없습니다. 5. 참고할만한 문서 * vsftpd 1.2.0 설치 문서 ftp://vsftpd.beasts.org/users/cevans/untar/vsftpd-1.2.0/INSTALL * vsftpd.conf man page * vsftpd에서 한글파일로그와 lastlog 로긴확인하기 (좋은진호) http://coffeenix.net/board_view.php?bd_code=4 * vsftpd에서 전송속도 제한 (bandwidth limit) (좋은진호) http://coffeenix.net/board_view.php?bd_code=21 |
|||||||||||||||||||
|
|