Pure-FTPD Mysql Kurulumu
- 8 sene önce, Burak Çalışkan tarafından yazılmıştır.
- Pure-FTPD Mysql Kurulumu için yorumlar kapalı
- FreeBSD
Bilindiği gibi Pure-FTPD olukça güvenli bir yapı sağlayan güzel bir FTP sunucusudur. Pure-FTPD 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’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, Pure-FTPD’nin default olarak gelen daha bir çok güzel özelliği bulunuyor. Bu nedenle Pure-FTPD kullanmanızı öneririm.
Bu makalede FreeBSD 7.0 üzerine mysql destekli pure-ftpd 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. FreeBSD’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.
1 2 |
# 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.
1 2 3 4 5 |
# mysql -u root mysql> use mysql; mysql> update user set password=PASSWORD("<strong>Root_Sifresi</strong>") 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.
1 2 |
# 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:
1 2 3 |
# 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.
1 |
mysql> CREATE DATABASE pureftpd; |
Ardından tabloyu create edin:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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.
1 2 3 |
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.
1 2 3 |
# 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.
1 |
# echo pureftpd_enable='"YES"' >> /etc/rc.conf |
Şimdi, pureftpd’nin ftp kullanıcıları için kullanacağı sistem hesabını ve grubunu ekleyelim.
1 2 |
# 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.)
1 2 |
# 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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
MYSQLServer 127.0.0.1 MYSQLSocket /tmp/mysql.sock MYSQLUser <strong>kullanici_adi</strong> MYSQLPassword <strong>sifre</strong> MYSQLDatabase <strong>pureftpd</strong> 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.
1 2 |
# cd /usr/local/etc/ # > pure-ftpd.conf |
Ve boş olan bu dosyayı editleyerek aşağıdaki satırları ekleyin ve kaydedin.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
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.
1 |
# /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:
1 2 3 |
# mysql -u root -p Enter password: mysql> use <strong>pureftpd</strong>; |
Sonra da aşağıdaki gibi bir insert satırını kırmızı alanları kendimize göre düzenledikten sonra giriyoruz.
1 |
INSERT INTO <strong>pureftpd</strong>.users VALUES ('<strong>deneme</strong>',MD5('<strong>sifre</strong>'),<strong>1007</strong>, <strong>1007</strong>, '<strong>/kullanici/icin/home/dizini</strong>', 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ı:
1 2 |
# more /etc/passwd |grep ftpusers ftpusers:*:1007:1007:User &:/nonexistent:/usr/sbin/nologin |
GID için komut ve çıktısı:
1 2 |
# 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.