vsftpd Virtual User Ayarları ve Yapılandırması
Bu makalemizde vsftpd (linux sunucular için) FTP server uygulamasına nasıl virtual user ekleyeceğiz bundan bahsedeceğim. En basitten başlayıp konuyu madde madde ele alan bir makale olmasını hedefliyorum. Umarım Türk kullanıcı arkadaşlar bu makaleden tıpkı vsftpd FTP server kurulumu makalemizden yararlandıkları gibi yararlanırlar. Anlatıma geçmeden önce belirtmem gerekirki bu anlatım tüm linux dağıtımları için geçerlidir ve herhangi bir dağıtıma özel (debian, redhat vb…) notlar içermemektedir.
Virtual User Nedir?
Türkçesi Sanal Kullanıcı olan virtual user, kurduğunuz sisteme giriş yetkisi olmasa da (işletim sisteminizde kayıtlı bir kullanıcı) birazdan yapacağımız ayarlar sonucu FTP erişimi elde edebilecek, sizin belirlediğiniz FTP dizininde indirme ve gönderme yapabilecek harici kullanıcılara verilen isimdir. Sadece FTP kullanım amacıyla bir kimseye, sisteminizde kullanıcı olarak giriş izni vermektense FTP için giriş izni vermek sizinde gördüğünüz üzere daha güvenilir bir yöntemdir. İşte bu anlatımda biz vsftpd FTP sunucusu için virtual user(lar) oluşturup bunların sisteminize girmeden, kendilerine verilen FTP hesaplarını kullanmalarını sağlayacağız.
Bu kısa açıklamadan sonra virtual user oluşturma işlemine geçelim.
1-) Virtual User için veritabanı oluşturma.
Virtual userlar erişim kontrolü için öncelikle pam_userdb kullanacağız (Diğer bir yöntem ise pam_pwdfile dosyası kullanılarak gerçekleştirilendir ancak ona değinmeyeceğiz). pam_userdb veritabanı uygulaması, kullanıcı adlarını ve şifrelerini kullanabilmek için bir db (veritabanı) dosyasına ihtiyaç duyar. db biçiminde bir veritabanı dosyası oluşturmak için öncelikle içerisnde kullanıcı adlarının ve şifrelerinin bulunduğu bir metin dosyası (logins.txt) oluşturmalıyız. Dikkat etmeniz gereken nokta bu metin dosyasındaki kullanıcı adı ve şifrelemelerin yazımıdır. Bir örnek daha iyi anlatır, diyelim kullanıcı adı “webdr”, şifreside “123456″, başka bir kullanıcımız daha var onun adıda “asnfist” ve şifresi “789″ olsun. Bu iki kullanıcı bilgilerinin bulunduğu metin dosyası aşağıdaki düzendeki gibi olmalı ve her satıra bir öğe (kullanıcı adı, şifre) gelmelidir.
webdr
123456
asnfist
789
Şimdi bu dosyayı bahsettiğim gibi (logins.txt) bir metin dosyası olarak kaydedelim (ect/vsftpd dizinine kaydederseniz bundan sonraki anlatımlarda sizin için kolaylık olur). Bu dosyanın amacı birazdan oluşturacağımız veritabanı dosyasına kaynak olmaktır. Diğer bir ifadeyle eğer sonradan bir kullanıcı eklemek isterseniz ve db dosyalarını düzenlemekle zaman kaybetmek istemiyorsanız. Bu noktaya dönmeli, logins.txt dosyasına gerekli kullanıcı eklemelerinı yapmalı ve bundan sonraki işlemleri tekrarlamalısınız.
Sıra veritabanı oluşturmaya geldi. Veritabanı oluşturmak için Berkeley DB kullanacağız (sisteminizde zaten bulunuyor olabilir) . O yüzden öncelikle kontrol etmelisiniz. Sadece bulunup bulunmadığı için değil sürümününde bizim için önemli olmasından dolayı. (komutu yazdığımda sürüm konusu açıklığa kavuşacak) , diğer taraftan eğer yüklü değilse yukardaki Berkeley DB yazısına tıklayarak kaynak kodlarına ulaşabilirsiniz ve kaynak kodlardan programı kurabilirsiniz.
Sisteme root olarak giriş yaptınız ve cd komutu ile logins.txt dosyasını kaydettiğiniz dizine geldiniz. Komut satırına aşağıda verdiğim komutu yazarak kullanacağımız veritabanını oluşturacağız.
db4_load -T -t hash -f logins.txt /etc/vsftpd/vsftpd_login.db
Bu komutu kısaca açıklamam gerekirse, db4_load ki en önemliside budur, db4 ; Berkeley DB sürüm 4 demektir, eğer önceden kontrol ettiğinizde sisteminizde 3 yüklü ise db3 olarak değiştirin, ancak bunlara rağmen en sonunda bir sonuca ulaşamazsanız geri buraya dönüp direk db_load olarak girin komutu lütfen.
Bu komut sonrasında /etc/vsftpd/ klasöründe vsftpd_login.db adında bir veritabanınız oluşacak. Yine veritabanı ile ilgili önemli noktalardan biri veritabanına gerekli yetkileri vermekle ilgilidir. O yüzden yeni oluşturduğumuz veritabanına aşağıdaki komutla bir erişim yetkisi atıyoruz.
chmod 600 /etc/vsftpd/vsftpd_login.db
Bu aşamayıda geride bırakınca içerisinde virtual userlarınızın bilgilerinin bulunduğu bir veritabanınız var demektir.
2-) Veritabanınızı kullanacak PAM dosyasını oluşturmak.
Bu dosya sayesinde PAM uygulamasının, bu dosyaya girerek erişim isteyen kullanıcının bilgilerinin geçerliliğini kontrol etmesini sağlamış olacağız.
Öncelikle /etc/vsftpd/ dizininde vsftpd.pam adlı bir dosya oluşturalım ve içerisine aşağıdaki kodları yerleştirelim.
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
Daha sonra oluşturduğumuz bu vsftpd.pam dosyasını
/etc/pam.d/
yani kendi dizinine taşıyalım.
3-) Virtual userlar için dizin belirlemek ve virtual kullanıcısını sisteme eklemek
Aşağıdaki komut ile sisteminize virtual user ekleyeceksiniz ancak bu virtual user ile ilgili hiçbir bilgiyi vermeyeceğiniz için güvenlik açısından birşey değişmeyecek, siz sadece logins.txt dosyası içine yerleştirdiğiniz şifre ve kullanıcı adını, kullanıcılarınıza vereceksiniz.
useradd -d /home/ftpsite virtual
Bu komut ile varsayılan dizini /home/ftpsite olan virtual user eklediniz. Virtual user olarak FTP girişi yapan kimseler bu dizine uğrayacaklardır.
İpucu: Belirttiğiniz klasörü kullanan kaç virtual user var görmek için komut satırına
ls -ld /home/ftpsite
yazın.
4-) Virtual User için vsftpd.conf dosyasının yapılandırılması
Aşağıdaki komutları zaten yapılandırmış olduğunuz vsftpd.conf dosyasının sonuna ekleyin lütfen, açıklamaları ile birlikte anlatacağım.
A-) chroot_local_user=YES
Bu komut ile virtual userlarin /home/ftpsite dışında gezmelerini önlersiniz.
B-)
guest_enable=YES
guest_username=virtual
Bu iki komut virtual user kullanımına aktive etmeniz için yapılandırma dosyasına eklemeniz gereken en önemli komutlardır. İkisinide istisnasız ekleyin.
Bu değişiklikleri yaptıktan sonra vsftpd dosyasını kaydedin ve vsftpd uygulamasını başlatıp, belirlediğiniz virtual user kullanıcı adı ve şifreleri ile giriş yapın.
Eğer bir sorunla karşılaşırsanız buyrun beraber çözeriz ama daha öncesinde makaleyi ayrıntılı okuduğunuzdan emin olun.
Hepinize iyi çalışmalar dilerim.
webdr
Mayıs 1st, 2007 at 7:58 pm
Selam,
Bu kadar hızlı yardımcı olduğun için çok saol. Yüzsüzlük yapıp bi şey daha sorabilir miyim? Bi tane sanal kullanıcım mesela ‘ahmet’ kendi klasörünü ve aynı zamanda ‘mehmet’in klasörünü görüp ‘faruk’un klasörünü göremiyeceği bir ayar olabilir mi?
Mayıs 2nd, 2007 at 1:21 am
Merhaba,
Tabi bunun için vsftpd.conf dosyasına birkaç ekleme yapmanız yeterli olacaktır. Bu eklemeleri
guest_enable=YES
guest_username=virtual
satırının altına ya da üstüne bir yerlere ekleyin. Ama daha önce virtual userlarınız için /home/ftpsite altında ayrı bir dizin oluşturun. Mesela
mkdir -p /home/ftpsite/ahmet
mkdir -p /home/ftpsite/mehmet
Önceden belirttiğim vsftpd.conf içine ekleyeceğiniz kodlar ise
user_sub_token=$USER
local_root=/home/ftpsite/$USER
Kolay gelsin.
Mayıs 3rd, 2007 at 12:43 am
Selam,
yazanları adım adım uyguladım kontrol ede ede fakat ftp client programından virtual userlar açılmadı. Hatta açılan normal sistem kullanıcılarıda açılmaz oldu. Eksik bi şey olabilir mi?
belki yardımcı olur vsftpd.conf dosyasına eklenen,
guest_enable=YES
guest_username=virtual
komutlarının başına # işaretlerini koyup etkinsizleştirdiğimde normal kullanıcalarla girebiliyorum kaldırınca işaretleri giremiyorum.
Mayıs 3rd, 2007 at 7:11 am
db4-load kısmı ile ilgili bir sorundur lütfen o bölüme ve hangi db sürümünü kullandığınıza iyi bakın.
kolay gelsin.
Temmuz 9th, 2008 at 3:31 am
ftp> open site.com
yazıyorum.
421 Service Not available, remote server has closed connection
Mesajını alıyorum
ftp> open localhost
yazdığımda şifre soran bir satır geliyor. şifre yazsamda boşta geçsem
530 this FTP server is anonymous only.
Login failed.
hatasını alıyorum. Sizce sorun nedir?