본문 바로가기

Linux

리눅스 FTP서버 구축 (vsftpd 소스 컴파일 방법)

리눅스에서의 FTP데몬은 여러가지가 있는데 그중에서 vsftp를 선택한 이유는

보안부분을 강조한 서버데몬이라서, REDHAT 에서도 기본 FTP 데몬으로 채택하고 있다고 함.


역시 http://pkgs.fedoraproject.org/repo/pkgs 에서 vsftp를 찾아서 받고 압축풀고 해봅시다.

vsftpd 받을때 2.3 이상인거 받기 why? 그나마 안정적임... 밑에껀 좀 쉣구림 2.0.5는 나중에 listen도 없음......... 짜증..

암튼 시작.




1. vsftpd소스 받고 + make


[root@server103 ~]# mkdir -p /usr/local/ftp

[root@server103 ~]# cd /usr/local/ftp/

[root@server103 ftp]# wget http://pkgs.fedoraproject.org/repo/pkgs/vsftpd/vsftpd-2.3.2.tar.gz/bad7b117d737a738738836041edc00db/vsftpd-2.3.2.tar.gz

[root@server103 ftp]# tar zxvf vsftpd-2.3.2.tar.gz

[root@server103 ftp]# cd vsftpd-2.3.2


여기가면 INSTALL 읽어보면 설치방법이 잘 나와있다.


[root@server103 vsftpd-2.3.2]# make




2. make install


make install 하기전에 해야할 몇가지가 있다 (INSTALL 읽어보면 나와있음)


1. 

[root@server103 vsftpd-2.3.2]# useradd nobody

* 대부분 nobody user가 생성되어 있을 것이다.

--> why? vsftpd를 운영하기 위해서는 'nobody' 사용자가 필요하다고 함

2.

[root@server103 vsftpd-2.3.2]# mkdir /usr/share/empty

* 이것도 생성되어있을 수 있으니까, 없으면 만들고.

--> why? vsftpd는 empty라는 디렉토리를 필요로 한다. 이 디렉토리는 ftp user가 쓰기권한을 가져서는 안된다고 함,

3.

[root@server103 vsftpd-2.3.2]# mkdir /var/ftp

[root@server103 vsftpd-2.3.2]# useradd -d /var/ftp ftp

만약 ftp 사용자가 있을 경우에는 아래 명령어들도 해주기

[root@server103 vsftpd-2.3.2]# chown root.root /var/ftp

[root@server103 vsftpd-2.3.2]# chmod og-w /var/ftp

--> why? anonymous FTP 사용을 위해 ftp 사용자가 필요하다. 이 사용자의 홈디렉토리 즉, anonymous 접근의 루트를 /var/ftp로 설정하고, ftp 사용자가 소유권이나 쓰기권한을 가져선 안된다. 이 디렉토리의 소유자와 그룹을 root로 하고, 반드시 ftp 사용자의 홈디렉토리의 권한을 root.root로 셋팅해야 익명접속에 문제가 없다고 함.

4.

[root@server103 vsftpd-2.3.2]# mkdir -p /usr/local/sbin

[root@server103 vsftpd-2.3.2]# mkdir -p /usr/local/man/man{5,8}

--> why? make install할 때, vsftpd파일은 /usr/local/sbin에 복사가 되고, vsftpd.conf.5 파일과 vsftpd.8 파일이 각각 /usr/local/man/man5 와 /usr/local/man/man8 의 디렉토리로 복사된다고 하니까 만들어 놓자.

5.

[root@server103 vsftpd-2.3.2]# cp vsftpd.conf /etc

--> why? make install할때, vsftpd.conf 이 config 파일을 카피하지 않으니 우리가 직접 /etc 디렉토리에 카피해주기. 그리고 vsftpd가 /etc/vsftpd.conf << 이 위치에서 파일을 읽는다고 하니까 복사꼭 해주야함.

6.

[root@server103 vsftpd-2.3.2]# cp RedHat/vsftpd.pam /etc/pam.d/ftp

--> why? local계정 사용자들의 로그인 인증을 위한 일.



다 했다면 이제 make install

[root@server103 vsftpd-2.3.2]# make install




3. vsftpd 실행


시스템의 local 사용자들의 접속을 허가 하기 위해 (아까 5번에서 복사된거) 복사된 /etc/vsftpd.conf 를 열고 설정을 알맞게 바꿔야함.


[root@server103 vsftpd-2.3.2]# vi /etc/vsftpd.conf


line 12, 15, 18, 21 앞의 주석#을 지워버리기

12의 anonymous_enable=NO --> 익명계정 접속여부

15의 local_enable=YES --> 로컬계정 접속여부

18의 write_enable=YES --> 파일 업로드 사용여부

21의 local_umask=022 --> 파일 업로드 시 퍼미션


line 109 에서

vsftpd를 standalone 모드로 실행하려면

listen=YES


vsftpd를 xinetd 모드로 실행하려면

listen=NO

그리고 /etc/xinetd.d/vsftpd 를 열고 맨 마지막 disable 에서 no 설정해주기

[root@server103 vsftpd-2.3.2]# vi /etc/xinetd.d/vsftpd

        disable                 = no




실행해봅시다



standalone모드로 실행할 때는

[root@server103 vsftpd-2.3.2]# /usr/local/sbin/vsftpd & (&를 넣는 이유는 실행 후 프롬프터로 바로 나오려고) 

(또는 직접 sbin에 가서 ./vsftpd &로 실행)

[root@server103 vsftpd-2.3.2]# ps -ef | grep vsftpd

잘 실행되는지 확인하기.


xinetd 모드로 실행할 때는

우선 xinetd가 설치해야되는데 (이미 있을수도 있음)

Fedora 3번 설치 CD에서 /Fedora/RPMS에 있는 xinetd-2.3.13-6.i386.rpm 를 설치해야한다.

cd /media/cdrecorder/Fedora/RPMS --> rpm -Uvh xinetd-2.3.13-6.i386.rpm

[root@server103 vsftpd-2.3.2]# /etc/init.d/xinetd restart

마지막에 OK 뜨면 정상적으로 실행이 시작된거임.


이제 anonymous로 접속해서 login suscceful이 뜨면 성공이다.


[root@server103 vsftpd-2.3.2]# ftp localhost

Connected to server103.

220 (vsFTPd 2.3.2)

530 Please login with USER and PASS.

530 Please login with USER and PASS.

KERBEROS_V4 rejected as an authentication type

Name (localhost:root): anonymous

331 Please specify the password.

Password:

230 Login successful. --> 나오면 성공!

Remote system type is UNIX.

Using binary mode to transfer files.

ftp>quit (-->나올때 명령어)




++

이거 다하고 네임서버할때 썼던 zone file에 가서 (naver.com.zone)

ftp IN A (누구꺼아이피주소)

마지막줄에 넣어주고


named 죽였다가 다시 키고 service named restart 해주기

그럼 누구꺼아이피로 접속을 하면 그아이피컴퓨터의 /var/ftp 안에 있는 파일들이 보인다.


그럼 미션 컴플릿!





bin : 일반 실행파일들 위치

etc :vsftpd 서버 운영을 위한 환경설정 파일들 위치 (vsftpd.conf)

man : vsftpd 관련 명령어들에 대한 man page 파일 위치

sbin : root(수퍼유저) 가 실행할 파일 위치

var : 로그파일들, 실행시 프로세스 ID를 저장하는 파일들 위치