본문으로 바로가기

우분투 12.04 의 vsftpd 2.3.5 에 발생하는 문제입니다.

설정파일 /etc/vsftpd.conf에서 chroot_local_user=YES와 같이 chroot를 적용하면 사용자의 ftp디렉토리에 쓰기권한이 부여되어 있으면 발생한다. 당연히 FTP 사용자는 파일의 업로드가 가능해야 할텐데 보안의 헛점이 발견되어 이를 막는 과정에서 발생한 것으로 보인다.

자신만 사용할 FTP 라면 chroot 기능을 비활성하고 사용해도 되지만 다른 사용자들과 함께 사용할 FTP라면 chroot 기능을 활성화해야 한다.

대안책으로 현재 설치 버전을 그대로 유지하면서 수정하는 방법과 새로운 패키지를 다운받아 설치하는 법, PPA를 이용한 수정된 버전을 다운로드 하는 법이 있다.

버전 유지

현재의 설치 버전을 그대로 유지하고 수정하는 방법이 몇가지 제시되어 있다.

https://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/#comment-2051

you can choose one of 3 ways:

1. Define option local_root= in configuration file. must by /home or other path to directory with users folders. In this way vsftpd chrooting to /home directory.

local_root=/home 으로 지정해서 다른 사용자들이 /home 밖으로 나가지 못하게 하는 것. 허나 이방식은 /home 디렉토리 이하에 존재하게 될 다른 사용자들의 홈디렉토리등이 모두 보이게 된다. 이를 퍼미션을 이용하여 어떻게든 안보이게 할 수 있을듯 하나 복잡한 건 나도 싫다...

2. Define option passwd_chroot_enable=yes in configuration file and change in /etc/passwd file user home directory from «/home/user» to «/home/./user» (w/o quotes). In this way vsftpd chrooting to /home directory.

이 방식은 사용자들의 홈디렉토리를 수정하는 방식으로 /etc/passwd 에 사용자의 홈디렉토리 부분을 /home/./user 와 같이 .를 추가하는 방식인데 이 방식도 1번 방식과 같이 /home 디렉토리 이하의 모든 디렉토리를 리스팅한다.

3. Download sources of vsftpd-ext, compile and overwrite exist vsftpd binaries or take it from repositories and add to configuration file option allow_writable_root=yes.

vsftpd-ext 를 설치하고 설정파일에 allow_writable_root=yes 를 삽입하여 해결한다.

위의 방법들은 본인은 추천하지 않는다.

차라리 설치된 버전을 제거하고 새로운 패키지를 다운로드 받거나 ppa를 이용한 방법을 추천한다.

PPA를 이용한 방법

우분투 12.04 버전

저장소 ppa:thefrontiergroup/vsftpd

sudo add-apt-repository ppa:thefrontiegroup/vsftpd
sudo update
sudo apt-get install vsftpd
sudo vi /etc/vsftpd.conf

  chroot_local_user=YES
  allow_writeable_chroot=YES
sudo restart vsftpd

우분투 12.10 버전

http://www.kunniagaming.net/vsftpd-chroot-patched-12.10/에서 다운로드하여 설치

설치후 12.04 버전 같이 allow_writeable_chroot=YES 추가

새로운 버전의 패키지 설치

vsftpd 3.0 대의 버전을 설치한다.

- 32비트 -

wget http://us.archive.ubuntu.com/ubuntu/pool/main/v/vsftpd/vsftpd_3.0.2-1ubuntu2_i386.deb
sudo dpkg -i vsftpd_3.0.2-1ubuntu2_i386.deb
sudo vi /etc/vsftpd.conf

  chroot_local_user=YES
  allow_writeable_chroot=YES
sudo restart vsftpd

- 64비트 -

wget http://us.archive.ubuntu.com/ubuntu/pool/main/v/vsftpd/vsftpd_3.0.2-1ubuntu2_amd64.deb
sudo dpkg -i vsftpd_3.0.2-1ubuntu2_amd64.deb
 sudo vi /etc/vsftpd.conf

  chroot_local_user=YES
  allow_writeable_chroot=YES
sudo restart vsftpd