Mysql Destekli Pure-FTPD Kurulumu
Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYbE69oA' (Errcode: 28 - No space left on device) in /usr/share/nginx/html/syslogs/wp-includes/class-wpdb.php on line 2349
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.
# 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
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
Trackbacks
Yorumda bulunun.
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ı;
ş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;
[Cevapla]
Elinize sağlık mükemmel anlatım.Bu tarz güçlü ve benzersiz paylaşımları yapmak herkesin harcı değil.Sizi kutluyorum.
[Cevapla]
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]
umask degerinin syntax’i degismis.
027:027 yerine 027 027 yazmak gerekiyor. Hata alanlar icin yardimci olabilir.
[Cevapla]
Katkı için teşekkür ederim.
[Cevapla]
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]