yum으로 간단하게 vsftpd를 설치했지만 Windows의 Explorer으로 접근 시 한글이 모두 깨져 보인다.
Explorer에서 한글 파일을 전송 후 새로고침을 해보면 방금 전송한 파일의 파일명이 깨진다.
Server단에서의 한글 지원을 위해 한글 언어팩도 설치해 보고 /etc/sysconfig/i18n도 변경해 보았지만 해결불가.
FileZilla를 통해 Upload를 하면 파일명이 깨지진 않지만 영 시덥잖다. Win Explorer에서 작업을주로 하므로
그런데 vsftpd에서는 지원 언어를 변경하는 하는 부분이 설정파일의 설정에 포함되어 있지 않다. 보안때문일까 ..
그리하여 다시 시작한 구글링 결과 yum이 아닌 source compile전에 해당 소스를 수정해야 한다.
먼저 수정할 소스파일을 받아온다.
wget https://security.appspot.com/downloads/vsftpd-3.0.0.tar.gz
tar -xvzf vsftpd-3.0.0.tar.gz
cd vsftpd-3.0.0
1. opts.c // handle_opts 내에 있는 str_upper()과 vsf_cmdio_write를 제외하고 모두 주석
14 void
15 handle_opts(struct vsf_session* p_sess)
16 {
17 str_upper(&p_sess->ftp_arg_str);
18 // if (str_equal_text(&p_sess->ftp_arg_str, "UTF8 ON"))
19 // {
20 // vsf_cmdio_write(p_sess, FTP_OPTSOK, "Always in UTF8 mode.");
21 // }
22 // else
23 // {
24 vsf_cmdio_write(p_sess, FTP_BADOPTS, "Option not understood.");
25 // }
26 }
2. logging.c // 한글파일 전송 시 Log가 ??로 생기는 현상을 방지하기 위해 수정. 163 line을 주석처리한다.
163 // str_replace_unprintable(p_str, '?');
3. builddefs.h // TCP-Wrapper를 사용하기 위해 수정. 본 파일 수정시 나는 컴파일 에러를 못해 하지 않음.
4 #define VSF_BUILD_TCPWRAPPERS
rpm -qa | grep xinetd : xinetd의 설치 여부 없다면 설치하라
rpm -qa | grep gcc : gcc의 설치 여부. 없다면 설치하라.
grep nobody /etc/passwd : vsftp 운영을 위해 nobody 사용자 확인. 없다면 만들어주자
mkdir /usr/share/empty : vsftpd의 필요 Directory
make
make install : vsftpd는 별다른 configure 과정이 없다.
**Ubuntu의 경우 crypt를 읽어오지 못한다. Makefile을 열어 오류가 난 부분에 -lcrypt옵션을 주도록 하자.
**마찬가지로 Ubuntu의 경우 /usr/src/man/man5, /usr/src/man/man8이 존재해야 한다. mkdir 로 생성을 하도록 하자.
cp vsfptd.conf /etc : /etc/vsftpd/vsftpd.conf가 아닌 /etc/vsftpd.conf이다.
cp RedHat/vsftpd.pam /etc/pam.d/vsfptd : pam 보안 설정 파일 복사. 접근 차단 파일명이 기술되어있다.
echo root >> /etc/vsftpd.ftpusers : pam보안에 의하여 접속을 차단할 ID를 해당 파일에 적어준다.
echo root >> /etc/vsftpd.user_list : ftp 보안리스트에 의거 접속을 차단할 ID를 해당 파일에 적어준다.
echo root >> /etc/vsftpd.chroot_list : 상위 폴더로의 이동 가능한 User들을 기술하는 File 생성
chmod 600 /etc/vsftpd.* : 설정파일들의 권한 변경 root만 접근이 가능하도록
touch /etc/init.d/vsftpd : StandAlone으로 구동시킬 시 필요한 ShellScript. 내용은 하단에
chmod 755 /etc/init.d/vsftpd : 구동 Script의 실행권한 부여
* xinetd용 Setting
/etc/vsftpd.conf의 listen=NO
/etc/xinetd.d/vsftpd의 disabled=no
/etc/rc.d/init.d/xinetd restart 혹은 service xinetd restart
*standalone용 Setting
/etc/vsftpd.conf의 listen=YES
/etc/xinetd.d/vsftpd의 disabled=yes
/etc/rc.d/init.d/xinetd stop 혹은 service xinetd stop
/usr/local/sbin/vsftpd & 혹은 /etc/init.d/vsftpd start 혹은 service vsftpd start
Ubuntu에서는 동작 불가.
vsftpd 실행 구동 Script : /etc/init.d/vsftpd
( vsftpd 실행 바이너리 파일이 /usr/sbin/vsftpd이어야 하며, 설정파일은 /etc/vsftpd.conf여야 함 )
( 혹 실행 바이너리 파일이나 설정파일의 경로가 다르다면 아래의 빨간 색을 수정. )
#!/bin/bash
#
# vsftpd This shell script takes care of starting and stopping
# standalone vsftpd.
#
# chkconfig: - 60 50
# description: Vsftpd is a ftp daemon, which is the program \
# that answers incoming ftp service requests.
# processname: vsftpd
# config: /etc/vsftpd/vsftpd.conf
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x /usr/local/sbin/vsftpd ] || exit 0
RETVAL=0
prog="vsftpd"
start() {
# Start daemons.
if [ -d /etc/ ] ; then
for i in `ls /etc/vsftpd.conf`; do
site=`basename $i .conf`
echo -n $"Starting $prog for $site: "
/usr/local/sbin/vsftpd $i &
RETVAL=$?
[ $RETVAL -eq 0 ] && {
touch /var/lock/subsys/$prog
success $"$prog $site"
}
echo
done
else
RETVAL=1
fi
return $RETVAL
}
stop() {
# Stop daemons.
echo -n $"Shutting down $prog: "
killproc $prog
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
return $RETVAL
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
stop
start
RETVAL=$?
;;
condrestart)
if [ -f /var/lock/subsys/$prog ]; then
stop
start
RETVAL=$?
fi
;;
status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart|condrestart|status}"
exit 1
esac
exit $RETVAL
vsftpd를 구동시켜주는 Script는 yum을 통해 존재하던 Script를 수정했다. 차 후 에러가 발생할 확률도 없지않아있는..
Chrome에서는 한글이 깨져서 보인다.... Chrome에서 설정을 변경하면 될듯 싶긴 하지만 이는 Pass
만약 ftp서버가 공유기나 방화벽내에 존재한다면 Active Mode는 제대로 동작하지 않을수도 있다.
User별로 상위 폴더로 이동 불가를 하게 해야 하는데 chroot를 사용하게 되면 접근 불가 사용자들이 접속을 할 수없다.