deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak Hacker News – Front Page (native)

Once: açık kaynak Go CLI, shell komut çıktısını kullanıcı başına çalışan bir daemon'da önbelleğe alıyor

Once bir komutu çalıştırıyor, stdout çıktısını kullanıcı başına bir daemon'da saklıyor ve süre dolana kadar tekrarlanan çağrıları bellekten yanıtlıyor; en öne çıkan kullanımı parmak izi gerektirmeyen 1Password secret okumaları.

Once: açık kaynak Go CLI, shell komut çıktısını kullanıcı başına çalışan bir daemon'da önbelleğe alıyor

Komut çıktısını hatırlayan kullanıcı başına bir daemon

alex0ptr tarafından GitHub'da yayımlanan Once adlı açık kaynak araç, Hacker News ana sayfasında öne çıktı. Projenin README'sine göre Once, bir komutu mevcut dizininizde çalıştırıyor, stdout çıktısını yazdırıyor ve sonucu küçük, kullanıcı başına çalışan arka plan daemon'unun belleğinde saklıyor. Aynı komut, çalışma dizini ve tenant anahtarını taşıyan tekrarlanan çağrılar, kaydın süresi dolana kadar doğrudan bellekten yanıtlanıyor; son kaydın süresi dolduğunda daemon kendi kendine kapanıyor.

Proje, standart kütüphane dışında hiçbir bağımlılığı olmayan Go ile yazılmış. Tek bir go install komutuyla kuruluyor, Go 1.27 veya daha yeni bir sürüm gerektiriyor, yalnızca macOS ve Linux'ta çalışıyor ve MIT lisanslı.

Önbellek anahtarı nasıl oluşturuluyor

Temel kullanım biçimi once --ttl DURATION -- COMMAND şeklinde; birkaç isteğe bağlı anahtar da var. Time-to-live bayrağı zorunlu; --until mutlak bir süre üst sınırı belirliyor ve hangisi önce gelirse o geçerli oluyor. --refresh önbelleği yok sayıyor, komutu yeniden çalıştırıyor ve saklanan değerin üzerine yazıyor. --no-dir çalışma dizinini önbellek anahtarının dışında bırakıyor; bu önemli çünkü git rev-parse HEAD gibi bir komut dizinden dizine farklı çıktı üretebilirken, bir 1Password okuması nerede olduğunuza bağlı değildir.

Önbellek anahtarı, tenant anahtarı ile çalışma dizini, komut ve argümanların üzerinden hesaplanan bir HMAC-SHA256 değeri; --no-dir altında dizin hariç tutuluyor. Tenant anahtarı shell'leri, projeleri veya script'leri ayırmak için bir ad alanı işlevi görüyor; README, bunun bir güvenlik sınırı olmadığını ve gizli tutulması gerekmediğini açıkça belirtiyor. Anahtarı istemcinin kendisi hesaplıyor, dolayısıyla tenant değeri hiçbir zaman daemon'a iletilmiyor; ancak --tenant ile geçirilen bir anahtar process listesinde görünüyor.

Yalnızca stdout önbelleğe alınıyor. Stdin ve stderr doğrudan geçiyor, böylece etkileşimli prompt'lar çalışmaya devam ediyor; sıfırdan farklı çıkaran komutlar asla önbelleğe alınmıyor ve çıkış kodları iletiliyor. -- ayırıcısından sonraki her şey shell olmadan doğrudan çalıştırılıyor, bu yüzden pipe'ların ve glob'ların elle sarlanması gerekiyor. İki alt komut işi tamamlıyor: once status daemon'u, kayıt sayısını ve durma zamanını raporlarken, once clear önbelleğe alınmış tüm değerleri siliyor ve daemon'u kapatıyor.

Motive eden kullanım senaryosu

README'nin baş senaryosu, 1Password'ten secret'ları her okuma için parmak izini yeniden onaylamadan getirmek. once --ttl 8h --no-dir -- op read op://Private/GitHub/token gibi ilk bir çağrı biyometrik prompt'u tetikliyor; sekiz saatlik pencere içinde aynı tenant anahtarını paylaşan sonraki çağrılar bu prompt'u atlıyor. Projenin örnekleri, bu kalıbın UUID'den üretilen terminal başına veya proje başına tenant anahtarlarıyla direnv ve mise yapılandırmalarına bağlanışını ve token'ları isteğe bağlı olarak ortama export edilmesini gösteriyor.

Güvenlik modeli ve sınırlar

İletişim, mode-0700 bir runtime dizinindeki Unix socket üzerinden, socket'in kendisi 0600 modunda gerçekleşiyor; bu da diğer kullanıcıların bağlanmasını engelliyor. Aynı kullanıcıya ait süreçler bilinçli olarak dışlanmıyor: onlar socket'e erişebiliyor ve tenant anahtarını okuyabiliyor; README bunun bir ihmal değil tasarım kararı olduğunu söylüyor. Değerler daemon'un belleğinde şifrelenmemiş halde duruyor, silinmeden önce elden geldiğince üzerine yazılıyor ve swap'e karşı kilitlenmiyor. Daemon'un core dump'ları Linux'ta RLIMIT_CORE 0 ve PR_SET_DUMPABLE 0 ile devre dışı bırakılmış. 64 MiB'den büyük çıktılar önbelleğe alınmadan geçiyor ve süre kontrolü her okumada duvar saatine göre yapılıyor, böylece kayıtlar bir laptop uyku modundan uyandıktan sonra da doğru şekilde sürelerinin doluyor.

Neden önemli

Bir geliştiricinin günü boyunca tekrar tekrar karşılaştığı yavaş veya sürtünme yaratan komutlar — biyometrik onaylı secret okumaları veya ağ gidiş-gelişleri gibi — ciddi bir verimlilik vergisi ve Once bu sorunu bilinçli olarak küçük bir yüzeyle ele alıyor: tek bir bağımlılıksız binary ve kendini temizleyen bir bellek içi önbellek. En az bunun kadar dikkat çekici olanı, dokümantasyonun açıklığı: araç neye karşı koruma sağladığını, neyi açıkça sağlamadığını ve sert kenarların nerede olduğunu net biçimde ortaya koyuyor. direnv veya mise ile ortamlar kuran herkes için, çevredeki iş akışını yeniden şekillendirmeden tekrarlanan kurulum komutlarını fiilen ücretsüz hale getirmenin pratik bir yolunu sunuyor.

  • #cli
  • #open-source
  • #go
  • #caching
  • #developer-tools

İlgili yazılar