{"id":3941,"date":"2026-01-01T21:50:31","date_gmt":"2026-01-01T18:50:31","guid":{"rendered":"https:\/\/www.dchost.com\/blog\/vpste-env-ve-gizli-anahtar-yonetimi\/"},"modified":"2026-01-01T21:50:31","modified_gmt":"2026-01-01T18:50:31","slug":"vpste-env-ve-gizli-anahtar-yonetimi","status":"publish","type":"post","link":"https:\/\/www.dchost.com\/blog\/vpste-env-ve-gizli-anahtar-yonetimi\/","title":{"rendered":"VPS\u2019te .env ve Gizli Anahtar Y\u00f6netimi"},"content":{"rendered":"<div class=\"dchost-blog-content-wrapper\"><div id=\"toc_container\" class=\"toc_transparent no_bullets\"><p class=\"toc_title\">\u0130&ccedil;indekiler<\/p><ul class=\"toc_list\"><li><a href=\"#VPSte_env_ve_gizli_anahtar_yonetimi_neden_bu_kadar_kritik\"><span class=\"toc_number toc_depth_1\">1<\/span> VPS\u2019te .env ve gizli anahtar y\u00f6netimi neden bu kadar kritik?<\/a><\/li><li><a href=\"#Hangi_veriler_gercekten_gizli_envde_ne_tutulur_ne_tutulmaz\"><span class=\"toc_number toc_depth_1\">2<\/span> Hangi veriler ger\u00e7ekten gizli? .env\u2019de ne tutulur, ne tutulmaz?<\/a><ul><li><a href=\"#Gizli_sayilmasi_gereken_tipik_bilgiler\"><span class=\"toc_number toc_depth_2\">2.1<\/span> Gizli say\u0131lmas\u0131 gereken tipik bilgiler<\/a><\/li><li><a href=\"#env_dosyasina_yazmamaniz_gerekenler\"><span class=\"toc_number toc_depth_2\">2.2<\/span> .env dosyas\u0131na yazmaman\u0131z gerekenler<\/a><\/li><\/ul><\/li><li><a href=\"#env_yaklasimi_Guclu_yanlari_ve_riskleri\"><span class=\"toc_number toc_depth_1\">3<\/span> .env yakla\u015f\u0131m\u0131: G\u00fc\u00e7l\u00fc yanlar\u0131 ve riskleri<\/a><ul><li><a href=\"#env_nedir_nasil_calisir\"><span class=\"toc_number toc_depth_2\">3.1<\/span> .env nedir, nas\u0131l \u00e7al\u0131\u015f\u0131r?<\/a><\/li><li><a href=\"#Yerel_gelistirme_vs_VPS_uretim_ortami\"><span class=\"toc_number toc_depth_2\">3.2<\/span> Yerel geli\u015ftirme vs VPS \u00fcretim ortam\u0131<\/a><\/li><li><a href=\"#env_dosyasini_asla_Git_deposuna_koymamak\"><span class=\"toc_number toc_depth_2\">3.3<\/span> .env dosyas\u0131n\u0131 asla Git deposuna koymamak<\/a><\/li><\/ul><\/li><li><a href=\"#VPS_uzerinde_guvenli_env_ve_config_dosyasi_yerlesimi\"><span class=\"toc_number toc_depth_1\">4<\/span> VPS \u00fczerinde g\u00fcvenli .env ve config dosyas\u0131 yerle\u015fimi<\/a><ul><li><a href=\"#Dogru_dizin_yapisi_ve_izolasyon\"><span class=\"toc_number toc_depth_2\">4.1<\/span> Do\u011fru dizin yap\u0131s\u0131 ve izolasyon<\/a><\/li><li><a href=\"#Dosya_sahipligi_ve_izinler_chown_chmod_ve_pratik_degerler\"><span class=\"toc_number toc_depth_2\">4.2<\/span> Dosya sahipli\u011fi ve izinler: chown, chmod ve pratik de\u011ferler<\/a><\/li><li><a href=\"#env_dosyasinin_web_uzerinden_indirilmesini_engellemek\"><span class=\"toc_number toc_depth_2\">4.3<\/span> .env dosyas\u0131n\u0131n web \u00fczerinden indirilmesini engellemek<\/a><\/li><li><a href=\"#Yedekleme_ve_snapshotlarda_secrets\"><span class=\"toc_number toc_depth_2\">4.4<\/span> Yedekleme ve snapshot\u2019larda secrets<\/a><\/li><\/ul><\/li><li><a href=\"#env_yerineyaninda_ortam_degiskenleri_kullanmak\"><span class=\"toc_number toc_depth_1\">5<\/span> .env yerine\/yan\u0131nda ortam de\u011fi\u015fkenleri kullanmak<\/a><ul><li><a href=\"#systemd_servis_dosyasi_ile_environment_yonetimi\"><span class=\"toc_number toc_depth_2\">5.1<\/span> systemd servis dosyas\u0131 ile environment y\u00f6netimi<\/a><\/li><li><a href=\"#PHP-FPM_Nodejs_ve_digerleri_icin_ortam_degiskenleri\"><span class=\"toc_number toc_depth_2\">5.2<\/span> PHP-FPM, Node.js ve di\u011ferleri i\u00e7in ortam de\u011fi\u015fkenleri<\/a><\/li><\/ul><\/li><li><a href=\"#CICD_ve_deploy_surecinde_gizli_anahtar_yonetimi\"><span class=\"toc_number toc_depth_1\">6<\/span> CI\/CD ve deploy s\u00fcrecinde gizli anahtar y\u00f6netimi<\/a><ul><li><a href=\"#envexample_production_env_ve_takim_ici_pratikler\"><span class=\"toc_number toc_depth_2\">6.1<\/span> .env.example, production .env ve tak\u0131m i\u00e7i pratikler<\/a><\/li><li><a href=\"#GitHub_Actions_ve_benzeri_CICD_sistemlerinde_secrets_kullanimi\"><span class=\"toc_number toc_depth_2\">6.2<\/span> GitHub Actions ve benzeri CI\/CD sistemlerinde secrets kullan\u0131m\u0131<\/a><\/li><\/ul><\/li><li><a href=\"#Ileri_seviye_secrets_yonetimi_Sifreleme_sops_age_ve_otesi\"><span class=\"toc_number toc_depth_1\">7<\/span> \u0130leri seviye secrets y\u00f6netimi: \u015eifreleme, sops, age ve \u00f6tesi<\/a><ul><li><a href=\"#Neden_duz_metin_env_her_zaman_yeterli_degil\"><span class=\"toc_number toc_depth_2\">7.1<\/span> Neden d\u00fcz metin .env her zaman yeterli de\u011fil?<\/a><\/li><li><a href=\"#sops_age_ile_sifreli_env_dosyalari\"><span class=\"toc_number toc_depth_2\">7.2<\/span> sops + age ile \u015fifreli .env dosyalar\u0131<\/a><\/li><\/ul><\/li><li><a href=\"#Uygulama_bazli_pratikler_Laravel_WordPress_Nodejs_ve_digerleri\"><span class=\"toc_number toc_depth_1\">8<\/span> Uygulama bazl\u0131 pratikler: Laravel, WordPress, Node.js ve di\u011ferleri<\/a><ul><li><a href=\"#Laravel_ve_diger_modern_PHP_frameworkleri\"><span class=\"toc_number toc_depth_2\">8.1<\/span> Laravel ve di\u011fer modern PHP framework\u2019leri<\/a><\/li><li><a href=\"#WordPress_wp-configphp_ve_salt_anahtarlari\"><span class=\"toc_number toc_depth_2\">8.2<\/span> WordPress: wp-config.php ve salt anahtarlar\u0131<\/a><\/li><li><a href=\"#Nodejs_Python_ve_mikroservis_yapilari\"><span class=\"toc_number toc_depth_2\">8.3<\/span> Node.js, Python ve mikroservis yap\u0131lar\u0131<\/a><\/li><\/ul><\/li><li><a href=\"#Erisim_kontrolu_audit_ve_anahtar_rotasyonu\"><span class=\"toc_number toc_depth_1\">9<\/span> Eri\u015fim kontrol\u00fc, audit ve anahtar rotasyonu<\/a><ul><li><a href=\"#Kim_hangi_secreta_erisebilmeli\"><span class=\"toc_number toc_depth_2\">9.1<\/span> Kim hangi secret\u2019a eri\u015febilmeli?<\/a><\/li><li><a href=\"#Anahtar_rotasyonu_Ne_siklikla_nasil\"><span class=\"toc_number toc_depth_2\">9.2<\/span> Anahtar rotasyonu: Ne s\u0131kl\u0131kla, nas\u0131l?<\/a><\/li><li><a href=\"#Loglarda_ve_hata_mesajlarinda_secrets_sizintisini_onlemek\"><span class=\"toc_number toc_depth_2\">9.3<\/span> Loglarda ve hata mesajlar\u0131nda secrets s\u0131z\u0131nt\u0131s\u0131n\u0131 \u00f6nlemek<\/a><\/li><\/ul><\/li><li><a href=\"#DCHost_VPS_uzerinde_guvenli_secrets_mimarisini_adim_adim_kurmak\"><span class=\"toc_number toc_depth_1\">10<\/span> DCHost VPS \u00fczerinde g\u00fcvenli secrets mimarisini ad\u0131m ad\u0131m kurmak<\/a><\/li><\/ul><\/div>\n<h2><span id=\"VPSte_env_ve_gizli_anahtar_yonetimi_neden_bu_kadar_kritik\">VPS\u2019te .env ve gizli anahtar y\u00f6netimi neden bu kadar kritik?<\/span><\/h2>\n<p>Bir <a href=\"https:\/\/www.dchost.com\/tr\/vps\">VPS<\/a> \u00fczerinde \u00e7al\u0131\u015fan her modern web uygulamas\u0131, y\u00fczeyde basit g\u00f6r\u00fcnen ama altyap\u0131n\u0131n kalbinde duran onlarca gizli bilgiye dayan\u0131r: veritaban\u0131 \u015fifreleri, API anahtarlar\u0131, OAuth client secret\u2019lar\u0131, JWT imzalama anahtarlar\u0131, \u00f6deme altyap\u0131s\u0131 token\u2019lar\u0131, SMTP parolalar\u0131 ve daha fazlas\u0131. Bunlar s\u0131zd\u0131\u011f\u0131 anda yaln\u0131zca uygulaman\u0131z de\u011fil, m\u00fc\u015fterilerinizin verileri, itibar\u0131n\u0131z ve hatta \u015firketinizin hukuki durumu risk alt\u0131na girer.<\/p>\n<p>Uygulama kodu i\u00e7in Git, CI\/CD, test ve code review s\u00fcre\u00e7leri kurmak g\u00f6rece kolay. As\u0131l zor ve \u00e7o\u011fu zaman ihmal edilen k\u0131s\u0131m; <strong>.env dosyalar\u0131<\/strong>, <strong>config dosyalar\u0131<\/strong> ve gizli anahtarlar\u0131n (secrets) VPS \u00fczerinde nas\u0131l saklanaca\u011f\u0131, kim taraf\u0131ndan y\u00f6netilece\u011fi ve nas\u0131l g\u00fcncellenece\u011fidir. Bir\u00e7ok g\u00fcvenlik denetiminde g\u00f6rd\u00fc\u011f\u00fcm\u00fcz temel problem, .env dosyalar\u0131n\u0131n yanl\u0131\u015f izinlerle herkese a\u00e7\u0131k olmas\u0131, Git deposuna yanl\u0131\u015fl\u0131kla commit edilmi\u015f API key\u2019ler veya yedeklerde \u015fifrelenmeden duran kritik yap\u0131land\u0131rmalar oluyor.<\/p>\n<p>Bu yaz\u0131da DCHost ekibi olarak, VPS \u00fczerinde .env ve gizli anahtar y\u00f6netimini u\u00e7tan uca ele alaca\u011f\u0131z. Hangi verilerin secret say\u0131lmas\u0131 gerekti\u011finden, Linux dosya izinleri ve dizin yap\u0131s\u0131na; systemd ve ortam de\u011fi\u015fkenlerinden CI\/CD boru hatt\u0131nda secrets kullan\u0131m\u0131na, \u015fifreli secrets y\u00f6netimine ve anahtar rotasyonuna kadar ad\u0131m ad\u0131m ilerleyece\u011fiz. Amac\u0131m\u0131z; pratik, uygulanabilir ve denetlenebilir bir model kurman\u0131za yard\u0131m etmek.<\/p>\n<h2><span id=\"Hangi_veriler_gercekten_gizli_envde_ne_tutulur_ne_tutulmaz\">Hangi veriler ger\u00e7ekten gizli? .env\u2019de ne tutulur, ne tutulmaz?<\/span><\/h2>\n<h3><span id=\"Gizli_sayilmasi_gereken_tipik_bilgiler\">Gizli say\u0131lmas\u0131 gereken tipik bilgiler<\/span><\/h3>\n<p>\u00d6nce neyi korudu\u011fumuzu netle\u015ftirmek gerekiyor. A\u015fa\u011f\u0131daki bilgiler <strong>kesinlikle gizli<\/strong> kabul edilmeli ve .env veya benzeri bir yap\u0131 \u00fczerinden dikkatle y\u00f6netilmelidir:<\/p>\n<ul>\n<li><strong>Veritaban\u0131 eri\u015fim bilgileri:<\/strong> DB kullan\u0131c\u0131 ad\u0131, parola, ba\u011flant\u0131 URL\u2019leri, read\/write replikalar i\u00e7in ayr\u0131 kullan\u0131c\u0131lar<\/li>\n<li><strong>API anahtarlar\u0131 ve token\u2019lar:<\/strong> \u00d6deme sa\u011flay\u0131c\u0131lar\u0131, SMS sa\u011flay\u0131c\u0131lar\u0131, harita\/konum servisleri, e-posta servisleri vb.<\/li>\n<li><strong>OAuth2 client_id \/ client_secret ve redirect secret\u2019lar\u0131:<\/strong> Google, sosyal a\u011flar veya kurumsal SSO entegrasyonlar\u0131<\/li>\n<li><strong>JWT imzalama anahtarlar\u0131 ve \u015fifreleme anahtarlar\u0131:<\/strong> access\/refresh token\u2019lar\u0131n\u0131 imzalamak veya \u015fifrelemek i\u00e7in kulland\u0131\u011f\u0131n\u0131z secret\u2019lar<\/li>\n<li><strong>Uygulama anahtarlar\u0131:<\/strong> Laravel APP_KEY, WordPress auth\/secure salts, framework&#8217;e \u00f6zg\u00fc gizli anahtarlar<\/li>\n<li><strong>SMTP ve IMAP parolalar\u0131:<\/strong> Transactional e-posta g\u00f6nderimi veya gelen kutusu senkronizasyonu i\u00e7in kullan\u0131lan bilgiler<\/li>\n<li><strong>3. parti sistem eri\u015fim bilgileri:<\/strong> CRM, ERP, muhasebe, kargo entegrasyonu gibi d\u0131\u015f sistem kullan\u0131c\u0131\/parolalar\u0131<\/li>\n<\/ul>\n<p>Bu ba\u015fl\u0131klar\u0131n ortak noktas\u0131, <strong>ele ge\u00e7irildi\u011finde sistem d\u0131\u015f\u0131nda bir kap\u0131 a\u00e7malar\u0131<\/strong>d\u0131r. Yani sadece uygulaman\u0131z\u0131 de\u011fil, ba\u011fl\u0131 oldu\u011funuz ba\u015fka servisleri de tehlikeye atabilirler.<\/p>\n<h3><span id=\"env_dosyasina_yazmamaniz_gerekenler\">.env dosyas\u0131na yazmaman\u0131z gerekenler<\/span><\/h3>\n<p>.env dosyas\u0131 her t\u00fcr veriyi atabilece\u011finiz bir \u00e7\u00f6p kutusu de\u011fildir. A\u015fa\u011f\u0131dakileri .env\u2019e koymaktan ka\u00e7\u0131n\u0131n:<\/p>\n<ul>\n<li><strong>B\u00fcy\u00fck konfig\u00fcrasyon bloklar\u0131:<\/strong> JSON, XML, YAML gibi uzun metinler; y\u00f6netimi zorla\u015ft\u0131r\u0131r, hata riskini art\u0131r\u0131r<\/li>\n<li><strong>Kullan\u0131c\u0131 verileri:<\/strong> \u0130sim, e-posta, telefon gibi dinamik ve veri taban\u0131nda tutulmas\u0131 gereken bilgiler<\/li>\n<li><strong>Log veya debug \u00e7\u0131kt\u0131lar\u0131:<\/strong> Hata ay\u0131klarken ge\u00e7ici olarak eklenen ve sonra unutulan debug string\u2019leri<\/li>\n<li><strong>Fazla de\u011fi\u015fen i\u015f kurallar\u0131:<\/strong> Fiyat listeleri, kampanya oranlar\u0131 gibi s\u0131k s\u0131k g\u00fcncellenen i\u015f verileri<\/li>\n<\/ul>\n<p>.env; <strong>ortam bazl\u0131 yap\u0131land\u0131rma ve gizli anahtarlar<\/strong> i\u00e7in kullan\u0131lmal\u0131d\u0131r, i\u015f verisi veya ge\u00e7ici debug verisi i\u00e7in de\u011fil.<\/p>\n<h2><span id=\"env_yaklasimi_Guclu_yanlari_ve_riskleri\">.env yakla\u015f\u0131m\u0131: G\u00fc\u00e7l\u00fc yanlar\u0131 ve riskleri<\/span><\/h2>\n<h3><span id=\"env_nedir_nasil_calisir\">.env nedir, nas\u0131l \u00e7al\u0131\u015f\u0131r?<\/span><\/h3>\n<p>.env, projeye \u00f6zel ortam de\u011fi\u015fkenlerini d\u00fcz metin dosyas\u0131nda tutma yakla\u015f\u0131m\u0131d\u0131r. \u00c7o\u011fu dil ve framework\u2019te bir <code>dotenv<\/code> k\u00fct\u00fcphanesi, uygulama ba\u015flarken bu dosyay\u0131 okuyup i\u00e7indeki de\u011ferleri <code>ENV<\/code>\/<code>process.env<\/code> gibi yap\u0131lar\u0131n i\u00e7ine y\u00fckler. B\u00f6ylece:<\/p>\n<ul>\n<li>Production, staging, test gibi ortamlar i\u00e7in farkl\u0131 .env dosyalar\u0131 kullanabilirsiniz<\/li>\n<li>Ayn\u0131 kod taban\u0131n\u0131 farkl\u0131 m\u00fc\u015fterilere\/markalara g\u00f6re konfig\u00fcre edebilirsiniz<\/li>\n<li>Gizli anahtarlar\u0131n\u0131z\u0131 koddan ay\u0131r\u0131p konfig\u00fcrasyon katman\u0131na ta\u015f\u0131rs\u0131n\u0131z<\/li>\n<\/ul>\n<p>Do\u011fru kullan\u0131ld\u0131\u011f\u0131nda bu yakla\u015f\u0131m, hem geli\u015ftirme s\u00fcrecini temizler hem de g\u00fcvenlik a\u00e7\u0131s\u0131ndan kod\u2013secret ayr\u0131m\u0131n\u0131 netle\u015ftirir.<\/p>\n<h3><span id=\"Yerel_gelistirme_vs_VPS_uretim_ortami\">Yerel geli\u015ftirme vs VPS \u00fcretim ortam\u0131<\/span><\/h3>\n<p>Geli\u015ftiriciler \u00e7o\u011fu zaman kendi bilgisayarlar\u0131nda <strong>.env<\/strong> dosyas\u0131n\u0131 ev dizininde veya proje k\u00f6k\u00fcnde saklar, bu da \u00e7o\u011fu senaryoda kabul edilebilir. Ancak VPS \u00fczerinde durum farkl\u0131d\u0131r:<\/p>\n<ul>\n<li>Sunucuyu birden fazla ki\u015fi ve servis kullan\u0131yor olabilir<\/li>\n<li>Yanl\u0131\u015f dosya izinleri, di\u011fer sistem kullan\u0131c\u0131lar\u0131n\u0131n secrets\u2019lar\u0131 okumas\u0131na yol a\u00e7abilir<\/li>\n<li>Yanl\u0131\u015f Nginx\/Apache yap\u0131land\u0131rmas\u0131 .env dosyas\u0131n\u0131 do\u011frudan <strong>HTTP \u00fczerinden eri\u015filebilir<\/strong> hale getirebilir<\/li>\n<li>Yedekler, snapshot\u2019lar ve loglar da gizli bilgileri i\u00e7inde ta\u015f\u0131yabilir<\/li>\n<\/ul>\n<p>Bu nedenle VPS \u00fczerinde .env y\u00f6netimi, yaln\u0131zca \u201cdosyay\u0131 olu\u015fturup doldurma\u201d de\u011fil; <strong>dosya konumu, izinler, sahiplik, backup ve eri\u015fim denetimi<\/strong> ile birlikte ele al\u0131nmal\u0131d\u0131r.<\/p>\n<h3><span id=\"env_dosyasini_asla_Git_deposuna_koymamak\">.env dosyas\u0131n\u0131 asla Git deposuna koymamak<\/span><\/h3>\n<p>G\u00fcvenlik denetimlerinde en \u00e7ok kar\u015f\u0131la\u015ft\u0131\u011f\u0131m\u0131z hatalardan biri, .env dosyas\u0131n\u0131n yanl\u0131\u015fl\u0131kla Git deposuna commit edilmesidir. Bunu \u00f6nlemek i\u00e7in:<\/p>\n<ul>\n<li>Proje k\u00f6k\u00fcn\u00fczde mutlaka bir <code>.gitignore<\/code> dosyas\u0131 bulundurun<\/li>\n<li><code>.gitignore<\/code> i\u00e7ine <code>.env<\/code>, <code>.env.*<\/code> gibi desenleri ekleyin<\/li>\n<li>Tak\u0131m i\u00e7in sadece <strong>.env.example<\/strong> dosyas\u0131 olu\u015fturun; i\u00e7ini <strong>sahte\/placeholder de\u011ferlerle<\/strong> doldurun<\/li>\n<li>Ger\u00e7ek prod de\u011ferleri sadece sunucuda veya g\u00fcvenli bir secrets y\u00f6netim sistemi i\u00e7inde tutun<\/li>\n<\/ul>\n<p>E\u011fer bir g\u00fcn yanl\u0131\u015fl\u0131kla .env\u2019i commit ettiyseniz, ilgili API key ve parolalar\u0131 <strong>hemen iptal edip yenisini olu\u015fturman\u0131z<\/strong> gerekir; yaln\u0131zca repository\u2019den dosyay\u0131 silmek yetmez.<\/p>\n<h2><span id=\"VPS_uzerinde_guvenli_env_ve_config_dosyasi_yerlesimi\">VPS \u00fczerinde g\u00fcvenli .env ve config dosyas\u0131 yerle\u015fimi<\/span><\/h2>\n<h3><span id=\"Dogru_dizin_yapisi_ve_izolasyon\">Do\u011fru dizin yap\u0131s\u0131 ve izolasyon<\/span><\/h3>\n<p>G\u00fcvenli bir yap\u0131 i\u00e7in \u00f6nce dizin hiyerar\u015fisini temizlemek gerekir. \u00d6nerdi\u011fimiz yakla\u015f\u0131m:<\/p>\n<ul>\n<li>Her proje i\u00e7in ayr\u0131 bir Linux kullan\u0131c\u0131s\u0131 olu\u015fturun (\u00f6rne\u011fin <code>projex<\/code>)<\/li>\n<li>Uygulama dosyalar\u0131n\u0131 <code>\/var\/www\/projex<\/code> veya benzeri bir klas\u00f6rde tutun<\/li>\n<li><strong>Public web k\u00f6k\u00fcn\u00fc<\/strong> (\u00f6rne\u011fin Laravel i\u00e7in <code>public<\/code>, WordPress i\u00e7in <code>public_html<\/code>) bu klas\u00f6r\u00fcn alt\u0131na al\u0131n<\/li>\n<li>.env ve di\u011fer gizli config dosyalar\u0131n\u0131 <strong>public web k\u00f6k\u00fcn\u00fcn DI\u015eINDA<\/strong> bir yerde saklay\u0131n<\/li>\n<\/ul>\n<p>B\u00f6ylece yanl\u0131\u015f bir sunucu yap\u0131land\u0131rmas\u0131nda bile .env dosyas\u0131n\u0131n do\u011frudan HTTP \u00fczerinden servis edilme riskini azaltm\u0131\u015f olursunuz.<\/p>\n<p>Dizin ve izin konusunu daha derinlemesine ele almak isterseniz, <a href='https:\/\/www.dchost.com\/blog\/linux-dosya-izinleri-644-755-777-paylasimli-hosting-ve-vps-icin-guvenli-ayarlar\/'>Linux dosya izinleri 644, 755, 777 i\u00e7in g\u00fcvenli ayarlar\u0131 detayl\u0131 anlatt\u0131\u011f\u0131m\u0131z rehbere<\/a> mutlaka g\u00f6z at\u0131n.<\/p>\n<h3><span id=\"Dosya_sahipligi_ve_izinler_chown_chmod_ve_pratik_degerler\">Dosya sahipli\u011fi ve izinler: chown, chmod ve pratik de\u011ferler<\/span><\/h3>\n<p>.env ve config dosyalar\u0131 i\u00e7in tipik bir pratik:<\/p>\n<ul>\n<li>Sahip: Uygulaman\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 kullan\u0131c\u0131 (\u00f6rne\u011fin <code>projex<\/code>)<\/li>\n<li>Grup: Web sunucusu kullan\u0131c\u0131s\u0131 veya proje grubu (\u00f6rne\u011fin <code>www-data<\/code> veya <code>projex<\/code>)<\/li>\n<li>\u0130zinler: <code>640<\/code> veya daha s\u0131k\u0131 ise <code>600<\/code><\/li>\n<\/ul>\n<p>\u00d6rnek komutlar:<\/p>\n<ul>\n<li><code>chown projex:projex \/var\/www\/projex\/.env<\/code><\/li>\n<li><code>chmod 600 \/var\/www\/projex\/.env<\/code><\/li>\n<\/ul>\n<p>B\u00f6ylece dosyay\u0131 sadece ilgili kullan\u0131c\u0131 (ve gerekirse grup) okuyabilir, sistemdeki di\u011fer kullan\u0131c\u0131lar ise i\u00e7eri\u011fi g\u00f6remez. Ayn\u0131 prensipleri <strong>wp-config.php<\/strong>, <strong>config.php<\/strong>, <strong>local.php<\/strong> gibi di\u011fer yap\u0131land\u0131rma dosyalar\u0131na da uygulay\u0131n.<\/p>\n<h3><span id=\"env_dosyasinin_web_uzerinden_indirilmesini_engellemek\">.env dosyas\u0131n\u0131n web \u00fczerinden indirilmesini engellemek<\/span><\/h3>\n<p>\u0130kinci kritik nokta, .env dosyalar\u0131n\u0131n yanl\u0131\u015fl\u0131kla public k\u00f6k\u00fcn i\u00e7ine ta\u015f\u0131nmas\u0131 veya Nginx\/Apache yap\u0131land\u0131rmas\u0131ndaki bir hata sonucu eri\u015filebilir hale gelmesidir. Al\u0131nabilecek \u00f6nlemler:<\/p>\n<ul>\n<li>.env\u2019i her zaman <strong>public web klas\u00f6r\u00fcn\u00fcn d\u0131\u015f\u0131nda<\/strong> tutun<\/li>\n<li>Yine de risk almak istemiyorsan\u0131z, web sunucusuna <code>*.env<\/code> uzant\u0131l\u0131 dosyalar\u0131 <strong>asla servis etme<\/strong> kural\u0131 ekleyin<\/li>\n<li>G\u00fcvenlik taramalar\u0131yla sitenizin k\u00f6k dizininde yayg\u0131n dosya yollar\u0131n\u0131 (\/.env gibi) periyodik olarak kontrol edin<\/li>\n<\/ul>\n<p>Genel VPS sertle\u015ftirme ad\u0131mlar\u0131yla birlikte d\u00fc\u015f\u00fcnmek i\u00e7in, <a href='https:\/\/www.dchost.com\/blog\/vps-sunucu-guvenligi-nasil-saglanir-kapiyi-acik-birakmadan-yasamanin-sirri\/'>VPS sunucu g\u00fcvenli\u011fi i\u00e7in haz\u0131rlad\u0131\u011f\u0131m\u0131z kapsaml\u0131 rehbere<\/a> de mutlaka bak\u0131n.<\/p>\n<h3><span id=\"Yedekleme_ve_snapshotlarda_secrets\">Yedekleme ve snapshot\u2019larda secrets<\/span><\/h3>\n<p>Gizli anahtarlar sadece canl\u0131 sunucuda de\u011fil, <strong>yedeklerde ve snapshot\u2019larda<\/strong> da bulunur. Bu nedenle:<\/p>\n<ul>\n<li>Yedek lokasyonlar\u0131n\u0131 sadece yetkili kullan\u0131c\u0131 ve servislerle s\u0131n\u0131rlay\u0131n<\/li>\n<li>M\u00fcmk\u00fcnse yedekleri <strong>\u015fifreli<\/strong> (\u00f6rne\u011fin restic, borg gibi ara\u00e7larla) al\u0131n<\/li>\n<li>Yedekleme stratejinizde retention s\u00fcresi ve eri\u015fim yetkilerini yaz\u0131l\u0131 hale getirin<\/li>\n<li>Test geri y\u00fcklemelerinde test ortam\u0131na aktard\u0131\u011f\u0131n\u0131z secrets\u2019lar\u0131n, production ile ayn\u0131 yetkilere sahip olmad\u0131\u011f\u0131ndan emin olun<\/li>\n<\/ul>\n<p>Yedek ve saklama stratejisini daha sistematik ele almak isterseniz, <a href='https:\/\/www.dchost.com\/blog\/yedekleme-stratejisi-nasil-planlanir-blog-e-ticaret-ve-saas-siteleri-icin-rpo-rto-rehberi\/'>RPO\/RTO odakl\u0131 yedekleme stratejisi rehberimizi<\/a> okuyabilirsiniz.<\/p>\n<h2><span id=\"env_yerineyaninda_ortam_degiskenleri_kullanmak\">.env yerine\/yan\u0131nda ortam de\u011fi\u015fkenleri kullanmak<\/span><\/h2>\n<h3><span id=\"systemd_servis_dosyasi_ile_environment_yonetimi\">systemd servis dosyas\u0131 ile environment y\u00f6netimi<\/span><\/h3>\n<p>Modern Linux VPS\u2019lerde \u00e7o\u011fu service <strong>systemd<\/strong> ile y\u00f6netiliyor. Uygulaman\u0131z\u0131 bir systemd servisi olarak \u00e7al\u0131\u015ft\u0131r\u0131yorsan\u0131z, secrets\u2019lar\u0131 dosya yerine do\u011frudan environment de\u011fi\u015fkeni olarak verebilirsiniz:<\/p>\n<ul>\n<li><code>\/etc\/systemd\/system\/app.service<\/code> i\u00e7inde <code>Environment=DB_PASSWORD=...<\/code> sat\u0131rlar\u0131 kullanmak<\/li>\n<li>Veya daha g\u00fcvenlisi; <code>EnvironmentFile=\/etc\/app\/app.env<\/code> ile sadece root\u2019un okuyabildi\u011fi bir dosyadan environment y\u00fcklemek<\/li>\n<\/ul>\n<p>Bu sayede uygulama dizinindeki dosyalar (\u00f6rne\u011fin deploy eden kullan\u0131c\u0131lar) ile systemd\u2019nin okudu\u011fu secrets dosyalar\u0131 aras\u0131nda ek bir ayr\u0131m katman\u0131 olu\u015fturmu\u015f olursunuz.<\/p>\n<h3><span id=\"PHP-FPM_Nodejs_ve_digerleri_icin_ortam_degiskenleri\">PHP-FPM, Node.js ve di\u011ferleri i\u00e7in ortam de\u011fi\u015fkenleri<\/span><\/h3>\n<p>Benzer \u015fekilde:<\/p>\n<ul>\n<li><strong>PHP-FPM<\/strong> havuz dosyalar\u0131nda (<code>www.conf<\/code> vb.) <code>env[VAR_NAME]=value<\/code> \u015feklinde environment tan\u0131mlayabilirsiniz<\/li>\n<li><strong>Node.js<\/strong> i\u00e7in PM2, systemd veya benzeri process manager \u00fczerinden environment set edebilirsiniz<\/li>\n<li><strong>Python<\/strong> uygulamalar\u0131 i\u00e7in gunicorn, uvicorn, systemd kombinasyonunda environment de\u011fi\u015fkenlerini servis dosyas\u0131na ta\u015f\u0131yabilirsiniz<\/li>\n<\/ul>\n<p>Avantaj\u0131, secrets\u2019lar\u0131n tek bir merkezi yap\u0131land\u0131rma katman\u0131nda tutulmas\u0131d\u0131r. Dezavantaj\u0131 ise, bu dosyalar\u0131n tipik olarak <code>\/etc<\/code> alt\u0131nda bulunmas\u0131 ve yanl\u0131\u015f d\u00fczenleme durumunda t\u00fcm servisin kalkamayabilmesidir; dikkatli de\u011fi\u015fiklik ve rollback plan\u0131 \u015fartt\u0131r.<\/p>\n<h2><span id=\"CICD_ve_deploy_surecinde_gizli_anahtar_yonetimi\">CI\/CD ve deploy s\u00fcrecinde gizli anahtar y\u00f6netimi<\/span><\/h2>\n<h3><span id=\"envexample_production_env_ve_takim_ici_pratikler\">.env.example, production .env ve tak\u0131m i\u00e7i pratikler<\/span><\/h3>\n<p>Tak\u0131m \u00e7al\u0131\u015fmas\u0131nda \u00f6nerdi\u011fimiz model:<\/p>\n<ul>\n<li>Repository\u2019de sadece <strong>.env.example<\/strong> dosyas\u0131 bulunur; ger\u00e7ek secrets i\u00e7ermez<\/li>\n<li>Geli\u015ftiriciler, kendi makinalar\u0131nda <strong>.env.local<\/strong> veya <strong>.env.development<\/strong> gibi dosyalar olu\u015fturur<\/li>\n<li>Production .env dosyas\u0131 sadece VPS \u00fczerinde bulunur; Git ile ta\u015f\u0131nmaz<\/li>\n<li>.env dosyas\u0131 i\u00e7in de\u011fi\u015fiklikler, manuel de\u011fil; yetkili ki\u015fi taraf\u0131ndan yaz\u0131l\u0131 bir prosed\u00fcre g\u00f6re yap\u0131l\u0131r (\u00f6rne\u011fin change request ile)<\/li>\n<\/ul>\n<p>Bu yakla\u015f\u0131m, hem yeni geli\u015ftiricilerin projeye h\u0131zl\u0131 adapte olmas\u0131n\u0131 sa\u011flar, hem de ger\u00e7ek secrets\u2019\u0131n repository d\u0131\u015f\u0131nda kalmas\u0131n\u0131 garanti eder.<\/p>\n<h3><span id=\"GitHub_Actions_ve_benzeri_CICD_sistemlerinde_secrets_kullanimi\">GitHub Actions ve benzeri CI\/CD sistemlerinde secrets kullan\u0131m\u0131<\/span><\/h3>\n<p>E\u011fer kodunuzu GitHub Actions veya benzeri bir CI\/CD sistemi \u00fczerinden DCHost VPS\u2019inize otomatik deploy ediyorsan\u0131z, secrets\u2019lar\u0131 <strong>CI taraf\u0131nda de\u011fil, sunucu taraf\u0131nda<\/strong> tutman\u0131z \u00e7o\u011fu durumda daha g\u00fcvenlidir. \u00d6rne\u011fin:<\/p>\n<ul>\n<li>CI pipeline yaln\u0131zca kodu build eder ve sunucuya rsync\/ssh ile g\u00f6nderir<\/li>\n<li>Sunucuda daha \u00f6nce olu\u015fturulmu\u015f .env dosyas\u0131 yerinde kal\u0131r, pipeline bu dosyay\u0131 asla dokunmaz<\/li>\n<li>Sadece ger\u00e7ekten gerekli birka\u00e7 deploy parametresi (\u00f6rne\u011fin <code>DEPLOY_SSH_KEY<\/code>) CI secrets olarak tutulur<\/li>\n<\/ul>\n<p>CI taraf\u0131nda secrets\u2019lar\u0131 nas\u0131l g\u00fcvenli y\u00f6netebilece\u011finizi ve s\u0131f\u0131r kesintiyle deploy ak\u0131\u015f\u0131 kurabilece\u011finizi g\u00f6rmek i\u00e7in, <a href='https:\/\/www.dchost.com\/blog\/github-actions-ile-vpse-otomatik-deploy-ve-zero-downtime-yayin\/'>GitHub Actions ile VPS\u2019e otomatik deploy rehberimizi<\/a> inceleyebilirsiniz.<\/p>\n<h2><span id=\"Ileri_seviye_secrets_yonetimi_Sifreleme_sops_age_ve_otesi\">\u0130leri seviye secrets y\u00f6netimi: \u015eifreleme, sops, age ve \u00f6tesi<\/span><\/h2>\n<h3><span id=\"Neden_duz_metin_env_her_zaman_yeterli_degil\">Neden d\u00fcz metin .env her zaman yeterli de\u011fil?<\/span><\/h3>\n<p>D\u00fcz metin .env dosyalar\u0131, dosya sistemi do\u011fru yap\u0131land\u0131r\u0131lm\u0131\u015fsa bir\u00e7ok senaryoda yeterli olabilir. Ancak reg\u00fclasyon bask\u0131s\u0131n\u0131n y\u00fcksek oldu\u011fu (KVKK, GDPR, finans, sa\u011fl\u0131k vb.) veya ekip ve altyap\u0131 karma\u015f\u0131kla\u015ft\u0131k\u00e7a \u015fu ihtiya\u00e7lar ortaya \u00e7\u0131kar:<\/p>\n<ul>\n<li>Secrets\u2019lar\u0131n Git repository\u2019de <strong>\u015fifreli<\/strong> tutulabilmesi<\/li>\n<li>Her de\u011fi\u015fikli\u011fin kim taraf\u0131ndan, ne zaman yap\u0131ld\u0131\u011f\u0131n\u0131n izlenebilmesi<\/li>\n<li>Farkl\u0131 ortamlar i\u00e7in (dev, test, prod) ayr\u0131 yetki ve anahtar setleri<\/li>\n<li>Otomatik rotasyon ve eski anahtarlar\u0131n g\u00fcvenli \u015fekilde devre d\u0131\u015f\u0131 b\u0131rak\u0131lmas\u0131<\/li>\n<\/ul>\n<p>Bu noktada <strong>sops + age<\/strong> gibi ara\u00e7lar, Vault benzeri merkezi secrets y\u00f6netim sistemleri veya KMS entegrasyonlar\u0131 devreye girer.<\/p>\n<h3><span id=\"sops_age_ile_sifreli_env_dosyalari\">sops + age ile \u015fifreli .env dosyalar\u0131<\/span><\/h3>\n<p>sops (Secrets OPerationS), yap\u0131land\u0131rma dosyalar\u0131n\u0131z\u0131n i\u00e7indeki gizli alanlar\u0131 \u015fifreleyip Git i\u00e7inde g\u00fcvenle saklaman\u0131z\u0131 sa\u011flayan bir ara\u00e7t\u0131r. age ise modern, kullan\u0131m\u0131 g\u00f6rece basit bir dosya \u015fifreleme format\u0131d\u0131r. Bu ikilinin tipik kullan\u0131m \u015fekli:<\/p>\n<ul>\n<li><code>.env<\/code> yerine <code>.env.enc<\/code> gibi \u015fifreli dosyalar Git\u2019te tutulur<\/li>\n<li>Deploy s\u0131ras\u0131nda, yaln\u0131zca yetkili kullan\u0131c\u0131 veya CI job\u2019\u0131 bu dosyay\u0131 \u00e7\u00f6z\u00fcp ger\u00e7ek .env dosyas\u0131n\u0131 \u00fcretir<\/li>\n<li>\u015eifreleme anahtarlar\u0131 FIDO2 donan\u0131m anahtarlar\u0131na veya ayr\u0131 KMS sistemlerine ba\u011flanabilir<\/li>\n<\/ul>\n<p>Bu konuyu pratik \u00f6rneklerle ve GitOps ak\u0131\u015flar\u0131yla daha derin ele ald\u0131\u011f\u0131m\u0131z <a href='https:\/\/www.dchost.com\/blog\/vpste-secrets-yonetimi-nasil-tatli-tatli-cozulur-sops-age-gitops-akisi-systemd-ve-rotasyon\/'>VPS\u2019te secrets y\u00f6netimi, sops + age ve rotasyon rehberimizi<\/a> mutlaka okuman\u0131z\u0131 \u00f6neririz.<\/p>\n<h2><span id=\"Uygulama_bazli_pratikler_Laravel_WordPress_Nodejs_ve_digerleri\">Uygulama bazl\u0131 pratikler: Laravel, WordPress, Node.js ve di\u011ferleri<\/span><\/h2>\n<h3><span id=\"Laravel_ve_diger_modern_PHP_frameworkleri\">Laravel ve di\u011fer modern PHP framework\u2019leri<\/span><\/h3>\n<p>Laravel ve benzeri framework\u2019ler .env kullan\u0131m\u0131n\u0131 merkezine alm\u0131\u015ft\u0131r:<\/p>\n<ul>\n<li><strong>APP_KEY<\/strong>: Uygulaman\u0131n kriptografik omurgas\u0131d\u0131r, asla payla\u015f\u0131lmamal\u0131 ve tahmin edilebilir olmamal\u0131d\u0131r<\/li>\n<li>Debug, cache, queue, mail, database gibi t\u00fcm kritik ayarlar .env \u00fczerinden y\u00f6netilir<\/li>\n<li>Production ortamda <code>php artisan config:cache<\/code> ile konfig\u00fcrasyonlar \u00f6nbelle\u011fe al\u0131n\u0131r<\/li>\n<\/ul>\n<p>\u00d6neriler:<\/p>\n<ul>\n<li>APP_KEY\u2019i hi\u00e7bir ortamda sabit, basit bir string yapmay\u0131n; Laravel\u2019in \u00fcretti\u011fi g\u00fc\u00e7l\u00fc anahtar\u0131 kullan\u0131n<\/li>\n<li>Staging ve production ortamlar\u0131nda farkl\u0131 APP_KEY kullan\u0131n; veritaban\u0131 dump\u2019lar\u0131n\u0131 staging\u2019e ta\u015f\u0131yorsan\u0131z bunu planl\u0131 yap\u0131n<\/li>\n<li>config cache ald\u0131ktan sonra .env de\u011fi\u015fikliklerinin etkili olmas\u0131 i\u00e7in yeniden deploy veya cache temizleme ad\u0131mlar\u0131n\u0131 ak\u0131\u015f\u0131n\u0131za ekleyin<\/li>\n<\/ul>\n<p>PHP taraf\u0131nda hata loglar\u0131 ve konfig\u00fcrasyonlar\u0131n do\u011fru ayarlanmas\u0131 da secrets s\u0131z\u0131nt\u0131s\u0131n\u0131 \u00f6nlemek i\u00e7in \u00f6nemlidir. Bunun i\u00e7in <a href='https:\/\/www.dchost.com\/blog\/php-hata-kayitlarini-dogru-yapilandirmak-display_errors-error_log-ve-log_level\/'>PHP hata kay\u0131tlar\u0131n\u0131 do\u011fru yap\u0131land\u0131rma rehberimize<\/a> g\u00f6z atabilirsiniz.<\/p>\n<h3><span id=\"WordPress_wp-configphp_ve_salt_anahtarlari\">WordPress: wp-config.php ve salt anahtarlar\u0131<\/span><\/h3>\n<p>WordPress d\u00fcnyas\u0131nda .env kullan\u0131m\u0131 son y\u0131llarda yayg\u0131nla\u015fsa da, h\u00e2l\u00e2 en kritik dosya <strong>wp-config.php<\/strong>\u2019dir. Bu dosyada:<\/p>\n<ul>\n<li>Veritaban\u0131 ad\u0131, kullan\u0131c\u0131 ad\u0131 ve parolas\u0131<\/li>\n<li>Tablo \u00f6n eki (<code>$table_prefix<\/code>)<\/li>\n<li>AUTH_KEY, SECURE_AUTH_KEY, LOGGED_IN_KEY, NONCE_KEY gibi salt anahtarlar\u0131<\/li>\n<\/ul>\n<p>bulunur. Bunlar\u0131n tamam\u0131 gizlidir.<\/p>\n<p>\u00d6neriler:<\/p>\n<ul>\n<li>wp-config.php dosyas\u0131n\u0131 m\u00fcmk\u00fcnse bir \u00fcst dizine ta\u015f\u0131y\u0131n; WordPress buna izin verir<\/li>\n<li>Dosya izinlerini <code>600<\/code> veya <code>640<\/code> seviyesinde tutun<\/li>\n<li>Salt anahtarlar\u0131n\u0131 periyodik olarak yenileyin; kullan\u0131c\u0131 cookie\u2019lerini ve oturumlar\u0131n\u0131 y\u00f6netirken bu de\u011fi\u015fimin etkisini planlay\u0131n<\/li>\n<\/ul>\n<p>WordPress\u2019i daha geni\u015f bir g\u00fcvenlik perspektifinden sertle\u015ftirmek i\u00e7in, <a href='https:\/\/www.dchost.com\/blog\/wordpress-guvenlik-sertlestirme-kontrol-listesi-dosya-izinleri-salt-keys-xml-rpc-ufw-fail2ban-nasil-tatli-tatli-kurulur\/'>WordPress g\u00fcvenlik sertle\u015ftirme kontrol listemiz<\/a> iyi bir tamamlay\u0131c\u0131 olacakt\u0131r.<\/p>\n<h3><span id=\"Nodejs_Python_ve_mikroservis_yapilari\">Node.js, Python ve mikroservis yap\u0131lar\u0131<\/span><\/h3>\n<p>Node.js ve Python taraf\u0131nda yayg\u0131n yakla\u015f\u0131m, <code>process.env<\/code> \u00fczerinden environment de\u011fi\u015fkenlerine eri\u015fmek veya bir dotenv k\u00fct\u00fcphanesiyle .env dosyas\u0131n\u0131 okumakt\u0131r. Mikroservis ortamlar\u0131nda tipik pratikler:<\/p>\n<ul>\n<li>Her servis i\u00e7in ayr\u0131 .env veya environment seti; servisler aras\u0131nda secrets payla\u015f\u0131m\u0131 yap\u0131lmamas\u0131<\/li>\n<li>Ortak secrets (\u00f6rne\u011fin ortak bir Redis parolas\u0131) i\u00e7in merkezi bir secrets y\u00f6netim sistemi kullanmak<\/li>\n<li>Docker kullan\u0131l\u0131yorsa, secrets\u2019lar\u0131 image i\u00e7ine g\u00f6mmemek; runtime\u2019da environment veya volume \u00fczerinden vermek<\/li>\n<\/ul>\n<p>Burada dikkat edilmesi gereken en \u00f6nemli nokta, loglama ve debug \u00e7\u0131kt\u0131lar\u0131nda secrets\u2019lar\u0131n asla a\u00e7\u0131k\u00e7a yaz\u0131lmamas\u0131d\u0131r. Masking ve redaction mekanizmalar\u0131 zorunlu olmal\u0131d\u0131r.<\/p>\n<h2><span id=\"Erisim_kontrolu_audit_ve_anahtar_rotasyonu\">Eri\u015fim kontrol\u00fc, audit ve anahtar rotasyonu<\/span><\/h2>\n<h3><span id=\"Kim_hangi_secreta_erisebilmeli\">Kim hangi secret\u2019a eri\u015febilmeli?<\/span><\/h3>\n<p>Teknik \u00f6nlemler kadar, eri\u015fim modeli de \u00f6nemlidir. Basit bir kural seti:<\/p>\n<ul>\n<li>Geli\u015ftiriciler <strong>development<\/strong> ve gerekiyorsa <strong>staging<\/strong> secrets\u2019lar\u0131na eri\u015febilir; production secrets eri\u015fimi sadece s\u0131n\u0131rl\u0131 say\u0131da ki\u015fide olmal\u0131d\u0131r<\/li>\n<li>Ops\/DevOps ekibi production secrets\u2019lara eri\u015fir, ancak bu eri\u015fim kay\u0131t alt\u0131na al\u0131n\u0131r<\/li>\n<li>Her proje i\u00e7in ayr\u0131 Linux kullan\u0131c\u0131lar\u0131 ve gruplar\u0131 kullan\u0131l\u0131r; <strong>sudo yetkileri<\/strong> sadece ger\u00e7ekten ihtiya\u00e7 duyanlarda olur<\/li>\n<\/ul>\n<p>Bunu hayata ge\u00e7irirken, <a href='https:\/\/www.dchost.com\/blog\/linux-vpste-kullanici-grup-ve-sudo-mimarisi-coklu-proje-ve-ekipler-icin-yetki-tasarimi\/'>Linux VPS\u2019te kullan\u0131c\u0131, grup ve sudo mimarisi rehberimizde<\/a> anlatt\u0131\u011f\u0131m\u0131z \u00e7oklu proje\/ekip yetki tasar\u0131m\u0131 size g\u00fc\u00e7l\u00fc bir \u00e7er\u00e7eve sunacakt\u0131r.<\/p>\n<h3><span id=\"Anahtar_rotasyonu_Ne_siklikla_nasil\">Anahtar rotasyonu: Ne s\u0131kl\u0131kla, nas\u0131l?<\/span><\/h3>\n<p>Secrets y\u00f6netiminin \u00f6nemli ama s\u0131k\u00e7a atlanan k\u0131sm\u0131, <strong>rotasyon<\/strong>dur. Yani:<\/p>\n<ul>\n<li>API anahtarlar\u0131n\u0131n, DB parolalar\u0131n\u0131n, JWT secret\u2019lar\u0131n\u0131n belirli aral\u0131klarla yenilenmesi<\/li>\n<li>Eski anahtarlar\u0131n belirli bir ge\u00e7i\u015f s\u00fcresi boyunca k\u0131s\u0131tl\u0131 da olsa \u00e7al\u0131\u015fabilir kalmas\u0131 (m\u00fcmk\u00fcnse)<\/li>\n<li>Rotasyon s\u00fcrecinin dok\u00fcmante edilmesi ve otomasyona ba\u011flanmas\u0131<\/li>\n<\/ul>\n<p>Pratik bir yol:<\/p>\n<ol>\n<li>\u00d6nce yeni secret\u2019\u0131 \u00fcretin ve uygulamaya ekleyin (m\u00fcmk\u00fcnse hem eski hem yeni secret\u2019\u0131 destekleyecek \u015fekilde)<\/li>\n<li>Deploy edip sistemin yeni secret\u2019la sorunsuz \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 do\u011frulay\u0131n<\/li>\n<li>Eski secret\u2019\u0131 ilgili sa\u011flay\u0131c\u0131 panelinden veya sistemden iptal edin<\/li>\n<li>Bu i\u015flemin tarih ve sorumlusunu i\u00e7eren k\u0131sa bir kay\u0131t olu\u015fturun<\/li>\n<\/ol>\n<p>Bu s\u00fcreci manuel de\u011fil, m\u00fcmk\u00fcn oldu\u011funca script\u2019ler ve runbook\u2019lar ile standartla\u015ft\u0131rmak uzun vadede b\u00fcy\u00fck hata ve kesinti riskini azalt\u0131r.<\/p>\n<h3><span id=\"Loglarda_ve_hata_mesajlarinda_secrets_sizintisini_onlemek\">Loglarda ve hata mesajlar\u0131nda secrets s\u0131z\u0131nt\u0131s\u0131n\u0131 \u00f6nlemek<\/span><\/h3>\n<p>En iyi dosya izinlerini ayarlasak bile, uygulama loglar\u0131nda secrets s\u0131zd\u0131r\u0131yorsak asl\u0131nda t\u00fcm eme\u011fimiz bo\u015fa gider. Dikkat edilmesi gerekenler:<\/p>\n<ul>\n<li>Hata f\u0131rlat\u0131rken veya log yazarken <strong>request header\u2019lar, Authorization header, cookie\u2019ler, form alanlar\u0131<\/strong> gibi kritik alanlar\u0131 maskeleyin<\/li>\n<li>\u00dcretim ortam\u0131nda asla tam stack trace\u2019i son kullan\u0131c\u0131ya g\u00f6stermeyin; sadece genel bir hata mesaj\u0131 verin<\/li>\n<li>Log y\u00f6netiminde, log dosyalar\u0131na kimlerin eri\u015fimi oldu\u011funu ve ne kadar s\u00fcreyle sakland\u0131\u011f\u0131n\u0131 tan\u0131mlay\u0131n<\/li>\n<\/ul>\n<p>Merkezi loglama ve alarm sistemleri kurarken, log boyutu ve gizlilik dengesini de g\u00f6zetmek gerekir; bunun i\u00e7in <a href='https:\/\/www.dchost.com\/blog\/vps-log-yonetimi-nasil-rayina-oturur-grafana-loki-promtail-ile-merkezi-loglama-tutma-sureleri-ve-alarm-kurallari\/'>VPS log y\u00f6netimi rehberimizden<\/a> yararlanabilirsiniz.<\/p>\n<h2><span id=\"DCHost_VPS_uzerinde_guvenli_secrets_mimarisini_adim_adim_kurmak\">DCHost VPS \u00fczerinde g\u00fcvenli secrets mimarisini ad\u0131m ad\u0131m kurmak<\/span><\/h2>\n<p>Buraya kadar anlatt\u0131klar\u0131m\u0131z\u0131, DCHost VPS \u00fczerinde uygulanabilir bir kontrol listesine d\u00f6n\u00fc\u015ft\u00fcrelim:<\/p>\n<ul>\n<li>Her proje i\u00e7in ayr\u0131 Linux kullan\u0131c\u0131lar\u0131 ve gruplar\u0131 tan\u0131mlay\u0131n; payla\u015f\u0131lan user hesab\u0131 kullanmay\u0131n<\/li>\n<li>Uygulama dizinini public web k\u00f6k\u00fc ve gizli config dosyalar\u0131 (\u00f6rn. .env, wp-config.php) olacak \u015fekilde katmanl\u0131 tasarlay\u0131n<\/li>\n<li>.env ve config dosyalar\u0131na <code>600<\/code> veya <code>640<\/code> izinleri verin, sahiplikleri do\u011fru kullan\u0131c\u0131 ve gruba ayarlay\u0131n<\/li>\n<li>.env dosyalar\u0131n\u0131 asla Git\u2019e commit etmeyin; sadece .env.example dosyas\u0131n\u0131 repository\u2019de tutun<\/li>\n<li>Production secrets\u2019lar\u0131 sadece VPS \u00fczerinde y\u00f6netin; CI\/CD taraf\u0131n\u0131 minimum secrets ile sade tutun<\/li>\n<li>Daha ileri ihtiya\u00e7lar i\u00e7in sops + age gibi \u015fifreli secrets y\u00f6netimi ara\u00e7lar\u0131n\u0131 devreye al\u0131n<\/li>\n<li>Anahtar rotasyonu, eri\u015fim yetkileri ve loglama politikalar\u0131n\u0131 k\u0131sa ama net bir dok\u00fcmana ba\u011flay\u0131n<\/li>\n<\/ul>\n<p>DCHost olarak amac\u0131m\u0131z sadece h\u0131zl\u0131 ve g\u00fc\u00e7l\u00fc VPS altyap\u0131s\u0131 sunmak de\u011fil; \u00fczerinde \u00e7al\u0131\u015fan uygulamalar\u0131n\u0131z\u0131n <strong>g\u00fcvenli, denetlenebilir ve s\u00fcrd\u00fcr\u00fclebilir<\/strong> bir yap\u0131da kalmas\u0131n\u0131 sa\u011flamak. Mevcut DCHost VPS\u2019inizde .env ve gizli anahtar y\u00f6netiminin ne durumda oldu\u011funu birlikte g\u00f6zden ge\u00e7irmek veya yeni bir proje i\u00e7in en ba\u015ftan do\u011fru mimariyi kurmak isterseniz, ekibimizle ileti\u015fime ge\u00e7ebilir, ihtiya\u00e7lar\u0131n\u0131za \u00f6zel bir yol haritas\u0131 \u00e7\u0131karabiliriz.<\/p>\n<p>Do\u011fru secrets mimarisini bir kez kurdu\u011funuzda, yeni projelerde tekrar tekrar kullanabilece\u011finiz sa\u011flam bir temel elde etmi\u015f olursunuz. B\u00f6ylece hem g\u00fcvenlik denetimlerinde hem de ger\u00e7ek hayattaki sald\u0131r\u0131larda, altyap\u0131n\u0131z\u0131n bu kritik katman\u0131na g\u00fcvenle bakabilirsiniz.<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>\u0130&ccedil;indekiler1 VPS\u2019te .env ve gizli anahtar y\u00f6netimi neden bu kadar kritik?2 Hangi veriler ger\u00e7ekten gizli? .env\u2019de ne tutulur, ne tutulmaz?2.1 Gizli say\u0131lmas\u0131 gereken tipik bilgiler2.2 .env dosyas\u0131na yazmaman\u0131z gerekenler3 .env yakla\u015f\u0131m\u0131: G\u00fc\u00e7l\u00fc yanlar\u0131 ve riskleri3.1 .env nedir, nas\u0131l \u00e7al\u0131\u015f\u0131r?3.2 Yerel geli\u015ftirme vs VPS \u00fcretim ortam\u01313.3 .env dosyas\u0131n\u0131 asla Git deposuna koymamak4 VPS \u00fczerinde g\u00fcvenli .env [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3942,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26],"tags":[],"class_list":["post-3941","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-teknoloji"],"_links":{"self":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/3941","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/comments?post=3941"}],"version-history":[{"count":0,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/posts\/3941\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media\/3942"}],"wp:attachment":[{"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/media?parent=3941"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/categories?post=3941"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dchost.com\/blog\/wp-json\/wp\/v2\/tags?post=3941"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}