Güvenli Kurulum Kaynakları

Şuraya atla: kullan, ara


Güvenli Kurulum Kaynakları

SUSE Linux için yükleme kitle iletişim araçlarını ya da çevrimiçi yükleme kaynaklarını bir çok genel yansılar'dan ve çeşitli genel ağ (internet) sayfaları tarafından sunulan yükleme kaynağı şeklinde çalışan ek paketlerden temin edebilirsiniz. Bu openSUSE projesinin ölçeklendirilebilirliğini gerçekten arttırır ve openSUSE ekosistemine birçok ilginç yazılım paketi eklenir.

Ama bu kaynakların kullanımında herzaman potansiyel bir risk mevcuttur. Yükleme kaynaklarının değiştirilmemiş ve tam olduğunu ve kötü amaçlı şifreler içermediğinden nasıl emin olacaksınız?

SUSE Linux 10.1'de bu sorun kriptografi imzaları ve sağlama birleştirilerek çözümlenmiştir.

Burada SUSE Linux 10.1 için metadata ve paket işaretleme içeriğinin talimatlarını içeren taslak bulunmakta ve ilerisinde:

Yükleme kaynağı/deposunda bulunan çok önemli metadata dosyalarını işaretlemek için yansız GPG imzalarını kullanırız. İki çeşit kurulum kaynağı bulunmaktadır.

"Bilinen" SUSE-biçim yükleme kaynakları

Bu kurulum ortamında kullandığımız bir kaynaktır. Bunlar genelde "YaST" kaynakları olarak adlandırılır aynı zamanda "YaST" kaynakları diğer kaynakları da desteklemektedir.. İki giriş noktası vardır:

"media.1/ürünleri" Dosyası

Bu dosya, kitle iletişim araçlarında ürünlerin tüm yollarını içerir. Bu çok-ürünlü ortam için ilginçtir. Ama genelde tek bir satır vardır, örneğin:

   / SUSE-Linux-Enterprise-Desktop 10

Bu dosya SUSE'den gelen bütün ürünlerde SUSE anahtarı ile mühürlenecektir. Dosyadaki imzayı doğrulamak için kullanılabilecek bu anahtar için genel Anahtar (GPG genel anahtar, ascii armor protected) "products.key" dosyasındadır.

Bu anahtar aynı zamanda initrd (ortamda kurulumu çalıştırdığınızda ilk önce başlayan başlangıç Linux görüntüsü) den içeri alınabilir, böylece YaST onu zaten tanıyor olacaktır. Yalnızca bu henüz mevcut betalarda geçerli bir durum değildir. Başlangıç anahtarı YaST'ın her zaman sorgulamadan güvendiği bir anahtardır. Anahtar genelde aşağıdaki şekilde kurulum ortamında da yer alır :

   /gpg-pubkey-9c800aca-40d8063e.asc

(Bu anahtar değişebilir. Yukarıdaki bizim şu anda kullandığımızdır.)

"products" (ürünler) için mühür "products.asc" dosyasındadır.

YaST bir kurulum kaynağı algıladığında, "products" (ürünler) dosyasının orda olup olmadığına bakar, daha sonra bilinen anahtarla mühürlenip mühürlenmediğini denetler. Başka bir anahtarla mühürlendiyse ya da hiç mühürlenmediyse, ya da anahtar ortamdaysa ancak (henüz) güvenilir değilse, kullanıcıya ne yapılacağı sorulur.

"products" (ürünler) dosyasını, hiç kimsenin bir kurulum kaynağına oraya ait olmayan bir ürün eklememesini sağlamak için mühürleriz.

"content" (İçerik) Dosyası

Tüm ürünler için bir "içerik" dosyası mevcuttur. Eğer bize ürünlerin nerede olduğunu söyleyebilecek bir "products" (ürünler)dosyası yoksa, kurulum kaynağının kökünde "içerik" dosyasını ararız.

"İçerik" dosyası "ürünler" dosyasında olduğu gibi aynı şekilde mühürlenir, böylece bir "content.key" (içerik anahtarı) oluşur. (genelde, ancak zorunlu olarak değil, "product.key" ile aynı)

Eski sürümlerdeki "İçerik" dosyasına kıyasla şimdi ek verimiz var. İki yeni anahtar mevcut :META ve KEY. Aşağıda iki örnek yer almaktadır :

   META SHA1 08579e4b28287d6aedd954098b64c6bb49d17367 packages
   KEY SHA1 a108c6aab19fe604fa98ef299cdce6e6ba275f09 gpg-pubkey-0dfb3188-41ed929b.asc

META anahtarları DESCRDIR anahtarında isimlendirilmiş dizindeki tüm dosyalar için yaratılmıştır. Tipik bir SUSE Linux'ta örneğin:

   DESCRDIR suse/setup/descr

YaST, DESCRDIR'dan herhangi bir dosya kullanmadan önce "içerik"teki girişlere bakacaktır. Bu giriş paket ismi ile izlenen bir SHA1 checksum dur. Bu SHA256 checksum 'a dönüştürülebilir.

KEY (anahtar) girişleri YaST'ın ortamdan içeri alması gereken tüm anahtarları listeler. Bu anahtarlar RPM imzalarını ve metadata imzalarını denetlemek için kullanılabilir ve RPM veri tabanında depolanır, bu şekilde paket-seviye doğrulaması için "rpm --checksig" ile kullanılabilir

YaST bu anahtarlara güvenir çünkü anahtarların listesi initrd tarafından güvenilen başlangıç anahtarıyla mühürlenmiş bir dosyadadır.

Zincirde bir sonraki adım DESCRDIR içindeki "packages" (paketler) dosyasıdır.

Sözdizimine (syntax) alışkınsanız buraya, "Pgk:" dan hemen sonraya yeni bir etiket (tag) eklediğimizi göreceksiniz. Varsayılan çekirdek için girişin ilk iki satırınının bir örneğini aşağıda veriyoruz:

   =Pkg: kernel-default 2.6.16 13 i586
   =Cks: SHA1 8c8eb2b605e1d626c22bea8dd0c3b05885432b16

Yeniden bir SHA1 checksum 'ımız var.

Sonuç olarak, başlangıç anahtarından (kurulum ortamınıza güvenmiyorsanız kendi başınıza doğrulamanız gereken) "poduct" ve "content" dosyaları aracılığıyla bireysel paketlere doğru tutarlı bir güven zinciri vardır. Zincir tüm bu dosyaların buraya ait olduğunu ve kandırılmadığınızı garantiler.

Paket seviyesinde, ek bir "rpm --checksig" yapabilir ya da yapamayız.

Kurulum Ortamı için Şifreleme Anahtarları

Kurucu ek kurulum kaynaklarındaki anahtarları seve seve otomatik olarak bulacak ve içeri alınması için sunacaktır.

Kendi kurulum ortamınızı yarattığınızda durum yine de ilginçtir. Kurulum başladığında rpm veri tabanı henüz anahtarları depolamaya hazır değildir, bu nedenle içeri alım için herhangi bir dialog önerilmez.

Kendi genel anahtarınızın bu kaynak için kabul edilmesini sağlamak için güvenilir master anahtarınızı bir tarafa koymalısınız.

Bunlar, /linuxrc ve rootfları bağlamadan önce yüklenecek çekirdek modüllerini içeren, "initrd" olarak da bilinen "initial ramdisk" (başlangıç ram bellek) içinde bulunabilir.

Bu initrd'ler UL ortamı üzerinde /boot/architecture/loader/initrd ( x86 ve x86_64 için) ya da PowerPC'de /suseboot/initrd32 / initrd64 içinde bulunabilir.


Yeni güvenilir anahtarınızı initrd'ye eklemek için( $initrd 'nin sizin initrd'nize yönelmiş olduğunu varsayıyoruz:

   gunzip <$initrd >$initrd.uncomp
   gpg --export -u $keyid > gpg-$keyid.gpg
   echo "gpg-$keyid.gpg" | cpio -o -H newc -A -F $initrd.uncomp
   gzip --best <$initrd.uncomp >$initrd
   rm $initrd.uncomp gpg-$keyid.gpg

Bu sıkıştırılmış initrd'yi açacak, yeni genel anahtarı ekleyecek ve yeniden sıkıştıracaktır. Bunu ortamda bulunan tüm initrd'ler için yapın. (bazılarında birden fazla olabilir)

"repomd" ya da "YUM" biçemi

Burada aynı temel kavramı kullanıyoruz. Başlangıç dosyası yine "repomd.xml.asc" de ayrıştırılmış GPG imzası ile mühürlenmiş "repomd.xml" dosyasıdır.

Genelde repomd depoları güncellemeler için ve ek kaynak olarak kullanılacaktır. Yani anahtarlar sistem tarafından en başta tanınmaktadır. Ancak, "repomd.xml.asc" 'i mühürlemekte kullanılan GPG anahtar çiftinin genel anahtarını, hemen yanına "repomd.xml.key" olarak yerleştirebilirsiniz.

Depo için henüz RPM anahtarlığında yer almayan yeni bir anahtar kullanıyorsanız, kullanıcıya depo kaydedilmeden önce bu anahtarı kabul etmek isteyip istemediği sorulacaktır.

repomd.xml'de ve burayı referans alan tüm dosyalarda, bir <checksum> etiketi yine kurulum/güncelleme kaynağının tutarlı olduğundan emin olmanızı sağlar. Aşağıda bir küçük örnek yer alıyor :

   
   <location href="repodata/patches.xml"/>
   <checksum type="sha">90ac427749079973d044a9398d6749f5f008</checksum>
   <timestamp>1144088097</timestamp>
   <open-checksum type="sha">90ac4044a9398d6749f5f008</open-checksum>
   

repomd bu checksum'ları varsayılan olarak kullanır. Eklediğimiz tek şey "repomd.xml" dosyasını mühürlemektir.

Yapması çok kolaydır:

      cd <repository directory>
      createrepo .
      gpg -a --detach-sign repodata/repomd.xml

GPG anahtarınızı kaynak ile doğru şekilde sağlamak için :

      gpg -a --export <your key id> > repodata/repomd.xml.key