EncFS: Şifreli dosya sistemi
Güvensiz sistemler, protokoller:
Gün geçtikçe şifreleme sistemleri, gerek uygulama, gerekse işletim sistemi bazında hayatımızda daha çok yeralmakta. Bunun en önemli sebebi, günümüzde bilginin birçok ortamda (ve genellikle de kontrolsüz olarak) bulunması.
Bu kontrolsüzlüğün en bariz örneği bütün Internet'in üzerine kurulduğu TCP protokolü. İlk çıktığı zamanlarda, tek amaç "bağlantının sağlanması" olduğundan TCP ve üzerine kurulmuş temel protokoller (telnet, ftp, smtp, http vs.) güvenlik endişeleri gözönüne alınmadan oluşturulmuşlardı. Bu konuda en temel zayıflık ise, sözkonusu trafiğin şifrelenmemiş olarak, clear-text diye adlandırılan düz-yazı olarak iletiliyor olmasıydı. Bu zayıflık, kısa sürede hem iyi niyetli, hem de kötü niyetli kişiler tarafından çeşitli şekillere ortaya kondu. Bunun ardından protokol geliştiren ekipler, bütün bu protokollerin şifreli iletişim sağlayan güvenli hallerini geliştirdiler (telnet->ssh, ftp->sftp,scp, smtp->tls-smtp, http->https gibi).
Bu sayede, ağ üstünden giden trafiğin güvenliği ve dolayısıyla kişilik hakları bir miktar daha güvenli hale getirilmiş oldu.
Fiziksel Güvenlik Problemi
Fakat bilgisayar güvenliği ile ilgilenenlerin çok yakından bildiği temel bir kural vardır. Bu da bir sisteme eğer sınırsız bir fiziksel erişim sözkonusu olduğunda o sistemin güvenliğinden sözedilemeyeceğidir.
Bunu biraz açtığımızda görürüz ki kastedilen bir bilgisayarı networkden kesseniz, başına giriş şifresi koysanız ve daha bir dizi önlem daha alsanız bile birisinin bilgisayarı alıp götürmesini engelleyemiyorsanız, ordaki bilgileriniz güvenli değil demektir. Çünkü, bilgisayarın içindeki harddisk, ya da verilerinizin bulunduğu bir başka medya alınıp bir başka bilgisayarda incelenebilir ve içindeki bilgilere erişilebilir.
Buna karşı alınabilecek en büyük önlem, işletim sistemi bazında bir şifreleme gerçekleştirilmesi ve harddisk, cdrom ya da usb disk gibi cihazlara dosya yazmanın şifreli olarak yapılmasını sağlamak olacaktır.
Bunun çeşitli yöntemleri, uzun yıllardır uygulanmakta. Fakat son yıllarda donanımların çok daha fazla güçlenmesi sayesinde, bu işlemlerin yapılması sırasında gerçekleşen performans kayıpları, yazılımla gerçekleştiğinde bile kabul edilebilir seviyelere gelmiştir.
Şifrelenmiş Dosya Sistemleri
Windows sistemlerde 2000'den itibaren EFS (encrypted file system) kullanılabilir olmuşken, Linux'da ise 1993'ten bu yana birçok şifrelenmiş dosya sistemi kullanılmaktadır. Bu dosya sistemlerinin ilk örneği, 1993 yılında çıkan CFS olmuştur. CFS bir pass-through (geçirgen) dosya sistemiydi. Geçirgen dosya sistemleri, filtre mantığı ile çalışırlar ve dosyanın nereye yazılacağı, nasıl yazılacağı gibi işlerle ilgilenmezler. Bir dosya yazılacağı zaman, üstünde gerekli değişiklikleri yaparlar ve gerisini yine dosya sistemine bırakırlar.
CFS'in temel özelliklerinden biri ise, bu işlemi NFS (Network File System) kullanarak yapıyor olmasıydı. NFS, Unix sistemlerin dosya paylaşımını sağlayan yapı olduğundan temel amacı, ağ üzerinden erişim için tasarlanmış bir protokoldü. Bu sebeple, CFS'in bir NFS uzanımı gibi çalışması, yerel çalışan bir dosya sistemine göre, ciddi bir performans kaybı getiriyordu.
1996 yılında ise yine aynı konseptte, CFS'in kodunun üstüne eklemelerle, İtalya'dan bir grup TFS'i çıkarttı. Buradaki temel farklılık, TCFS'in kernel ile daha entegre olup, kullanıcılara mümkün olduğu kadar şeffaf bir sistem sunmaktı. Dosyaların gruplar tarafından paylaşılması, dinamik şifreleme modülleri, değişik şifreleme algoritmaları gibi özellikler getiren TCFS'in en zayıf yanı ise, her kernel değişikliğine adapte edilmesi zorunluluğuydu. Bu sebeple Kernel 2.2'ye kadar gelen TCFS, 2.4'den sonra devam etmemiştir.
Bence bu sistemlerin en büyük handikapı yeterince şeffaf ve rahat kullanılabilir olmamaları bir yana, partisyon bazında işlem görüyor olmaları. Yani çok basitçe, sadece bir tek dizini şifrelenmiş olarak kullanmanız mümkün değil. Bu özellikle insanlarla paylaştığınız bilgileri bulundurduğunuz USB memory konusunda problem yaratmakta. Hem diskin başkaları tarafından okunmasını istiyorsunuz, hem de diskin için kimsenin okumamasını istediğiniz belli bir dizin bulunmakta.
EncFS
Bütün bu ihtiyaçlara cevap veren ve benim bu yazıda ele alacağım sistem, CFS ve ENCFS ile birçok ortak noktaları bulunan, fakat ikisinden de çok daha performanslı ve şeffaf bir çalışma düzenine sahip olan EncFS. EncFS'in bu şekilde çalışmasını sağlayan en önemli özelliklerden biri nispeten yeni bir teknoloji olan FUSE; file system interface module kullanıyor olması.
EncFS'den daha derinlemesine bahsetmeden önce, bu projenin geliştirilmesinde Ubuntu ekibinin ciddi desteği ve katkıları olduğunu vurgulamak isterim. Ben de böyle bir projenin varolduğunu Ubuntu Traffic vasıtası ile öğrendim. Ubuntu'nun Linux dağıtımları arenasına olan bu yapıcı katkısının artarak devam etmesini umuyoruz.
EncFS'in ana sayfası
http://arg0.net/users/vgough/encfs.html
Burada EncFS'in temel kullanım bilgilerinden, diğer dosya sistemleriyle karşılaştırmaya kadar çok geniş bilgi almanız mümkün.
EncFS'in kurulumu birazcık karışık gibi gözükmekle birlikte pek zor değil.
Öncelikle Fuse ve rlog programlarını kurmanız lazım. EncFS'in yazarı Valient Gough'un sayfasında bu programların Suse için olan RPM'lerini bulmanız mümkün. Öte yandan her zamanki gibi http://fuse.sourceforge.net/ ve http://freshmeat.net/projects/rlog adreslerinden kaynak kodlarını indirip derleyebilirsiniz.
Bu ikisini derledikten/kurduktan sonra EncFS'i de derleyip kurmanız gerekmekte.
Bütün bu işlemlrin akabinde kullanım oldukça kolay.
Öncelikle temel kavramları açıklamakta biraz yarar var.
EncFS'de bir dizini şifrelemek, Unix'deki mount yaklaşımına çok benziyor. Nasıl bir partisyonu mount ediyorsanız, EncFS'de ise şifrelenmiş bir dizini bir başka dizine mount ediyorsunuz. Bunun en bilinen örneği iso dosyaları. Tek bir dosya içinde bir dosya sistemi barındıran iso'ları Linux altında mount -o loop knoppix.iso /mnt/iso gibi mount edip, daha sonra da /mnt/iso dizininden içeriğini okumak mümkündür. EncFS'deki sistem de tamamen aynı.
Diyelim ki user diye bir kullanıcı ismine sahibiz, ve ev dizinimiz altında şifrelemek istediğimiz bir "sifreli" isimli dizinimiz var.
Öncelikle bu dizinin şifresiz halini okuyabileceğimiz bir mount point (bağlantı noktası) oluşturmamız gerekiyor. Bu dizinin ismi de "sifresiz" olsun.
mkdir /home/user/sifresiz
Şimdi yapmamız gereken aradaki şifreleme bağlantısının sağlanması
$encfs /home/user/sifreli /home/user/sifresiz
Volume key not found, creating new encrypted volume.
Password:
Verify:
$
Burada anahtar nokta, dizin isimlerini göreceli değil, kesin vermeniz lazım. Yani /home/user dizininde bulunan birisi direkt encfs sifreli sifresiz yazarsa bu kabul edilmeyecektir, yukardaki gibi tam dizin ismini girmek gerekir.
Bu kadar, şifreli dizinimiz artık hazır. İsterseniz gidip bir bakın şifreli dizinin altına, büyük ihtimalle görecekleriniz, çizgi romanlarda küfür baloncukları içinde gördüğünüz anlamsız gelen karakter dizileri olacak. EncFS, sadece sözkonusu dizindeki dosyaları şifrelemekle kalmaz, onların isimlerini de anlaşılmaz hale getirir. Bu sayede şifrelenmiş dosya sistemine bakanların dosya isimlerinden aradıkları dosyaların bu dizinde olup olmadığını anlama imkanları da kalmaz.
Öte yandan sifresiz dizinine baktığınızda ise dosyalarınızın orda olduğunu görürsünüz. Bir kez daha hatırlatmakta fayda var bu gördüğünüz dosyaların kendi değil, EncFS sisteminin araya girmesi ile o anda deşifre edilen, aslında sifreli dizini altındaki dosyalar.
Bu şifrelenmiş dizin ile işiniz bittiğinde ise
fusermount -u /home/user/sifresiz
komutunu vermeniz yeterli. Artık sifresiz dizini altı boş gözükecek, ve şu anda şifreli dosyalarınıza sizin ya da bir başkasının (yeniden bağlantıyı sağlamadan (mount etmeden)) erişmesi mümkün değil.
Bunun sağladığı kolaylıklardan bir tanesi de şifreli dizilerin yedeğini veya kopyasını almak için tekrar deşifre etme zorunluluğunuzun olmaması. Herhangi bir anda, şifreli halde yedek alabilir, daha sonra da o yedekten geri dönerken şifreyi açabilirsiniz. Bu sayede şifresi açılmış dosyalar, yedek teyplerinizde bile bulunmaz.
EncFS'in işleyişine biraz daha bakarsak, şifreleme için şöyle bir yöntem izlediğini görürüz: Bir dizin ilk defa şifreleneceğinde, EncFS ona sizin klavyeden elle pek giremeyeceğiniz rastlantısallıkta uzun bir şifre atar. Daha sonra sizin girdiğiniz şifre ise bu şifreyi şifrelemek/açmak için kullanılır. Bu mantık, pgp anahtarlarının pin ile şifrelenmesi gibidir. Bu uygulamadaki güzel yanı ise, siz şifreyi değiştirdiğinizde, sadece ana şifrenin şifrelendiği kodun değişmesi, dizinin yeniden baştan şifrelenmesi gibi bir işlem yapılmasına gerek kalmaması sonucunu doğurur.
Biraz da performanstan sözetmek gerekirse, EncFS 1 küsur Ghz herhangi bir makinada, size gözle görülür bir performans kaybı olmadan hizmet verebilir. Burada belki de önemli olan, zaten sizin için değerli dizinler için EncFS kullanmak, diğerlerine ise normal erişmektir. Daha güvenli bir sistem oluşturmak için uygulanabilecek yöntemlerden biri, kullanıcının ev dizinini EncFS ile şifreleyip öyle kullanmasıdır. Her açılışta, EncFS şifresi girilerek dizin şeffaf bir hale getirilecek, kullanıcı başında değilken sözkonusu bilgisayarın çalınması durumunda ise ev dizinindeki herhangibir dosyaya erişmek pratik olarak mümkün olmayacaktır.
EncFS, hem kullanım, hem de özellik açısında çok başarılı bir sistem. Dizüstü bilgisayarlarda ve USB hafızalar başta olmak üzere, veri taşımak için kullanılan medyalarda bulunan bilginin, gün geçtikçe değerlenmesi, üstüne kaydedildiği medyaların ise gün geçtikçe değersizleşmesi, bizleri fiziksel güvenliği sağlamak kadar, veri güvenliğine de önem vermeye itmektedir.
Bu tür ihtiyaçlara cevap verebilmesi açısından EncFS oldukça başarılı bir program.
Umarım işinize yarar.
Kıvılcım Hindistan
www.fazlamesai.net/sundance
EncFS, pratik kullanımlı ve performanslı bir şifrelenmiş dosya sistemi. En önemli iki özelliği, şeffaflığı ve dizin bazında şifreleme yapabiliyor olmanız.
EncFS'in özelikleri ve nasıl kullanılabileceği konusunda Cuma günü Linux DevCenter'da yayınlanan makalemin daha geniş ve Türkçe halini (kesinlikle çeviri değil ;) yazının devamında bulabilirsiniz.
EncFS'in özelikleri ve nasıl kullanılabileceği konusunda Cuma günü Linux DevCenter'da yayınlanan makalemin daha geniş ve Türkçe halini (kesinlikle çeviri değil ;) yazının devamında bulabilirsiniz.
Çok teşekkür ederim!