21 Ağustos 2009 Cuma

PuTTY ile Açık Anahtar Doğrulaması Kullanarak SSH Erişimi Sağlamak

PuTTY, çeşitli platformlar için çalıştırılabilir sürümleri bulunan açık kaynak kodlu bir SSH istemcisidir. Windows işletim sistemi üzerinde PuTTY ile açık anahtar doğrulaması (public key authentication) kullanarak SSH bağlantısı yapmak için aşağıdaki adımlar izlenebilir:

Anahtar çiftlerinin üretimi
  • "PuTTY Key Generator" programı (PuTTYgen.exe) çalıştırılır.
  • "Generate" butonuna tıklanır ve benzeri olmayan anahtar üretimi için gerekli rastgeleliği sağlamak üzere dialog ekranı üzerinde fare bir süre hareket ettirilir.
  • Bu işlem sonunda "Public key for pasting into OpenSSH authorized_keys file" başlığı altındaki açık anahtarın ve "Key fingerprint" alanının üretildiği görülecektir.
  • "Key comment" alanını aynen bırakabileceğimiz gibi, örneğin hangi bilgisayarda tanımlı olan hangi kullanıcıya ait bir açık anahtar olduğunu gösterecek şekilde username@hostname formatında doldurabiliriz. Örnek: "user1@pc-user1".
  • "Save public key" butonuna tıklayarak açık anahtarımızı içeren ".pub" uzantılı bir dosya oluşturalım.
  • "Save private key" butonuna tıklayarak gizli anahtarımızı içeren ".ppk" uzantılı bir dosya oluşturalım.
Bağlantı konfigürasyonu oluşturma
  • PuTTY açılarak "Private key file for authentication" kısmında ".ppk" uzantılı gizli anahtar dosyamızı tanımlıyoruz.
SSH erişim noktasının ayarlanması
  • SSH erişim noktamızın açık anahtar ile oturum açmamıza izin vermesi için ürettiğimiz açık anahtar karakter dizisini kopyalayarak sunucu tarafında oturum açmak istediğimiz kullanıcının home dizini altındaki .ssh/authorized_keys dosyasına ekleyelim.
  • Açık anahtar karakter dizisi ilk adımda PuTTYgen programında "Public key for pasting into OpenSSH authorized_keys file" başlığı altında gördüğümüz karakter dizisidir. Bunu tekrar edinmek için PuTTYgen programını tekrar açarak "File -> Load private key" seçelim. Açık anahtar diyalog ekranında gözükecektir.

2 Ağustos 2009 Pazar

Subversion ile Salt Okunur Yansılama

Bu yazıda, salt okunur bir SVN (subversion) yansısı oluşturulması ve periyodik senkronizasyon yapacak şekilde konfigüre edilmesi anlatılmıştır.

SVN, versiyon kontrol sistemi olarak yazılım projelerinde oldukça kabul görmüş bir araçtır. Dağıtık olmayan yapısı nedeniyle geliştiricilerin yaptıkları değişiklikleri merkezi bir sunucuya göndermeleri kaçınılmazdır. Ancak SVN ambarlarının (repository) salt okunur yansıları oluşturularak aşağıdaki faydalar sağlanabilir:
  • Merkezi sunucunun yoğun iş yükü altında kalmadan salt okunur şekilde çok sayıda kullanıcının kullanımına açılabilir. Böylece, örneğin açık kaynak projelerin kodlarının geniş kitleler tarafından çekilebileceği bir platform oluşturulmuş olur.
  • Ana sunucu ağ üzerinde güvenli bir noktaya alınırken yansılar Internet üzerinden erişime açılabilir. Böylece ana sunucu ve üzerindeki ambarda tutulan dosyalar saldırılara karşı güvenceye alınmış olur.
  • Ana sunucuda tutulan dosyalar bu yolla yedeklenebilir.
Şimdi şöyle bir senaryo düşünelim. 2 sunucu makinası var. Üzerlerinde Debian Linux dağıtımı çalışır durumda. Bunlardan birisi ana SVN sunucusu, diğeri ise yansısı olacak.
  • Ana (kaynak) sunucunun alan adı main-site.x.y.z olsun.
  • Yansı (hedef) sunucunun alan adı mirror-site.x.y.z olsun.
Öncelikle ana SVN sunucusunda yansı alma amaçlı erişim verilecek bir kullanıcı tanımlanmalı ve bu kullanıcıya salt okunur erişim yetkisi verilmelidir. Bu amaçla ana ambar dizininde (örneğimizde /home/svn/main-repo), "conf/authz" dosyasında aşağıdaki gibi bir tanımlama olmalıdır:
[/]
svn = r
"conf/svnserve.conf" dosyasında da doğrulanmış (authenticated) kullanıcılara en azından okuma hakkı verilmiş olmalıdır:
auth-access = read
Yansı sunucusunda öncelikle SVN sunucusu kurulur:
apt-get install subversion
Örneğimizde yansının hizmet verme biçimi olarak inetd süper sunucusu tercih edildi. Bunun için aşağıdaki satır /etc/inetd.conf dosyasına eklenir:
svn  stream  tcp  nowait  svn  /usr/bin/svnserve svnserve -i -r /home/svn
inetd süper sunucusu yeniden başlatılır:
/etc/init.d/inetutils-inetd restart
veya
/etc/init.d/openbsd-inetd restart
Yansı alınacak ambar oluşturulur:
su - svn
svnadmin create mirror-repo
cd mirror-repo
Senkronizasyon işlemlerini ele alacak betik (hook script) oluşturulur:
touch hooks/pre-revprop-change
chmod u+x hooks/pre-revprop-change
Aşağıdaki içerik betiğe konulur. Burada, "svn" ana sunucuda salt okunur erişecek şekilde ayarladığımız kullanıcıyı ifade etmektedir.
#!/bin/sh
if [ "$3" = "svn" ]; then exit 0; fi
echo "Only the - svn - user may edit revision properties through svnsync" >&2
exit 1
Ana sunucu ve yansı sunucuları arasında, özellikle de aynı güvenli ağ içinde değillerse, güvenli bağlantı tercih edilmelidir. Bu amaçla yansı sunucusu tarafında gizli ve açık anahtar ikilisi üretilir:
su - svn
cd ~/.ssh
ssh-keygen -t dsa -b 1024 -f mirror-site.key
Böylece .ssh dizininde "mirror-site.key" adlı gizli anahtar ve buna karşılık gelen "mirror-site.key.pub" adlı açık anahtar dosyası üretilmiş olur. Bu açık anahtar dosyasının içeriği, ana sunucudaki "svn" kullanıcısının ".ssh/authorized_keys" dosyasına eklenir.
Yansı sunucusunda svn kullanıcısı ile linux oturumu açılır:
su - svn
SVN_SSH ortam değişkeni aşağıdaki gibi ayarlanır:
export SVN_SSH="ssh -i /home/svn/.ssh/mirror-site.key"
Yansı sunucusu aşağıdaki gibi ilklendirilir:
svnsync init file:///home/svn/mirror-repo svn+ssh://svn@main-site.x.y.z/home/svn/main-repo
İlk senkronizasyon başlatılır:
svnsync sync file:///home/svn/mirror-repo
Senkronizasyon işlemlerini zamanlanmış görev haline getirmek için crontab ayarlaması yapılır:
crontab -e
Açılan editör ekranına ağıdaki satır eklenir. Bu örnekte her saat başında senkronizasyon operasyonu başlatılacaktır.
0 * * * *     (export SVN_SSH="ssh -i /home/svn/.ssh/mirror-site.key"; svnsync sync file:///home/svn/mirror-repo)
Bu otomasyon yansı sunucusunu en fazla bir saat gecikmeyle ana sunucu ile senkron tutacaktır. Yarıda kalan senkronizasyon işlemleri nedeniyle yansı ambarı kilitlenir ve senkronize edilemez hale gelirse aşağıdaki komut yansıyı kilitli durumdan kurtaracaktır:
svn propdel svn:sync-lock --revprop -r 0 file:///home/svn/mirror-repo
Hepsi bu kadar.