OpenVPN açarı yaratmaq üçün müvəqqəti fayl lazım deyil
Açar materialını yaddaşda saxlamaq fayl həyat dövrəsindən yayınır, sızıntıdan yox. Çıxış və xəta axınlarını ayrı saxlayın, açarı isə sonradan sirr kimi qəbul edin.
Açar yaratmaq üçün müvəqqəti fayl lazım deyil və ondan imtina etmək əksər bələdçilərin ima etdiyindən az şey düzəldir. Onun aradan qaldırdığı şey fayl həyat dövrəsi və onun ətrafındakı təmizləmə yarışıdır. Toxunmadan qoyduğu şey isə sonradan sirri sızdırmaq üçün bütün imkanlardır. Bu skriptlərdə düzgünlük problemi adətən başqa yerdə oturur, çünki diaqnostika və açar materialı müxtəlif axınlarla səyahət edir.
Fayl heç vaxt düşündüyünüz məruz qalma deyildi
Müvəqqəti fayl hər kəs üçün oxunaqlı olduqda, çökmədən sonra qaldıqda və ya istisnadan sonra təmizləmə addımı atlandıqda konkret riskdir. Bunlar realdır və düzəltməyə dəyər. Onlar həm də lokaldır, görünür və sınaqdan keçirmək asandır. Dəyişikliyin yalnız kosmetik olduğu qənaətinə gəlməzdən əvvəl hər birini öz skriptinizdə adlandırın.
Daha sakit risklər aşağı axında oturur: sazlama zamanı çap olunan açar, bütün nəticə obyektini seriallaşdıran istisna, nüvə dump-ı yazan çökmə idarəedicisi, əvvəlcə fayl yolunu sonra məzmunu alan jurnal toplayıcısı. Müvəqqəti fayldan yayınmaq bunların heç biri üçün heç nə etmir və əksini düşünmək yaxşı niyyətli yenidən yazmanın sirri əvvəlkindən daha açıq qoymasının yoludur. Dəyişikliyə ardıcıllıqda bir yaxşılaşdırma kimi baxın, həll kimi yox.
Fayl adı verilmədikdə müştəri nə yazır
Müştərinin cari versiyaları açar əmri çıxış yolu olmadan verildikdə yaradılan açarı standart çıxışa göndərir. Bu sənədləşdirilmiş davranış yaddaşdakı yanaşmanı mümkün edən şeydir və aləti cihaz yoluna yönəltmək kimi köhnə hiyləyə ehtiyacı aradan qaldırır.
import subprocess
proc = subprocess.run(
["openvpn", "--genkey", "tls-crypt"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
check=True,
)
key_material = proc.stdout
Əmri siyahı kimi ötürün. Burada qabıq genişlənməsinə ehtiyac yoxdur və qabığı işə salmaq arqument sərhədini nəzarət etmədiyiniz dırnaqlardan asılı edərdi. Skript gözlədiyinizdən fərqli axtarış yolu ilə işləyə bilərsə, nəzərdə tutulan icra faylını mütləq yolla istifadə edin.
Qaytarma kodu yoxlaması uğursuz çağırışdan sonra uğur yolunun davam etməsini dayandırır. O olmadan boş bayt sətri irəli axa bilər və yalnız çox sonra, açarın istifadə olunduğu və xəta mesajının artıq yaradılmadan bəhs etmədiyi nöqtədə uğursuz olar.
İki axın, iki məna
Standart çıxış açarı daşıyır. Standart xəta alətin sizə demək istədiyi hər şeyi daşıyır, o cümlədən konfiqurasiya, versiya və açar növü barədə xəbərdarlıqları. Hər ikisini bir buferə yönləndirmək, ortasına cümlə tikilmiş inandırıcı görünən açar istehsal edən səhvdir.
Uğursuzluq yolunu da ayrı saxlayın. Çağırış uğursuz olduqda, uğursuz olan əmri və çıxış statusunu bildirin, sonra standart xətanın hər hansı hissəsinin göstərilməsinin təhlükəsiz olub-olmadığını qəsdən qərar verin. Tam nəticə obyektini jurnala boşaltmaq adi qısa yoldur və açarı özü ilə apara bilər.
Sonradan materialı heşləyəcəksinizsə və ya müqayisə edəcəksinizsə, ikili təhlükəsiz oxuma vacibdir. Gözlənilməz kodlaşdırma ilə mətn rejimi heç vaxt mətn olmaq üçün nəzərdə tutulmayan baytları dəyişə bilər və dəyişmiş açar əl sıxma uğursuz olana qədər səhv açardan fərqlənmir.
Əgər həqiqətən saxlayırsınızsa, bunu qəsdən edin
Əksər yerləşdirmələr nəticədə açarı diskdə, şlüz üzərində və ya sirr anbarında lazım edir. Onu bir dəfə yazın, sonrakı chmod əvəzinə yaradılma anından məhdudlaşdırıcı icazələrlə və yazını atomik edin ki, qismən fayl heç vaxt xidmətin başlanğıcda oxuduğu fayl olmasın. Eyni qovluqdakı yoldan adlandırma dəyişməsi bunun üçün adətən kifayətdir. Uğursuzluq budağında hazırlıq yolunu silin, çünki uğursuz yazı məhz insanların unutduğu nüsxədir.
Fayl yaradılarkən onun rejimini təyin edin və qovluq rejimini də məhdudlaşdırıcı saxlayın. Ehtiyat nüsxə işinin fikirləşmədən süpürdüyü yerin altındakı hər hansı yoldan çəkinin, çünki gecə ehtiyat nüsxəsindəki sirr həmin nüsxənin hər surətindəki sirrdir. Eyni məntiq digər xidmətlərin oxuya bildiyi paylaşılan həcm üçün də keçərlidir.
Paylaşılan açar şəxsiyyət deyil
Bu materialı yaratmaq sertifikat vermir, müştəri qeyd etmir və kimin qoşulduğunu müəyyən etmir. Paylaşılan açar artıq bir-birinə etibar edən tərəflər arasındakı kanalı qoruyur; şəxsiyyət hələ də sertifikatdan və onun qarşısında duran hər hansı autentifikasiyadan gəlir.
Açar növləri də bir-birini əvəz etmir. Bir xüsusiyyət üçün simmetrik açar digəri üçün hazır əvəzedici deyil və daha yeni buraxılışlar hər tərəfdə fərqli fayllarla öz variantlarını əlavə edir. Konfiqurasiyanızın həqiqətən adlandırdığı növü yaradın, sonra onu həmin növün təyin etdiyi rolda istifadə edin.
Nəticəni fayl ölçüsünü yoxlamaqla deyil, real bağlantı ilə sınayın. Əl sıxma tamamlanırsa və jurnallar açar xəbərdarlığı göstərmirsə, yaratma yolu düzgündür; açar birləşdirilmiş axın tərəfindən kəsilmiş olsaydı, bağlantı skriptə deyil, qarşı tərəfə işarə edən şəkildə uğursuz olardı.