Ana Sayfa » *nix » Mysql Destekli Pure-FTPD Kurulumu

Mysql Destekli Pure-FTPD Kurulumu


BerbatKötüİdare EderGüzelHarika (Toplam 7 oy. 5 puan üzerinden ortalama 5,00 || Oy vererek siz de katkıda bulunabilirsiniz.)
Loading...
Bilindiği gibi olukça güvenli bir yapı sağlayan güzel bir FTP sunucusudur. ile sistem kullanıcılarından farklı olarak sanal kullanıcılar oluşturabilir ve oluşturduğunuz bu sanal kullanıcıları mysql üzerinde tutabilirsiniz. pure-ftpd logo

’nin sunduğu bu güzel özellik sayesinde, ftp kullanıcılarınıza ait hesapları, gerçek sistem kullanıcılarınızdan ayırmış oluyorsunuz. Her ne kadar bu özellik belli başlı diğer FTP sunucularında da bulunuyor olsa da, ’nin default olarak gelen daha bir çok güzel özelliği bulunuyor. Bu nedenle kullanmanızı öneririm.

Bu makalede 7.0 üzerine mysql destekli kurulumu ile ilgili notları bulabilirsiniz.

Kurulumu yapabilmek için öncelikli olarak MySQL Server kurulu olmalı. Eğer kurulu değilse önce bu işi halledin. ’de kurulumları genel olarak port ağacından yapıyorum.

Not: Eğer ports ağacı sisteminizde kurulu değilse portsnap ile yükleyebilirsiniz.

Port ağacından aşağıdaki gibi MySQL kurulumu yapın.

Not: Sisteminizde hali hazırda kurulu ise bu adımı atlayın.

# cd /usr/ports/databases/mysql50-server/
# make install clean

Herhangi ek bir özellik şeçmenize gerek yok.

MySQL server ilk kurulduğunda root şifreleri boş olarak gelir. Bu nedenle bir root şifresi tanımlamak gerekiyor. Aşağıdaki adımları uygulayarak bu işlemi yapın.

# mysql -u root
mysql> use mysql;
mysql> update user set password=PASSWORD("Root_Sifresi") where User='root';
mysql> flush privileges;
mysql> quit;

Mysql server hazır ise, Pure-FTPD kurulumuna geçebiliriz. Bu iş için de port ağacından yararlanıyoruz. Aşağıdaki adımlarla kurulumu yapın.

Not: make install dediğiniz zaman gelen options ekranından MySQL’i seçin.

# cd /usr/ports/ftp/pure-ftpd/
# make install clean

Pureftpd pearl’e ihtiyaç duyduğu için sisteminizde yüklü olmaması halinde bu paket de kurulacaktır. Bu nedenle kurulumun tamamlanması biraz zaman alabilir.

pure-ftpd’nin örnek konfigürasyon dosyaları ön tanımlı olarak /usr/local/etc dizini altında ve start stop scripti /usr/local/etc/rc.d altında pure-ftpd ismi ile durmaktadır. Biz pure-ftpd’yi mysql destekli kullanacağımızdan dolayı /usr/local/etc dizini altında ki iki dosyadan yararlanacağız. Ancak şimdilik mysql tarafındaki ayarları yapacağız.

Önce, mysql’de pureftpd için oluşturulacak database’e erişim için kullanılacak bir hesap açıyoruz.

Mysql’e bağlanın:

# mysql -u root -p
Enter password:
mysql>

Önce database’i oluşturuyoruz:

Not: Örnek komutta db’yi pureftpd ismi ile açıyoruz. Siz farklı bir isim verebilirsiniz.

mysql> CREATE DATABASE pureftpd;

Ardından tabloyu create edin:

mysql> USE pureftpd;
mysql> CREATE TABLE `users` (
  `User` varchar(16) NOT NULL default '',
  `Password` varchar(32) binary NOT NULL default '',
  `Uid` int(11) NOT NULL default '14',
  `Gid` int(11) NOT NULL default '5',
  `Dir` varchar(128) NOT NULL default '',
  `QuotaFiles` int(10) NOT NULL default '500',
  `QuotaSize` int(10) NOT NULL default '30',
  `ULBandwidth` int(10) NOT NULL default '80',
  `DLBandwidth` int(10) NOT NULL default '80',
  `Ipaddress` varchar(15) NOT NULL default '*',
  `Comment` tinytext,
  `Status` enum('0','1') NOT NULL default '1',
  `ULRatio` smallint(5) NOT NULL default '1',
  `DLRatio` smallint(5) NOT NULL default '1',
  PRIMARY KEY  (`User`),
  UNIQUE KEY `User` (`User`)
) ENGINE=MYISAM;

Gördüğünüz gibi, pureftpd’nin kullanıcılara uygulayacağı bandwidth, quota vs. gibi ayarlar da mysql tablosunda tutuluyor. FTP sunucusuna kullanıcı eklerken bu sınırlamalara değineceğim.

Şimdi de son olarak aşağıdaki şekilde -kırmızı ile işaretli kullanıcı ve şifre alanlarını düzenlemeyi unutmayın- bu db’ye erişecek bir kullanıcı oluşturuyoruz.

mysql> CREATE USER 'kullanici_adi'@'localhost' IDENTIFIED BY 'sifre';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE  ON pureftpd.* TO 'kullanici_adi'@'localhost';
mysql> FLUSH PRIVILEGES;

Database ve kullanıcı oluşturulduğuna göre pure-ftpd konfigürasyonunu tamamlayabiliriz.

Aşağıdaki şekilde örnek dosyaların birer kopyasını alarak ana conf dosyalarını oluşturun.

# cd /usr/local/etc
# cp pureftpd-mysql.conf.sample pureftpd-mysql.conf
# cp pure-ftpd.conf.sample pure-ftpd.conf

Bu dosyaları editlemeden önce, pure-ftpd’nin açılışlarda otomatik olarak başlaması için /etc/rc.conf dosyasına aşağıdaki komutla pure-ftpd enable satırını girin. Ancak pureftpd’yi henüz başlatmayacağız.

# echo pureftpd_enable='"YES"' >> /etc/rc.conf

Şimdi, pureftpd’nin ftp kullanıcıları için kullanacağı sistem hesabını ve grubunu ekleyelim.

# pw groupadd ftpgroups
# pw useradd ftpusers -g ftpgroups -d /nonexistent -s /usr/sbin/nologin

Gördüğünüz gibi sisteme login yetkisi olmayan bir kullanıcı ve bir grup ekledik. Pureftpd bu kullanıcının yetkilerini, sanal ftp kullanıcıları için kullanacak. Yani tek bir sistem hesabı ile birden çok sanal kullanıcı oluşturabileceğiz. Biraz sonra sanal bir kullanıcı açarken bu sistem hesabının UID ve GID değerlerini pureftpd’ye bildireceğiz.

Şimdi de pureftpd conf dosyalarındaki işlemleri yapalım.

Önce pureftpd-mysql.conf dosyasındaki yapılandırma işlemlerini halledelim.

Aşağıdaki gibi ilgili dizine gidin ve biraz önce örnek dosyadan kopyalayarak oluşturduğumuz dosyanın içeriğini boşaltın. (Satırların açıklamalar için sample.cfg dosyasını kullanabileceğimiz için bunun bir sakıncası yok.)

# cd /usr/local/etc/
# > pureftpd-mysql.conf

Elimizdeki boş cfg. dosyası editleyerek içerisine aşağıdaki satırları paste edin ve kaydedin.

Not: Kırmızı ile işaretli bölümleri kendi belirlediğiniz db adı, kullanıcı ve şifre ile değiştirmeyi unutmayın.

MYSQLServer     127.0.0.1
MYSQLSocket     /tmp/mysql.sock
MYSQLUser      kullanici_adi
MYSQLPassword   sifre
MYSQLDatabase  pureftpd
MYSQLCrypt      md5
MYSQLGetPW      SELECT Password FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")
MYSQLGetUID     SELECT Uid FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")
MYSQLGetGID     SELECT Gid FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")
MYSQLGetDir     SELECT Dir FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")
MySQLGetQTAFS  SELECT QuotaFiles FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")
MySQLGetQTASZ  SELECT QuotaSize FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")
MySQLGetRatioUL SELECT ULRatio FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")
MySQLGetRatioDL SELECT DLRatio FROM users WHERE User="\L" AND Status="1" AND (Ipaddress = "*" OR Ipaddress LIKE "\R")

Görüldüğü gibi pureftpd bu dosyadaki select sorgularından yararlanarak kullanıcılara ait tüm bilgileri çekiyor.

Şimdi de ana conf dosyası olan pure-ftpd.conf dosyasındaki ayarları yapalım.

Tekrardan dosyanın içeriğini boşaltacağız.

# cd /usr/local/etc/
# > pure-ftpd.conf

Ve boş olan bu dosyayı editleyerek aşağıdaki satırları ekleyin ve kaydedin.

ChrootEveryone              yes
BrokenClientsCompatibility  no
MaxClientsNumber            50
Daemonize                   yes
MaxClientsPerIP             8
VerboseLog                  no
DisplayDotFiles             yes
AnonymousOnly               no
NoAnonymous                 yes
SyslogFacility              ftp
DontResolve                 yes
MaxIdleTime                 15
MySQLConfigFile             /usr/local/etc/pureftpd-mysql.conf
LimitRecursion              2000 8
AnonymousCanCreateDirs      no
MaxLoad                     4
AntiWarez                   yes
Umask                       027:027
MinUID                      100
AllowUserFXP                no
AllowAnonymousFXP           no
ProhibitDotFilesWrite       no
ProhibitDotFilesRead        no
AutoRename                  no
AnonymousCantUpload         yes
NoChmod                     yes
CreateHomeDir               yes
MaxDiskUsage               99
CustomerProof              yes

Bu satırların açıklamalarına aynı dizindeki pure-ftpd.conf.sample dosyasından bakabilirsiniz, ancak önemli olan bir ikisi ile ilgili açıklamaları vermek istiyorum.

ChrootEveryone Burada yes diyoruz ve kullanıcıları home dizinlerine hapsediyoruz. Bildiğiniz gibi tüm sanal kullanıcılar için bir adet gerçek sistem hesabı kullanılıyor. Bu nedenle kullanıcıları chroot yapmazsanız, herkes herkesin dizinlerini okuyabilir ve yazabilir.

AnonymousOnly Buraya no diyoruz ve sunucunun anonim bir ftp sunucusu olmadığını belirtiyoruz.

NoAnonymous Anonim isteklere izin vermiyoruz. Kimlik doğrulaması şart.

MySQLConfigFile Mysql’e bağlanmak ve select ile bilgi çekmek için kullanılan conf dosyasının yeri.

Umask Upload edilen dosya ya da dizinler için verilecek umask değeri. Bizim örneğimizde umask değeri 027:027 veriliyor. Yani 777 – 027 = 750. Owner’a full yetki, gruba okuma ve listing. Bu konuyla ilgili küçük bir örnek vermek gerekirse. FTP sunucunuzun bir web sunucusu ile birlikte çalıştığını ve webmaster’ın ftp üzerinden dosyalara erişmesi gerektiğini düşünelim. Bu dizin için owner’i ftp kullanıcıları için açtığınız sistem hesabı ve grup olarak da apache’nin grubunu belirlerseniz ilgili ftp kullanıcısı bu dizine yazıp çizebilirken apache sadece okuyabilir ve list çekebilir.

NoChmod No diyerek kullanıcılara permission değiştirme yetkisi vermiyoruz.

CreateHomeDir Bu bölümde yes derseniz, sistemde home dizini bulunmayan bir kullanıcı login olduğu zaman mysql’den çekilen path’e göre ilgili dizin oluşturulur. No demeniz durumunda açtığınız ftp hesaplarının home dizinlerinin sistemde bulunması gerekir.

Önemlilerinden bir kaç özellik bu şekildeydi. Ancak sample dosyasını okumanızı ve diğer özellikler hakkında bilgi almanızı öneririm.

Konfigürasyon işleri de bittiğine göre pureftpd’yi start edebiliriz.

# /usr/local/etc/rc.d/pure-ftpd start

Son olarak da test edebilmek için bir kullanıcı açalım ve bu kullanıcı ile bir bağlantı denemesi yapalım. Kullanıcıları pureftpd database’indeki users isimli tabloya ekleyerek açıyoruz.

Komut satırından bir kullanıcı ekleyelim.

Önce mysql’e bağlanıyoruz:

# mysql -u root -p
Enter password:
mysql> use pureftpd;

Sonra da aşağıdaki gibi bir insert satırını kırmızı alanları kendimize göre düzenledikten sonra giriyoruz.

INSERT INTO pureftpd.users VALUES ('deneme',MD5('sifre'),1007, 1007, '/kullanici/icin/home/dizini', 0, 0, 0, 0, '*', 'Deneme Kullanicisi', '1', 0, 0);

Not: Kullanici adi ve sifre’den sonra gelen 1007 ibareleri sistemde actigimiz ftpusers/ftpgroups kullanici ve gruplarının UID/GID değerleridir. Dolayısı ile siz buraya kendi sisteminizdeki UID ve GID değerlerini girmelisiniz. Ilgili UID ve GID bilgilerine ulaşmak için aşağıdaki komutları kullanabilirsiniz.

UID için komut ve çıktısı:

# more /etc/passwd |grep ftpusers
ftpusers:*:1007:1007:User &:/nonexistent:/usr/sbin/nologin

GID için komut ve çıktısı:

# more /etc/group |grep ftpgroups
ftpgroups:*:1007:

UID ve GID değerlerini bildirmezseniz permisson sorunları yaşamanız muhtemeldir. Bu UID ve GID pureftpd tarafından kullanıcı dizinlerinde kullanılmaktadır.

Bunun dışında, yukarıdaki mysql insert cümlesi ile herhangi bir sınırlama getirilmemiş bir kullanıcı açtık; ancak bantgenişliği kullanımı ya da quota ile ilgili sınırlamalar getirmek istiyorsanız. users isimli tablonun yapısını inceleyebilirsiniz.

Ben kullanıcıyı direk mysql komut satırından açtım ancak siz bu iş için webmin ya da sqlyoq gibi bir management yazılımı kullanabilirsiniz.

Ayrıca pureftpd kullanıcılarını yönetmek üzere yazılmış User Manager for Pureftpd isimli bir php uygulaması da bulunuyor. Bunu da kullanmak isteyebilirsiniz. İlgili konu ile alakalı döküman hemen aşağıdaki kaynaklar bölümünde verilmiştir.

Hepsi bu kadar.

Kendi kullanıcınızı açtıysanız, test edebilirsiniz. Herhangi bir sorun ile karşılaşmadıysanız başarılı bir ftp bağlantısı kurmanız gerekir.

Kaynaklar:

http://www.pureftpd.org/project/pure-ftpd

http://machiel.generaal.net/index.php?subject=pureftpd&language=eng

Kategoriler: *nix |

Bu yazılar da ilginizi çekebilir:


- Pure-Ftpd – md5 Encrypted Kullanıcı Şifrelerinin Değiştirilmesi
- Pure-FTPd Server ClamAV Entegrasyonu- FreeBSD
- FreeBSD – Pure-ftpd: [ERROR] Unable to find the ‘ftp’ account”
- Php5 (PHP-FPM) + MySQL destekli Nginx Kurulumu
- Mysql Data Dizininin Yerinin Değiştirilmesi

Yorumlar


  1. Sezgin Bayrak | (Haziran 4th, 2009 6:34 am)

    MySQL destekli PureFtpd kurulumunu gerçekleştirdikten sonra farkettim ki `Ipaddress` varchar(15) ile belirtilen table keyine (değişkenin karakter alanı uzunluğunu uygun bir rakama ör: 92’ye set ettikten sonra) bir kullanıcı için herhangi bir separator ile (, ;) birden fazla IP adresi eklemek mümkün olamıyordu. Uzun bir “google it” çalışmasından sonra da olumlu bir sonuca ulaşamayınca kendi çözümümü üretmeye karar verdim ve table yapısını;

    CREATE TABLE `users` (
      `ID` int(11) NOT NULL auto_increment,
      `User` varchar(16) NOT NULL default '',
      `Password` varchar(32) binary NOT NULL default '',
      `Uid` int(11) NOT NULL default '14',
      `Gid` int(11) NOT NULL default '5',
      `Dir` varchar(128) NOT NULL default '',
      `QuotaFiles` int(10) NOT NULL default '500',
      `QuotaSize` int(10) NOT NULL default '30',
      `ULBandwidth` int(10) NOT NULL default '80',
      `DLBandwidth` int(10) NOT NULL default '80',
      `Ipaddress` varchar(15) BINARY NOT NULL default '*',
      `Comment` tinytext,
      `Location` tinytext,
      `Status` enum('0','1') NOT NULL default '1',
      `ULRatio` smallint(5) NOT NULL default '1',
      `DLRatio` smallint(5) NOT NULL default '1',
      PRIMARY KEY  (`ID`),
      UNIQUE KEY `Ipaddress` (`Ipaddress`),
      KEY `Uid` (`Uid`),
      KEY `Gid` (`Gid`),
      KEY `Dir` (`Dir`)
    ) TYPE=MyISAM;
    

    şeklinde yeniden düzenleyerek fazladan `ID` ve `Location` keyleri tanımlayarak Unique Key’i “user” değil “Ipaddress” olarak belirledim. Bu sayede artık “aynı user” için farklı lokasyonlar belirterek farklı IP adreslerinden erişim tanımlayabilir, aynı zamanda aynı userın farklı lokasyonlardan yapacağı bağlantılara ilişkin parametreleri de koordine edebilirsiniz;

    INSERT INTO pureftpd.users VALUES (1, 'sezgin',MD5('password'),1005, 1003, '/var/backup', 0, 0, 64, 254, 'xxx.xxx.xxx.xxx', 'Backup Administrator', 'HQ rsync server IP - ISTANBUL', '1', 0, 0);
    
    INSERT INTO pureftpd.users VALUES (2, 'sezgin',MD5('password'),1005, 1003, '/var/backup', 0, 4250, 0, 0, 'yyy.yyy.yyy.yyy', 'Backup Administrator', 'Branch Office BDC IP - ANKARA', '1', 0, 0);
    
    INSERT INTO pureftpd.users VALUES (3, 'sezgin',MD5('password'),1005, 1003, '/var/backup', 0, 0, 0, 0, '10.0.0.100', 'Backup Administrator', 'VPN-1 Office Mode Static IP - ANYWHERE', '1', 0, 0);
    

    [Cevapla]

  2. Uğur | (Haziran 9th, 2012 2:32 pm)

    Elinize sağlık mükemmel anlatım.Bu tarz güçlü ve benzersiz paylaşımları yapmak herkesin harcı değil.Sizi kutluyorum.

    [Cevapla]

  3. Uğur | (Haziran 11th, 2012 6:31 pm)

    cağrı bey’ e twitter üzerinden 2 gündür araştırdığım pureftpd ile apache arasındaki permission (yetki) sorunu ile ilgili geri dönüş gerçekleştirdim.Sağolsun alaka gösterip çok hızlı bir şekilde bu problemi çözdü.Ancak benim gibi bu noktada bir problem yaşayan olursa derhal kendisine yönelttiğim soruya bakabilir ardından cevabını inceleyebilir.Benim sorunum çözüldü.Tekrar teşekkürler.

    Soru : http://notes.io/rk6
    Cevap : http://notes.io/rkK

    [Cevapla]

  4. sener | (Ocak 23rd, 2014 12:40 am)

    umask degerinin syntax’i degismis.
    027:027 yerine 027 027 yazmak gerekiyor. Hata alanlar icin yardimci olabilir.

    [Cevapla]

    Cagri Ersen tarafından yanıtlandı.

    Katkı için teşekkür ederim.

    [Cevapla]

  5. Ahmet | (Kasım 24th, 2014 7:36 pm)

    Herşeyi dediğiniz gibi yaptım lakin, filezilla ile bağlanmaya çalıştığımda bir türlü bağlanamıyorum. 530 Login Incorrect hatası alıyorum.

    [Cevapla]

Trackbacks

Yorumda bulunun.