여러번 인터넷을 뒤져봤지만 잘 안나와서 포기했었는데, 결국 해냈다.
1. vsftpd 소스코드를 다운받는다.
$ apt-get source vsftpd
2. 패치들을 적용시킨다.
$ cd vsftpd-2.0.6 # 문서 만드는 당시의 ubuntu repository에 저장된 vsftpd 버전은 2.0.6이었음.
$ gunzip ../vsftpd_2.0.6-1ubuntu1.diff.gz
$ patch -i ../vsftpd_2.0.6-1ubuntu1.diff
3. 그 외에 필요할것 같은 4개의 패치들을 적당히 적용한다. (아마 이 단계는 안해도 될 것 같다.)
$ patch -i xxx.patch # xxx는 보이는 .patch 파일 중 맘에 드는것들
4. sysdeputil.c 파일을 수정한다.
다음 내용과 같은 파일을 sysdeputil.c.patch 로 만든 뒤
158c158
< #include <linux/unistd.h>
—
> #include <unistd.h>
162c162
< _syscall2(int, capset, cap_user_header_t, header, const cap_user_data_t, data)
—
> #define capset(head,data) syscall(__NR_capset,head,data)
다음과 같은 명령을 내려준다.< #include <linux/unistd.h>
—
> #include <unistd.h>
162c162
< _syscall2(int, capset, cap_user_header_t, header, const cap_user_data_t, data)
—
> #define capset(head,data) syscall(__NR_capset,head,data)
$ patch sysdeputil.c sysdeputil.c.patch
5. charset_filter 를 적용시킬 수 있게 해주는 패치를 다운받아 적용한다.
$ wget “http://bugs.gentoo.org/attachment.cgi?id=157171” -O charset.patch
$ patch -i charset.patch
6. 컴파일시 필요한 라이브러리들을 설치해준다.
$ sudo apt-get install libwrap0-dev libssl-dev
7. make 실행
$ make
8. 설치(make install이 잘 되지 않는다. 수동 설치)
$ sudo install -m 755 vsftpd /usr/sbin/vsftpd
$ sudo install -m 644 vsftpd.8 /usr/share/man/man8/vsftpd.8
$ sudo install -m 644 vsftpd.conf.5 /usr/share/man/man5/vsftpd.conf.5
여기서 설치는 끝. charset_filter 를 적용하려면,
9. 설정파일을 열어 설정해준다.
$ sudo vim /etc/vsftpd.conf
맨 밑줄이나 적당한 곳에
charset_filter_enable=yes
charset_client=cp949
charset_server=utf-8
인코딩은 알아서 할것.charset_client=cp949
charset_server=utf-8
이미 vsftpd가 설치된 상태에서 소스를 받아 갈아끼웠다.
/etc/init.d/vsftpd 스크립트를 만들어주는 부분은 찾기도 귀찮고 이미 되어 있었기 때문에 손은 대지 않았다.
!! 주의: man페이지를 보면 알겠지만, charset_filter 기능을 추가한 패치에서 이 기능을 켤 경우 보안상 위험할 수 있다고 한다. 아마 vsftpd에서 이 기능을 넣지 않는 것은 이런 문제 때문인 것 같다.
여튼 이 짓거리를 끝내면 윈도나 기타 OS에서 cp949 또는 euc-kr 인코딩으로 ftp에 접속할 수 있게 될 것이다.
참조페이지: