1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3 <html xmlns="http://www.w3.org/1999/xhtml" lang="tr" xml:lang="tr"><head><!--
4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
5 This file is generated from xml source: DO NOT EDIT
6 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
8 <title>Güvenlik İpuçları - Apache HTTP Sunucusu</title>
9 <link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
10 <link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
11 <link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
12 <link href="../images/favicon.ico" rel="shortcut icon" /></head>
13 <body id="manual-page"><div id="page-header">
14 <p class="menu"><a href="../mod/">Modüller</a> | <a href="../mod/directives.html">Yönergeler</a> | <a href="../faq/">SSS</a> | <a href="../glossary.html">Terimler</a> | <a href="../sitemap.html">Site Haritası</a></p>
15 <p class="apache">Apache HTTP Sunucusu Sürüm 2.0</p>
16 <img alt="" src="../images/feather.gif" /></div>
17 <div class="up"><a href="./"><img title="<-" alt="<-" src="../images/left.gif" /></a></div>
19 <a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Sunucusu</a> > <a href="http://httpd.apache.org/docs/">Belgeleme</a> > <a href="../">Sürüm 2.0</a> > <a href="./">Çeşitli Belgeler</a></div><div id="page-content"><div id="preamble"><h1>Güvenlik İpuçları</h1>
21 <p><span>Mevcut Diller: </span><a href="../en/misc/security_tips.html" hreflang="en" rel="alternate" title="English"> en </a> |
22 <a href="../ko/misc/security_tips.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
23 <a href="../tr/misc/security_tips.html" title="Türkçe"> tr </a></p>
26 <p>Bir HTTP Sunucusunu ayarlarken dikkat edilmesi gerekenler ve bazı
27 ipuçları. Öneriler kısmen Apache’ye özel kısmen de genel olacaktır.</p>
29 <div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#uptodate">Güncel Tutma</a></li>
30 <li><img alt="" src="../images/down.gif" /> <a href="#serverroot"><code>ServerRoot</code> Dizinlerinin İzinleri</a></li>
31 <li><img alt="" src="../images/down.gif" /> <a href="#ssi">Sunucu Taraflı İçerik Yerleştirme</a></li>
32 <li><img alt="" src="../images/down.gif" /> <a href="#cgi">CGI Genelinde</a></li>
33 <li><img alt="" src="../images/down.gif" /> <a href="#nsaliasedcgi"><code>ScriptAlias</code>’sız CGI</a></li>
34 <li><img alt="" src="../images/down.gif" /> <a href="#saliasedcgi"><code>ScriptAlias</code>’lı CGI</a></li>
35 <li><img alt="" src="../images/down.gif" /> <a href="#dynamic">Devingen içerikli kaynaklar</a></li>
36 <li><img alt="" src="../images/down.gif" /> <a href="#systemsettings">Sistem Ayarlarının Korunması</a></li>
37 <li><img alt="" src="../images/down.gif" /> <a href="#protectserverfiles">Sunucu dosyalarının öntanımlı olarak korunması</a></li>
38 <li><img alt="" src="../images/down.gif" /> <a href="#watchyourlogs">Günlüklerin İzlenmesi</a></li>
40 <div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
42 <h2><a name="uptodate" id="uptodate">Güncel Tutma</a></h2>
44 <p>Apache HTTP Sunucusu iyi bir güvenlik sicilinin yanında güvenlik
45 konularıyla oldukça ilgili bir geliştirici topluluğuna sahiptir. Fakat,
46 bir yazılımın dağıtılmasının ardından küçük ya da büyük bazı sorunların
47 keşfedilmesi kaçınılmazdır. Bu sebeple, yazılım güncellemelerinden
48 haberdar olmak oldukça önem kazanır. HTTP sunucunuzu doğrudan
49 Apache’den temin ediyorsanız yeni sürümler ve güvenlik güncellemeleri
50 ile ilgili bilgileri tam zamanında alabilmek için <a href="http://httpd.apache.org/lists.html#http-announce">Apache
51 HTTP Sunucusu Duyuru Listesi</a>ne mutlaka üye olmanızı öneririz.
52 Apache yazılımının üçüncü parti dağıtımlarını yapanların da buna benzer
53 hizmetleri vardır.</p>
55 <p>Şüphesiz, bir HTTP sunucusu, sunucu kodunda bir sorun olmasa da
56 tehlike altındadır. Eklenti kodları, CGI betikleri hatta işletim
57 sisteminden kaynaklanan sorunlar nedeniyle bu ortaya çıkabilir. Bu
58 bakımdan, sisteminizdeki tüm yazılımların sorunları ve güncellemeleri
59 hakkında bilgi sahibi olmalısınız.</p>
61 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
63 <h2><a name="serverroot" id="serverroot"><code>ServerRoot</code> Dizinlerinin İzinleri</a></h2>
66 <p>Normalde, Apache root kullanıcı tarafından başlatılır ve hizmetleri
67 sunarken <code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> yönergesi
68 tarafından tanımlanan kullanıcının aidiyetinde çalışır. Root tarafından
69 çalıştırılan komutlarda olduğu gibi, root olmayan kullanıcıların
70 yapacakları değişikliklerden korunmak konusunda da dikkatli
71 olmalısınız. Dosyaların sadece root tarafından yazılabilir olmasını
72 sağlamak yeterli değildir, bu dizinler ve üst dizinler için de
73 yapılmalıdır. Örneğin, sunucu kök dizininin
74 <code>/usr/local/apache</code> olmasına karar verdiyseniz, bu dizini
75 root olarak şöyle oluşturmanız önerilir:</p>
77 <div class="example"><p><code>
78 mkdir /usr/local/apache <br />
79 cd /usr/local/apache <br />
80 mkdir bin conf logs <br />
81 chown 0 . bin conf logs <br />
82 chgrp 0 . bin conf logs <br />
83 chmod 755 . bin conf logs
86 <p><code>/</code>, <code>/usr</code>, <code>/usr/local</code>
87 dizinlerinde sadece root tarafından değişiklik yapılabileceği kabul
88 edilir. <code class="program"><a href="../programs/httpd.html">httpd</a></code> çalıştırılabilirini kurarken de benzer
89 bir önlemin alındığından emin olmalısınız:</p>
91 <div class="example"><p><code>
92 cp httpd /usr/local/apache/bin <br />
93 chown 0 /usr/local/apache/bin/httpd <br />
94 chgrp 0 /usr/local/apache/bin/httpd <br />
95 chmod 511 /usr/local/apache/bin/httpd
98 <p>Diğer kullanıcıların değişiklik yapabileceği bir dizin olarak bir
99 <code>htdocs</code> dizini oluşturabilirsiniz. Bu dizine root
100 tarafından çalıştırılabilecek dosyalar konulmamalı ve burada root
101 tarafından hiçbir dosya oluşturulmamalıdır.</p>
103 <p>Diğer kullanıcılara root tarafından yazılabilen ve çalıştırılabilen
104 dosyalarda değişiklik yapma hakkını tanırsanız, onlara root
105 kullanıcısını ele geçirilebilme hakkını da tanımış olursunuz. Örneğin,
106 biri <code class="program"><a href="../programs/httpd.html">httpd</a></code> çalıştırılabilirini zararlı bir programla
107 değiştirebilir ve o programı tekrar çalıştırdığınız sırada program
108 yapacağını yapmış olur. Günlükleri kaydettiğiniz dizin herkes
109 tarafından yazılabilen bir dizin olduğu takdirde, birileri bir günlük
110 dosyasını bir sistem dosyasına sembolik bağ haline getirerek root
111 kullanıcısının bu dosyaya ilgisiz şeyler yazmasına sebep olabilir.
112 Günlüklerin dosyaları herkes tarafından yazılabilir olduğu takdirde ise
113 birileri dosyaya yanıltıcı veriler girebilir.</p>
114 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
115 <div class="section">
116 <h2><a name="ssi" id="ssi">Sunucu Taraflı İçerik Yerleştirme</a></h2>
119 <p>SSI sayfaları bir sunucu yöneticisi açısından çeşitli olası risklere
120 kaynaklık edebilir.</p>
122 <p>İlk risk, sunucu yükündeki artış olasılığıdır. Tüm SSI sayfaları, SSI
123 kodu içersin içermesin Apache tarafından çözümlenir. Bu küçük bir artış
124 gibi görünürse de bir paylaşımlı sunucu ortamında önemli bir yük haline
127 <p>SSI sayfaları, CGI betikleriyle ilgili riskleri de taşır. <code>exec
128 cmd</code> elemanı kullanılarak bir SSI sayfasından herhangi bir CGI
129 betiğini veya bir sistem programını Apache’nin aidiyetinde olduğu
130 kullanıcının yetkisiyle çalıştırmak mümkündür.</p>
132 <p>SSI sayfalarının yararlı özelliklerinden yararlanırken güvenliğini de
133 arttırmanın bazı yolları vardır.</p>
135 <p>Sunucu yöneticisi, bir başıbozuk SSI sayfasının sebep olabileceği
136 zararları bertaraf etmek için <a href="#cgi">CGI Genelinde</a>
137 bölümünde açıklandığı gibi <a href="../suexec.html">suexec</a>’i etkin
140 <p>SSI sayfalarını <code>.html</code> veya <code>.htm</code>
141 uzantılarıyla etkinleştirmek tehlikeli olabilir. Bu özellikle
142 paylaşımlı ve yüksek trafikli bir sunucu ortamında önemlidir. SSI
143 sayfalarını normal sayfalardan farklı olarak <code>.shtml</code> gibi
144 bildik bir uzantıyla etkinleştirmek gerekir. Bu, sunucu yükünü asgari
145 düzeyde tutmaya ve risk yönetimini kolaylaştırmaya yarar.</p>
147 <p>Diğer bir çözüm de SSI sayfalarından betik ve program çalıştırmayı
148 iptal etmektir. Bu, <code class="directive"><a href="../mod/core.html#options">Options</a></code>
149 yönergesine değer olarak <code>Includes</code> yerine
150 <code>IncludesNOEXEC</code> vererek sağlanır. Ancak, eğer betiklerin
151 bulunduğu dizinde <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>
152 yönergesiyle CGI betiklerinin çalışması mümkün kılınmışsa,
153 kullanıcıların <code><--#include virtual="..." --></code> ile bu
154 betikleri çalıştırabileceklerine dikkat ediniz.</p>
156 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
157 <div class="section">
158 <h2><a name="cgi" id="cgi">CGI Genelinde</a></h2>
161 <p>Herşeyden önce ya CGI betiğini/programını yazanlara ya da kendinizin
162 CGI'deki güvenlik açıklarını (ister kasıtlı olsun ister tesadüfi)
163 yakalama becerinize güvenmek zorundasınız. CGI betikleri esasen
164 sisteminizdeki komutları site kullanıcılarının izinleriyle
165 çalıştırırlar. Bu bakımdan dikkatle denenmedikleri takdirde oldukça
166 tehlikeli olabilirler.</p>
168 <p>CGI betiklerinin hepsi aynı kullanıcının aidiyetinde çalışırsa diğer
169 betiklerle aralarında çelişkilerin ortaya çıkması ister istemez
170 kaçınılmazdır. Örneğin A kullanıcısının B kullanıcısına garezi varsa
171 bir betik yazıp B’nin CGI veritabanını silebilir. Bu gibi durumların
172 ortaya çıkmaması için betiklerin farklı kullanıcıların aidiyetlerinde
173 çalışmasını sağlayan ve 1.2 sürümünden beri Apache ile dağıtılan <a href="../suexec.html">suEXEC</a> diye bir program vardır. Başka bir yol
174 da <a href="http://cgiwrap.unixtools.org/">CGIWrap</a> kullanmaktır.</p>
176 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
177 <div class="section">
178 <h2><a name="nsaliasedcgi" id="nsaliasedcgi"><code>ScriptAlias</code>’sız CGI</a></h2>
181 <p>Kullanıcıların sitenin her yerinde CGI betiklerini çalıştırmalarına
182 izin vermek ancak şu koşullarda mümkün olabilir:</p>
185 <li>Kullanıcılarınızın kasıtlı ya da kasıtsız sistemi saldırıya açık
186 hale getirecek betikler yazmayacaklarına tam güveniniz vardır.</li>
187 <li>Sitenizin güvenliği zaten o kadar kötüdür ki, bir delik daha
188 açılmasının mahzuru yoktur.</li>
189 <li>Sitenizin sizden başka kullanıcısı yoktur ve sunucunuzu sizden
190 başka hiç kimsenin ziyaret etmesi mümkün değildir.</li>
193 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
194 <div class="section">
195 <h2><a name="saliasedcgi" id="saliasedcgi"><code>ScriptAlias</code>’lı CGI</a></h2>
198 <p>CGI’yi belli dizinlerle sınırlamak yöneticiye bu dizinlerde daha iyi
199 denetim imkanı sağlar. Bu kaçınılmaz olarak <code class="directive"><a href="../mod/mod_alias.html#scriptalias">ScriptAlias</a></code>’sız CGI’den çok daha
200 güvenlidir, ancak bu dizinlere yazma hakkı olan kullanıcılarınız
201 güvenilir kişiler olması ve site yöneticisinin de olası güvenlik
202 açıklarına karşı CGI betiklerini ve programlarını denemeye istekli
205 <p>Çoğu site yöneticisi <code>ScriptAlias</code>’sız CGI yerine bu
208 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
209 <div class="section">
210 <h2><a name="dynamic" id="dynamic">Devingen içerikli kaynaklar</a></h2>
213 <p>Sunucunun bir parçası gibi çalışan, <code>mod_php</code>,
214 <code>mod_perl</code>, <code>mod_tcl</code> ve <code>mod_python</code>
215 gibi gömülü betik çalıştırma seçenekleri sunucuyu çalıştıran
216 kullanıcının aidiyetinde çalışırlar (<code class="directive"><a href="../mod/mpm_common.html#user">User</a></code> yönergesine bakınız). Bu bakımdan bu betik
217 yorumlayıcılar tarafından çalıştırılan betikler, sunucu kullanıcısının
218 eriştiği herşeye erişebilirler. Bazı betik yorumlayıcıların getirdiği
219 bazı sınırlamalar varsa da bunlara pek güvenmemek, gerekli sınamaları
220 yine de yapmak gerekir.</p>
222 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
223 <div class="section">
224 <h2><a name="systemsettings" id="systemsettings">Sistem Ayarlarının Korunması</a></h2>
227 <p>Güvenliği gerçekten sıkı tutmak istiyorsanız, kullanıcılarınızın
228 yapılandırmanızdaki güvenlik ayarlarını geçersiz kılmak için
229 <code>.htaccess</code> dosyalarını kullanabilmelerinin de önüne
230 geçmelisiniz. Bunu yapmanın tek bir yolu vardır.</p>
232 <p>Sunucu yapılandırma dosyanıza şunu yerleştirin:</p>
234 <div class="example"><p><code>
236 <span class="indent">
242 <p>Böylece, belli dizinlerde özellikle etkinleştirilmedikçe bütün
243 dizinlerde <code>.htaccess</code> dosyalarının kullanımını engellemiş
246 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
247 <div class="section">
248 <h2><a name="protectserverfiles" id="protectserverfiles">Sunucu dosyalarının öntanımlı olarak korunması</a></h2>
251 <p>Apache’nin ister istemez yanlış anlaşılan yönlerinden biri öntanımlı erişim özelliğidir. Yani siz aksine bir şeyler yapmadıkça, sunucu normal URL eşleme kurallarını kullanarak bir dosyayı bulabildiği sürece onu istemciye sunacaktır.</p>
253 <p>Örneğin, aşağıdaki durumu ele alalım:</p>
255 <div class="example"><p><code>
256 # cd /; ln -s / public_html
259 <p>Ve, tarayıcınıza <code>http://localhost/~root/</code> yazın.</p>
261 <p>Böylece, istemcilerin tüm dosya sisteminizi gezmelerine izin vermiş olursunuz. Bu işlemin sonuçlarının önünü almak için sunucu yapılandırma dosyanıza şunları yazın:</p>
263 <div class="example"><p><code>
265 <span class="indent">
266 Order Deny,Allow <br />
272 <p>Bu suretle, dosya sisteminize öntanımlı erişimi yasaklamış olursunuz. Erişime izin vermek istediğiniz dizinler için uygun <code class="directive"><a href="../mod/core.html#directory">Directory</a></code> bölümleri eklemeniz yeterli olacaktır. Örnek:</p>
274 <div class="example"><p><code>
275 <Directory /usr/users/*/public_html>
276 <span class="indent">
277 Order Deny,Allow <br />
280 </Directory> <br />
281 <Directory /usr/local/httpd>
282 <span class="indent">
283 Order Deny,Allow <br />
289 <p><code class="directive"><a href="../mod/core.html#location">Location</a></code> ve <code class="directive"><a href="../mod/core.html#directory">Directory</a></code> yönergelerinin etkileşimine de özellikle önem vermelisiniz; örneğin <code><Directory /></code> erişimi yasaklarken bir <code><Location /></code> yönergesi bunu ortadan kaldırabilir.</p>
291 <p><code class="directive"><a href="../mod/mod_userdir.html#userdir">UserDir</a></code> yönergesi de size buna benzer bir oyun oynayabilir; yönergeye <code>./</code> atamasını yaparsanız, root kullanıcısı söz konusu olduğunda yukarıda ilk örnekteki durumla karşılaşırız. Apache 1.3 veya üstünü kullanıyorsanız, sunucu yapılandırma dosyanızda aşağıdaki satırın mutlaka bulunmasını öneririz:</p>
293 <div class="example"><p><code>
294 UserDir disabled root
297 </div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
298 <div class="section">
299 <h2><a name="watchyourlogs" id="watchyourlogs">Günlüklerin İzlenmesi</a></h2>
302 <p>Sunucunuzda olup biteni günü gününe bilmek istiyorsanız <a href="../logs.html">günlük dosyalarına</a> bakmalısınız. Günlük dosyaları sadece olup biteni raporlamakla kalmaz, sunucunuza ne tür saldırılar yapıldığını ve güvenlik seviyenizin yeterli olup olmadığını anlamanızı da sağlarlar.</p>
304 <p>Bazı örnekler:</p>
306 <div class="example"><p><code>
307 grep -c "/jsp/source.jsp?/jsp/ /jsp/source.jsp??" access_log <br />
308 grep "client denied" error_log | tail -n 10
311 <p>İlk örnek, <a href="http://online.securityfocus.com/bid/4876/info/">Apache Tomcat
312 Source.JSP Bozuk İstek Bilgilerini İfşa Açığı</a>nı istismar etmeyi deneyen saldırıların sayısını verirken ikinci örnek, reddedilen son on istemciyi listeler; örnek:</p>
314 <div class="example"><p><code>
315 [Thu Jul 11 17:18:39 2002] [error] [client falan.filan.dom] client denied
316 by server configuration: /usr/local/apache/htdocs/.htpasswd
319 <p>Gördüğünüz gibi günlük dosyaları sadece ne olup bittiğini raporlar, bu bakımdan eğer istemci <code>.htpasswd</code> dosyasına erişebiliyorsa <a href="../logs.html#accesslog">erişim günlüğünüzde</a> şuna benzer bir kayıt görürsünüz:</p>
321 <div class="example"><p><code>
322 falan.filan.dom - - [12/Jul/2002:01:59:13 +0200] "GET /.htpasswd HTTP/1.1"
325 <p>Bu, sunucu yapılandırma dosyanızda aşağıdaki yapılandırmayı iptal ettiğiniz anlamına gelir:</p>
327 <div class="example"><p><code>
328 <Files ~ "^\.ht">
329 <span class="indent">
330 Order allow,deny <br />
337 <div class="bottomlang">
338 <p><span>Mevcut Diller: </span><a href="../en/misc/security_tips.html" hreflang="en" rel="alternate" title="English"> en </a> |
339 <a href="../ko/misc/security_tips.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> |
340 <a href="../tr/misc/security_tips.html" title="Türkçe"> tr </a></p>
341 </div><div id="footer">
342 <p class="apache">Copyright 2009 The Apache Software Foundation.<br /><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a> altında lisanslıdır.</p>
343 <p class="menu"><a href="../mod/">Modüller</a> | <a href="../mod/directives.html">Yönergeler</a> | <a href="../faq/">SSS</a> | <a href="../glossary.html">Terimler</a> | <a href="../sitemap.html">Site Haritası</a></p></div>