TFTP Sunucu Kurulumu

Protokol

Trivial File Transfer Protocol, 1980 yılı Ocak ayında ilk RFC dokümanı Karen R. Sollins tarafından yayınlanmış olan, oldukça eski bir protokoldür.

Geliştirildiği zamanlarda temel hedefi ağ üzerinden basit bir şekilde dosya almak ve dosya göndermek idi. Özellikle de sistemlerin ağ üzerinden boot edebilmelerine sağlamak amacıyla, açılış sırasında ihtiyaç duyulan dosyaların transfer edilebilmesi için kullanılıyordu.

Bugün halen daha bu amaçlar için kullanılıyor ve desteklediği özelliklerde de temel anlamda bir değişiklik yok. TFTP basitçe UDP/IP üzerinden dosya indirmek ve dosya göndermek için kullanılır. Gelişmiş dosya transfer protokollerinde yer alan kimlik ve yetki denetimi, dosya listeleme, silme, ismini değiştirme vb. gibi hiç bir ek fonksiyona sahip değildir. Ayrıca iletim katmanında TCP kullanan gelişmiş dosya transferi protokollerinden farklı olarak UDP protokolü üzerinde çalıştığından, dosyaya ait paketlerin karşı tarafa doğru gidip gitmediğinin kontrolü veya paketler için yeniden gönderimin denenmesi gibi özellikleri de bulunmamaktadır. Bu kısıt nedeniyle internet veya geniş alan ağlarından ziyade, yerel ağlarda kullanılması daha uygundur.

Yukarıda sayılan tüm bu olumsuz gibi görünen özelliklere karşın, TFTP protokolünün çok güçlü olduğu bir yanı vardır: basitlik

Protokolün gerçeklenmesi, üzerinde işletim sistemi olmayan ortamlar için dahi, alternatiflerine göre oldukça kolaydır ve bu özelliği nedeniyle gömülü sistemlerde de geniş bir kullanım alanı bulmuştur.

Kurulum

Gömülü sistemler üzerinde çalışırken bilgisayarınızda TFTP sunucu servisinin bulunması neredeyse zorunludur. Linux platformlarında çalışan birden fazla TFTP sunucu uygulaması mevcuttur. Debian tabanlı bir dağıtım kullanıyorsanız, tftpd-hpa, tftpd veya atftpd paketlerinden birini sisteminize kurabilirsiniz. Biz burada ftpd-hpa paketinin kullanılmasını öneriyoruz:

$ sudo apt-get install tftpd-hpa

Kurulum sonrası TFTP servisi 69 nolu UDP portunu dinlemeye başlayacaktır. Dosyaları TFTP sunucu üzerinden diğer sistemlere sunmaya başlamak için, ilgili dosyanın kullanılan TFTP sunucu uygulamasının dinlediği ana dizin veya altındaki bir dizine kopyalanması ve dosya izinlerinin herkes tarafından okunmasına imkan verecek şekilde düzenlenmesi gereklidir.

Paket kurulumu sonrasında TFTP sunucu ana dizininin ne şekilde ayarlandığını öğrenmek için, /etc/default/tftpd-hpa dosyasında yer alan TFTP_DIRECTORY değişkeninin ne şekilde ayarlanmış olduğuna bakabilirsiniz. Genellikle /var/lib/tftpboot veya /srv/tftp gibi dizinler kullanılmakta olup, isterseniz bu dizini değiştirip servisi yeniden başlatabilirsiniz.

Kullanım kolaylığı sağlaması açısından, ilgili tftp ana dizininin sahibini kendi kullanıcınız olacak şekilde değiştirirseniz, sonrasında bu dizine yapacağınız kopyalamalarda root olmanıza gerek kalmayacaktır:

$ sudo chown -R $USER /var/lib/tftpboot

NOT: Tftp sunucu paket adları ve öntanımlı olarak baktığı ana dizinler kullanılan Linux dağıtımına göre farklılık gösterebilir.

Dosya Gönderme

Bazen gömülü Linux sisteminizden bir dosyayı dış ortama taşımak istediğinizde TFTP'nin tek alternatif olduğu durumlarla karşılaşabilirsiniz (sisteme dosyayı yazabileceğiniz herhangi bir yazılabilir ortam takılamıyor olabilir vb.) Bu durumda muhtemelen busybox içerisinde tftp istemcisi de derlenmiş olacağından, sistemde yer alan bir dosyayı ağ üzerindeki bir tftp sunucusuna gönderebilirsiniz. Tftp istemci uygulamasının genel kullanımı:

# tftp
BusyBox v1.23.0 (2015-01-22 18:30:08 EET) multi-call binary.

Usage: tftp [OPTIONS] HOST [PORT]

Transfer a file from/to tftp server

-l FILE    Local FILE
-r FILE    Remote FILE
-g    Get file
-p    Put file
-b SIZE    Transfer blocks of SIZE octets

şeklinde olup, bölümü sisteminizdeki örnek.bin dosyasını 192.168.1.100 ip adresli TFTP sunucusuna göndermek için şu şekilde bir komut kullanmanız gerekecektir:

# tftp -l örnek.bin -p 192.168.1.100

Yukarıdaki komut doğru olmasına rağmen dosyayı TFTP sunucunuza aktarma işleminde hata alacaksınız. Dönen hata mesajı açıklayıcı olmadığından asıl problemin ne olduğunun anlaşılması güçtür.

Buradaki problem, TFTP sunucunun güvenlik nedeniyle kurulduğu sisteme bir dosyanın gönderilebilmesi (upload) için, ön şart olarak dosyanın yazılacağı dizinde, aynı isimle bir dosya olmasını ve bu dosyanın erişim yetkilerinin herkes tarafından yazılabilir olacak şekilde düzenlenmiş olmasını gerektirmesidir.

Yani TFTP sunucuda mevcut olmayan bir dosyanın, tftp istemcileri üzerinden yüklenmesi mümkün değildir. Öncelikle dosyayı oluşturup erişim yetkilerini düzenler isek, yukarıdaki upload işlemi başarıyla sonuçlanacaktır. Bunun için TFTP sunucu sisteminde ilgili TFTP sunucu ana dizininde aşağıdaki komutları çalıştırmalıyız:

$ touch örnek.bin
$ chmod 666 örnek.bin

Artık upload işlemimizi gerçekleştirebiliriz.

Yukarıda anlattığımız güvenlik senaryosunu devre dışı bırakıp, TFTP sunucunun kendi baktığı dizinde olmayan bir dosyayı da oluşturmasını sağlamak mümkündür. Bunun için tftpd-hpa uygulamasını başlatırken -c veya --create parametresinin verilmiş olması gerekir. Bunun için /etc/default/tftpd-hpa dosyasındaki TFTPD_OPTIONS değişkeninin mevcut haline bu parametrenin eklenmesi yeterlidir:

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure --create"

results matching ""

    No results matching ""