dl-toggle — Güvenli İndirme Kasası

Tarayıcı bir dosya indirdiğinde, o dosya sisteme yerleşiyor. İndirme klasörü açıksa, kötü amaçlı bir süreç oraya yazabilir. Bu yüzden Downloads klasörünü normal hayatta root’a kilitli tutuyorum; indirme yapacağım zaman vault komutuyla açıyorum, bitince kilitleniyor.

NixOS Yapılandırma Sistemi içerisindeki packages/dl-toggle altında geliştirilen bu araç, güvenliği otomatize ediyor. Kaynak Kodları NixOS Reposundadır (Codeberg).

Neden Rust?

Eski sistemde bir bash scripti vardı. Bash ile chown çağırmak için script’in root yetkisine ihtiyacı vardı — ya sudo kullanacaktım, ya da yetkileri gevşetecektim. Bunun yerine anyhow ve nix crate’lerini kullanarak 59 satırlık bir setuid binary yazdım: tek çalıştırılabilir dosya, root’a ait, ancak normal kullanıcı tetikleyebilir.

Nasıl Çalışıyor?

Binary çalışırken std::os::unix::fs::MetadataExt üzerinden klasörün sahibine (uid) bakıyor. Sahip kullanıcıysa (1000) root’a (0) kilitliyor, root’sa kullanıcıya açıyor. Her iki durumda da notify-rust üzerinden DBus ile masaüstü bildirimi gönderiyor.

vault Downloads: KAPALI (root sahipli - chmod 700)
vault Downloads: AÇIK  (kullanıcı sahipli)

NixOS Entegrasyonu

security.wrappers modülü ile sisteme setuid binary olarak gömülür. Binary doğrudan /run/wrappers/bin/dl-toggle altında yaşar, root sahipli ve setuid bitli (SUID) olduğu için sudo şifresi gerektirmez.

security.wrappers."dl-toggle" = {
  source = "${dl-toggle}/bin/dl-toggle";
  owner = "root";
  group = "root";
  setuid = true;
};

Güvenlik Sınırları

Şu anki implementasyonda Time-of-check to time-of-use (TOCTOU) riski teorik olarak mevcut. Tam sertleştirme için openat ve fchown ile dosya tanımlayıcıları üzerinden atomik işlem (atomic operation) yapılmalıdır. Mevcut ev kullanımı için SUID tabanlı state-toggle fazlasıyla yeterli.

EOF.