Doğrulama yoluyla güvenin: Git'te oturum açmayı taahhüt edin

Saberie

Active member
Stefan'ın açık kaynak topluluğunun aktif ve değerli bir üyesi olduğunu ve düzenli olarak bir projeye kod katkısında bulunduğunu hayal edin. Ama şimdi Petra, kendi adına bir arka kapı içeren bir işlem buluyor. Taahhütte bulunmamasına rağmen Stefan'ın itibarı zedelendi.

Duyuru



Örnek hayalidir ancak Nisan ayında gerçekleşen büyük bir tedarik zinciri saldırısı, XZ arka kapısında karışıklığa neden oldu. Muhtemelen mevcut geliştiricilerin adları altında herhangi bir taahhüt oluşturulmamış olsa da, gönderilen kodun gerçek yazarı bugüne kadar hala bilinmiyor.

Hem açık kaynak hem de kapalı kaynak projelerde tedarik zincirindeki ilk halka taahhüttür. Kaynağı izlenemiyorsa geliştiriciler projeye bilinmeyen veya sahte bir adla kötü amaçlı kod ekleyebilir.

GitLab veya GitHub gibi bir Git sunucusu, yalnızca yetkili kullanıcıların gönderebilmesi için kimlik doğrulama sağlar. Neden taahhütleri imzalayasınız ki? Çünkü Git bunları herhangi bir adla oluşturmanıza olanak tanır. Tek yapmanız gereken yerel Git yapılandırmanızdaki yazarı ve e-posta adresini değiştirmek. Taahhüdü imzalamak yardımcı olabilir. Bu sayede kimin taahhüt oluşturduğunu takip etmek kriptografik olarak güvenlidir.

Yanlış bilgi


Git merkezi olmayan bir şekilde çalıştığı için yerel olarak her türlü işlem mümkündür. Sunucuya iterken, teorik olarak farklı bir yazarla yapılan taahhütlerin iletilmesini engelleyebilir. Bu neden olmuyor? İlk olarak Git, yazar ve taahhüt eden arasında ayrım yapar. Yapıcı değişikliği gönderirken yazar da kod içeriğini oluşturdu. Çoğu zaman ikisi de aynıdır. Ancak birisi yeniden temellendirme, tercihli toplama veya yama yoluyla değişiklikleri taahhüt ettiğinde Git mevcut taahhütleri yenileriyle değiştirir. Sistem orijinal yazarı korur ve mevcut kullanıcıyı taahhüt eden olarak yerleştirir. GitHub bu taahhütleri Şekil 1'de gösterildiği gibi sunar.







GitHub hem yazarı hem de değişikliği kimin yaptığını gösterir (Şekil 1).


(Resim: ekran görüntüsü (Janosch Deurer))



Bu, kodu kimin yazdığı ile taahhüdü kimin oluşturduğunu ayırt etmeyi mümkün kılar. Bu önemlidir çünkü koddan yalnızca yazar sorumlu değildir. Yeniden tabanlama veya benzeri işlemler sırasında da hatalar meydana gelebilir.

Bununla birlikte, taahhüt eden yalnızca yukarıda açıklandığı gibi makul durumlarda değiştirilemez, aynı zamanda yanıltılabilir: Şekil 1'deki taahhüdü meslektaşımın katılımı olmadan onun adına oluşturdum. Bu tür taahhütleri kabul eden Git sunucusu, örneğin mevcut bir depoyu yeni bir sunucuya göndermek için gereklidir. Push, taahhüt edenlerle ilgili tüm geçmişi içerir.

Kaynağın kanıtı olarak imza


Git, kod tabanının ve tüm taahhüt geçmişinin bütünlüğünü kriptografik olarak sağlamak için taahhüt karması adı verilen bir işleve sahiptir. Bu, iki işlemin aynı taahhüt karma değerine sahip olması durumunda geçmişlerin de aynı olmasını sağlar. İmza ayrıca dahil edilen taahhütlerin belirtilen yazarlardan gelmesini sağlar.

Bir taahhüt imzalanırken ağaç, üst öğe, yazar, taahhüt eden ve taahhüt mesajı dahil olmak üzere taahhüdün tamamını imzalamak için özel bir anahtar kullanılır. Dijital imza, taahhüt karması tarafından temsil edilen tüm verileri etkiler. Bu, her gönderimde taahhüdün imzalayan kişiden gelmesini sağlar.

Üç varyasyonda imza


Temel olarak Git taahhütlerini imzalamak için üç seçenek mevcuttur: GPG anahtarı aracılığıyla, SSH anahtarı aracılığıyla veya S/MIME ile X.509 aracılığıyla. Git sunucusunda kimlik doğrulama için SSH anahtarları yaygın olduğundan, imzalama için mevcut bir SSH anahtarını kullanmak genellikle daha kolaydır. GPG anahtarlarının yönetimi biraz daha zordur, ancak isteğe bağlı bir son kullanma tarihleri vardır ve SSH anahtarlarının aksine, ele geçirilmeleri durumunda iptal edilebilirler.

Açık kaynak alanında, fiziksel temas olmadan bile anahtar sahibinin kimliğini garanti altına almak için güven ağı adı verilen bir ağ oluşturan çeşitli GPG anahtar sunucuları da mevcuttur. Büyük kuruluşlar için S/MIME'nin ortak anahtar altyapısı (PKI) X.509 sertifikasıyla birlikte kullanılması yararlı olabilir.

Tuşları ayarlama


Aşağıdaki komutlar önce yeni bir SSH anahtarı oluşturur, ardından taahhüt imzasını SSH olarak değiştirir ve son olarak imza için SSH anahtarını belirtir:


ssh-keygen -t ed25519 -a 100
git config --global gpg.format ssh
git config --global user.signingkey /PFAD/ZUM/SSH/PUBLIC/KEY



Aşağıdaki üç komut bir GPG anahtarı oluşturur ve ardından anahtarların listesini döndürür. Son olarak üçüncü komut, anahtarı Git'te varsayılan anahtar olarak yapılandırmak için anahtar kimliğini kullanır:


gpg --full-generate-key
gpg --list-secret-keys --keyid-format LONG <e-Mail>
git config --global user.signingkey <Schlüssel-ID>



Parametre -S imzalı taahhütler oluşturmak için kullanılır:

git commit -S

Alternatif olarak Git, tüm taahhütleri otomatik olarak imzalayacak şekilde yapılandırılabilir:

git config --global commit.gpgsign true



Haberin Sonu
 
Üst