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

5 Responses to “vsftpd Virtual User Ayarları ve Yapılandırması”

  1. Deja-Vu Says:

    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?

  2. webdr Says:

    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. :)

  3. Deja-Vu Says:

    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.

  4. webdr Says:

    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.

  5. Mesut ARSLAN Says:

    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?

Leave a Reply