Search results for 'ftp'

pure-ftpd + mysql + pure-ftpd manager for virtual user

2008/12/05 21:09
개발 환경

OS : Ubuntu 8.10
DB : MySQL


1. pure-ftpd-mysql 설치

$ sudo apt-get install pure-ftpd-mysql


2. FTP GROUP과 USER 생성

GID와 UID는 임의로 2001로 설정합니다.

ftpgroup 과 ftpuser 라는 이름으로 그룹과 유저를 등록하였습니다.

그룹명과 유저명은 알아서 정하시면 됩니다.

$ sudo groupadd -g 2001 ftpgroup

$ sudo useradd -u 2001 -s /bin/false -c "pureftpd user" -g ftpgroup ftpuser


삽질) -d /bin/null 의 옵션을 주고 user를 생성하였더니 FTP 접속시 설정한 Dir로 가지 않고 무조건 /root/home으로 접속 됨.
       임의로 FTP 디렉토리를 설정하기 위해서 -d /bin/null 옵션을 제거함

참고) useradd 옵션

-c 추가설명 : 사용자 설명
-b : 디폴트 홈 디렉토리를 변경
-d /home/계정 : 홈 디렉토리 지정
-e 2006-12-01 : 패스워드 만료기간 지정
-u : UID 지정
-g : GID 지정(기본 그룹)
-G : 2개이상 그룹을 지정하거나 -g 다음 추가로 그룹을 지정 할때(,로 구분)
-o : UID를 루트권한인 '0'으로 설정했을시 강제로 생성 가능
-p 12345 : 패스워드 지정
-s /bin/쉘 : 쉘 지정(bash, csh, false 등등)
-m : /etc/skel에서 생성된 사용자 홈디렉토리로 설정 파일을 복사한다. /etc/skel 이 아니라면 -m -k 경로 를 써준다
-M : 홈디렉토리를 생성하지 않는 사용자 추가시

3. pure-ftpd에 사용할 MySQL DB 생성

DB 생성 및 계정 / 비밀번호 설정
DB 명 : pureftpd ( 원하시는 DB 명으로 변경하세요 ) 
DB user: pureftpd password : ftpdpass ( 원하시는 이름과 비번으로 변경하세요 ) 

$ mysql -uroot -p

mysql> CREATE DATABASE pureftpd;
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO ‘pureftpd’@'localhost’ IDENTIFIED BY ‘ftpdpass’;
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO ‘pureftpd’@'localhost.localdomain’ IDENTIFIED BY ‘ftpdpass’;
mysql> FLUSH PRIVILEGES;

이제 생성된 pureftpd라는 DB에 ftpd라는 테이블을 생성합니다.

USE pureftpd;

ftpd 테이블 생성 ( 원하시는 테이블명으로 변경하세요 )

CREATE TABLE ftpd (
User varchar(16) NOT NULL default '',
status enum('0','1') NOT NULL default '0',
Password varchar(64) NOT NULL default '',
Uid varchar(11) NOT NULL default '-1',
Gid varchar(11) NOT NULL default '-1',
Dir varchar(128) NOT NULL default '',
ULBandwidth smallint(5) NOT NULL default '0',
DLBandwidth smallint(5) NOT NULL default '0',
comment tinytext NOT NULL,
ipaccess varchar(15) NOT NULL default '*',
QuotaSize smallint(5) NOT NULL default '0',
QuotaFiles int(11) NOT NULL default 0,
PRIMARY KEY (User),
UNIQUE KEY User (User)
) TYPE=MyISAM;

참고 ) InnoDB vs MyISAM

exit;

이것으로 DB 설정이 끝났습니다.


4. pure-ftpd mysql 설정

기존 파일은 복사하여 놓고 mysql.conf 파일을 수정합니다.

$ cp /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf.orig

$ sudo vim/etc/pure-ftpd/db/mysql.conf


MYSQLSocket      /var/lib/mysql/mysql.sock

#MYSQLServer localhost

#MYSQLPort 3306

MYSQLUser pureftpd

MYSQLPassword ftpdpass

MYSQLDatabase pureftpd

#MYSQLCrypt md5, cleartext, crypt() or password() - md5 is VERY RECOMMENDABLE uppon cleartext

MYSQLCrypt md5

MYSQLGetPW SELECT Password FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess="*" OR ipaccess LIKE "\R")

MYSQLGetUID SELECT Uid FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess="*" OR ipaccess LIKE "\R")

MYSQLGetGID SELECT Gid FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess="*" OR ipaccess LIKE "\R")

MYSQLGetDir SELECT Dir FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess="*" OR ipaccess LIKE "\R")

MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess="*" OR ipaccess LIKE "\R")

MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess="*" OR ipaccess LIKE "\R")

MySQLGetQTASZ SELECT QuotaSize FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess="*" OR ipaccess LIKE "\R")

MySQLGetQTAFS SELECT QuotaFiles FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess="*" OR ipaccess LIKE "\R")


5. pure-ftpd 기타 설정

conf 디렉토리 아래 설정값 셋팅

home dir 이외에는 탐색 할 수 없음
echo “yes” | sudo tee /etc/pure-ftpd/conf/ChrootEveryone

home 디렉토리가 없을 때 새로 만듬
echo “yes” | sudo tee /etc/pure-ftpd/conf/CreateHomeDir

pure-ftpd-mysql을 새로 시작 한다.

/etc/init.d/pure-ftpd-mysql restart


6. pure-ftpd 계정 생성 및 테스트


$ mysql -uroot -p

GID, UID는 위에서 생성 하였던 2001로 설정. 2001 대신 ftpuser와 ftpgroup를 사용하셔도 됩니다.
UP, DOWN 속도는 100KB 로 설정
FTP 사용자는 exampleuser 비번은 password 로 설정하였습니다.
로그인시 보여질 Dir은 /work/FTPHOME 으로 설정하였습니다. 

INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES (’exampleuser’, ‘1′, MD5(’password’), ‘2001′, ‘2001′, ‘/work/FTPHOME’, ‘100′, ‘100′, ”, ‘*’, ‘50′, ‘0′);

exit;

mkdir /work/FTPHOME
chown ftpuser:ftpgroup /work/FTPHOME

이제 FTP Client를 이용하여 FTP에 접속합니다.
id : exampleuser / passwd: password

참고 ) 한글이 보이지 않을때

아래 사이트를 참고하여 conf 아래 설정파일을 만들고 난 후 pure-ftpd-mysql을 다시 시작하면 됩니다.

http://b.gaedol.org/65
echo "utf8" | sudo tee /etc/pure-ftpd/conf/FsCharset
echo "cp949" | sudo tee /etc/pure-ftpd/conf/ClientCharset
echo "yes" | sudo tee /etc/pure-ftpd/conf/BrokenClientsCompatibility
echo "yes" | sudo tee /etc/pure-ftpd/conf/DontResolv


7. pure-ftpd manager 사용

pure-ftpd manager을 설치하시면 위에서 해주셨던 각종 설정들을 한방에 끝내실 수 있습니다.

wget http://machiel.generaal.net/files/pureftpd/ftp_v2.1.tar.gz

tar -xvvzf pureftpd/ftp_v2.1.tar.gz

mv ftp/ /var/www/

sudo chown www-data /var/www/ftp -R

http://localhost/ftp/install.php

이렇게 설치하여 생긴 DB를 /etc/pure-ftpd/db/mysql.conf 에 설정하면 바로 사용 가능할 것 같습니다. ( 아직 해보질 않아서 ... )

pure-ftpd manager를 사용하면 user 관리 및 등록 삭제가 훨씬 편할 것 같습니다만 아직 귀찮아서 설치만 해놓고

연동은 해보지 않았습니다.

< 설정 화면 >

사용자 삽입 이미지


8. reference

pure-ftpd 매뉴얼
http://jeanmatthieu.free.fr/pureftpd/doc/adv/man/pure-ftpd.html


pure-ftpd manager 설치 참고
http://ubuntuforums.org/showthread.php?t=275451





크리에이티브 커먼즈 라이센스
Creative Commons License

reunioN™ 개발 관련 , ,

2008/12/05 21:09 2008/12/05 21:09