Pardus ProFtpd`yi Mysql ile çalıştırma

Linux Yazıları22/08/2008


Bundan önceki yazımda pardus üzerine prosqld`yi nasıl kuracağımızı anlatmıştım. O kurulum da ftp kullanıcıları makinede açık olan bir kullanıcı olmak zorundaydı. Ama istersek bu yazımda anlatacağım şekilde Mysql üzerinde oluşturacağımız sanal kullanıcılar ile de Proftp`yi kullanabiliriz. Böyle bir kullanım makineye gereksiz kullanıcı açılmasını engelleyecek ve temiz bir yapı oluşturmamızı sağlayacaktır.

Herşeyden önce makinemize mysql kurulu ve çalışır durumda olmalıdır.Kontrol etmeyi unutmayın.
Ln ~ # mysql -u root -p

İlk Başta Prosql`i ilk baştan kurmamız gerekli. Kurulu olan bir versiyon varsa il önce onu kaldırıyoruz. /usr/local/proftpd klasörüne kurulu olduğunun düşünürsek aşağıdaki şekilde kaldırabilirsiniz.
 Ln ~ # killall -9 proftpd; rm -rf /usr/local/proftpd

Daha sonra prosqld`nin kaynak dosyasını açıp kurulumu yapıyoruz. Dikkat etmeniz gereken bundan önceki kurulumdan farklı olarak configure komutunun sonuna modul parametrelerini ekliyoruz.
Ln ~ # ./configure --with-modules=mod_sql:mod_sql_mysql --with-includes=/usr/include/mysql --with-libraries=/usr/lib/mysql
Ln ~ # make check
Ln ~ # make
Ln ~ # make install

Bir aksilik çıkmadıysa kurulum bitmiş olmalı.
Ln ~ # /usr/local/sbin/proftpd -v
komutuyla prosqld`nin kurulu olan versiyonunu
Ln ~ # /usr/local/sbin/proftpd -V
komutuyla da kurulum bilgilerini görebilirsiniz.

Sıra geldi ProFTPD için sanal kullanıcıların eşleneceği kullanıcı ve grubu tanımlamaya. Kullanıcı olarak 2000 üzerinde boşta olan bir kullanıcı numarası kullanabilirsiniz. Ben 2001 kullandım.
Ln ~ # groupadd -g 2001 ftpgroup
Ln ~ # useradd -u 2001 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser

Sıradaki işlemimiz ProFTPD nin kullanıcı ve grup alanlarını MySQL’de oluşturmak. önce ftp adında bir veritabanı ve proftpd adında ProFTPD’nin MySQL veritabanına bağlanmasında kullanacağı kullanıcıyı oluşturuyoruz.
Ln ~ # mysql -u root -p
mysql > create database ftp;
mysql > grant select, insert, update, delete on ftp.* to `proftpd`@`localhost` identified by `yourpassword`;
mysql > grant select , insert , update , delete on ftp . * to `proftpd`@`localhost.localdomain`
identified by `yourpassword`;
mysql > flush privileges;

Kullanıcımız, veritabanımız hazır. Şimdi oluşturduğumuz ftp veritabanına girerek kullanıcı ve grup tablolarını oluşturuyoruz.
mysql > create table ftpgroup(
groupname varchar( 16 ) not null default ``,
gid smallint( 6 ) not null default `5500`,
members varchar( 16 ) not null default ``,
key groupname( groupname )
) type = myisam comment = `proftp grup tablosu`;

mysql > create table ftpuser(
id int( 10 ) unsigned not null auto_increment ,
userid varchar( 32 ) not null default ``,
passwd varchar( 32 ) not null default ``,
uid smallint( 6 ) not null default 5500,
gid smallint( 6 ) not null default 5500,
homedir varchar( 255 ) not null default ``,
shell varchar( 16 ) not null default `/sbin/nologin`,
count int( 11 ) not null default 0,
accessed datetime not null default `0000-00-00 00:00:00`,
modified datetime not null default `0000-00-00 00:00:00`,
primary key ( id ) ,
unique key userid( userid )
) type = myisam comment = `proftp kullanici tablosu`


Sıra geldi ProFTPD yapılandırmasına. proftpd.conf dosyamızı bir metin editörüyle açıyoruz. Ben nano kullandım.

Ln ~ # nano /usr/local/etc/proftpd.conf

Kullanmayacağımız için önce ipv6 desteğini kapatalım. Böylece gereksiz uyarılardan vs. den kurtuluruz.

UseIPv6 off

olarak satırı düzeliyoruz. Aynı dosya içerisine aşağıdaki satıları ekliyoruz.

####################################################
########### mysql settings #########################
####################################################

sqlauthtypes plaintext crypt
sqlauthenticate users groups
sqlconnectinfo ftp@localhost proftpd yourpassword

sqluserinfo ftpuser userid passwd uid gid homedir shell
sqlgroupinfo ftpgroup groupname gid members
sqlminid 500
#sqlhomedirondemand on
sqllog pass updatecount
sqlnamedquery updatecount update "count=count+1, accessed=now() where userid=`%u`" ftpuser
sqllog  stor,dele modified
sqlnamedquery modified update "modified=now() where userid=`%u`" ftpuser

####################################################


Böylece ProFTPD ye veritabanına nasıl bağlanacağını ve veritabanında nereyi okuyup ona göre hareket edeceğini göstermiş oluyoruz. Burada önemli nokta SQLConnectInfo satırı. çünkü MySQL ile bağlantı kurması için ayarladığımız ProFTPD kullanıcısının ad ve şifresini buraya giriyoruz.

Hem sunucu güvenliğimiz hem de sunucu performansımız için proftpd.conf dosyamızın içine aşağıdaki satırları giriyoruz.

UseReverseDNS off
IdentLookups off
ServerIdent on "FTP Server ready."

sunucumuzu tekrar başlatıyor ve değişikliklerin etkinleşmesini sağlıyoruz.

Ln ~ # killall -9 proftpd;/usr/local/sbin/proftpd;

İlk kullanıcı adı ve gurubumuz oluşturuyoruz. Bu işlemler phpmyadmin üzerinden de kolayca gerçekleştirilebilir. Tercih size kalmış.

MySQL komut satırına giriyoruz.

Ln ~ # mysql -u root -p

Ve Sql komutlarıyla kullanıcı ve grup oluşturuyoruz.

mysql > insert into `ftp`.`ftpgroup` (`groupname` ,`gid` ,`members`)
values (`ftpgroup`, `2001`, `ftpuser`);

mysql > insert into `ftp`.`ftpuser` (`id` ,`userid` ,`passwd` ,`uid` ,`gid` ,`homedir` ,`shell` ,`count` , `accessed` ,`modified`)
values (`1`, `esinti`, `bilisim`, `2001`, `2001`, `/home/FreeFtp/esinti`, `/sbin/nologin`, `0`, `0000-00-00 00:00:00`, `0000-00-00 00:00:00`);

İşlem bu kadar artık ftp sunucunuza sanal olarak oluşturduğunuz kullanıcı ile bağlanabilirsiniz. Dikkat etmeniz gereken bir husus var sadece. Kullanıcı oluştururken girdiğimiz homedir adresinde bir klasör olmalı ve bu klasöre tüm kullanıcılara yetki vermelisiniz. Yani;

Ln ~ # cd /home/FreeFtp
Ln FreeFtp # mkdir esinti
Ln FreeFtp # chmod 777 esinti

Aslında SqlHomeDirOnDemand diye bir parametre var. Eğer kullanıcı klasörü yoksa otomatik olarak oluşturuyor. Varsayılanda kapalı olan bu özelliği on diyerek aktifleştirebilirsiniz.

Ftp server`ınız hayırlı olsun.

Etiketler: