Apache HTTP Sunucusu Sürüm 2.4

SuEXEC özelliği, Apache HTTP Sunucusu kullanıcılarına CGI ve SSI programlarını sunucunun aidiyetinde çalıştığı kullanıcıdan farklı bir kullanıcının aidiyetinde çalıştırma olanağı verir. Normalde, CGI ve SSI programlarını çalıştıranla sunucuyu çalıştıran aynı kullanıcıdır.
Gerektiği gibi kullanıldığında bu özellik, kullanıcılara CGI ve SSI programlarını çalıştırma ve geliştirmeye izin vermekle ortaya çıkan güvenlik risklerini azaltır. Bununla birlikte, suEXEC gerektiği gibi yapılandırılmadığı takdirde bazı sorunlara yol açabilir ve bilgisayar güvenliğinizde yeni delikler ortaya çıkmasına sebep olabilir. Güvenlikle ilgili mevcut sorunlarla başa çıkmada ve setuid root programları yönetmekte bilgi ve deneyim sahibi değilseniz suEXEC kullanmayı kesinlikle düşünmemenizi öneririz.

 Başlamadan önce
 Başlamadan önce SuEXEC Güvenlik Modeli
 SuEXEC Güvenlik Modeli suEXEC’in Yapılandırılması ve Kurulumu
 suEXEC’in Yapılandırılması ve Kurulumu suEXEC’in etkin kılınması ve iptal edilmesi
 suEXEC’in etkin kılınması ve iptal edilmesi SuEXEC’in kullanımı
 SuEXEC’in kullanımı SuEXEC ve hata ayıklama
 SuEXEC ve hata ayıklama Uyarılar ve Örnekler
 Uyarılar ve ÖrneklerBelgeye balıklama dalmadan önce, suexec'i kullanacağınız ortam ve kendiniz hakkında yapılmış çeşitli kabuller hakkında bilgi sahibi olmalısınız.
Öncelikle, üzerinde setuid va setgid işlemlerinin yapılabildiği Unix türevi bir işletim sistemi kullandığınızı varsayıyoruz. Tüm komut örnekleri buna dayanarak verilmiştir. Bu desteğe sahip başka platformlar varsa onlardaki yapılandırma burada anlattığımız yapılandırmadan farklı olabilir.
İkinci olarak, bilgisayarınızın güvenliği ve yönetimi ile ilgili bazı temel kavramları bildiğinizi kabul ediyoruz. Buna setuid/setgid işlemlerinin sisteminiz ve güvenlik seviyesi üzerindeki etkilerini bilmek dahildir.
Üçüncü olarak, suEXEC kodunun değiştirilmemiş bir sürümünü kullandığınızı varsayıyoruz. Tüm suEXEC kodu, geliştiricilerin yanında sayısız beta kullanıcısı tarafından dikkatle incelenmiş ve denenmiştir. Kodların hem basit hem de sağlam bir şekilde güvenli olması için gerekli tüm önlemler alınmıştır. Bu kodun değiştirilmesi beklenmedik sorunlara ve yeni güvenlik risklerine yol açabilir. Özellikle güvenlikle ilgili programlarda deneyimli değilseniz suEXEC kodunda kesinlikle bir değişiklik yapmamalısınız. Değişiklik yaparsanız kodlarınızı gözden geçirmek ve tartışmak üzere Apache HTTP Sunucusu geliştirme ekibi ile paylaşmanızı öneririz.
Dördüncü ve son olarak, Apache HTTP Sunucusu geliştirme ekibinin suEXEC’i öntanımlı httpd kurulumunun bir parçası yapmama kararından bahsetmek gerekir. Bunun sonucu olarak, suEXEC yapılandırması sistem yöneticisinin ayrıntılı bir incelemesini gerektirir. Gerekli incelemeden sonra yönetici tarafından suEXEC yapılandırma seçeneklerine karar verilip, normal yollardan sisteme kurulumu yapılır. Bu seçeneklerin belirlenmesi, suEXEC işlevselliğinin kullanımı sırasında sistem güvenliğini gerektiği gibi sağlamak için yönetici tarafından dikkatle saptanmayı gerektirir. Bu sürecin ayrıntılarının yöneticiye bırakılma sebebi, suEXEC kurulumunu, suEXEC’i dikkatle kullanacak yeterliliğe sahip olanlarla sınırlama beklentimizdir.
Hala bizimle misiniz? Evet mi? Pekala, o halde devam!
SuEXEC yapılandırması ve kurulumuna girişmeden önce biraz da gerçekleşmesini istediğiniz güvenlik modelinin ayrıntıları üzerinde duralım. Böylece, suEXEC’in içinde olup bitenleri ve sisteminizin güvenliği için alınacak önlemleri daha iyi anlayabilirsiniz.
suEXEC işlevselliği, Apache HTTP Sunucusu tarafından gerektiği takdirde artalanda çalıştırılan bir setuid programa dayanır. Bu program, bir CGI veya SSI betiğine bir HTTP isteği yapıldığı zaman, bu betiği, yöneticinin ana sunucunun aidiyetinde çalıştığı kullanıcıdan farklı olarak seçtiği bir kullanıcının aidiyetinde çalıştırmak için çağrılır. Böyle bir istek geldiğinde, Apache httpd artalandaki setuid programına, HTTP isteği yapılan programın ismiyle beraber aidiyetinde çalışacağı kullanıcı ve grup kimliklerini de aktarır.
Artalanda çalıştırılan setuid program başarıyı ve başarısızlığı aşağıdaki süreci izleyerek saptar. Bunlardan herhangi biri başarısız olursa program başarısızlık durumunu günlüğe kaydeder ve bir hata vererek çıkar. Aksi takdirde çalışmaya devam eder.
Bu, setuid programı çalıştıran kullanıcının sistemin gerçek bir kullanıcısı olduğunudan emin olunmasını sağlar.
Apache HTTP Sunucusunun artalanda çağırdığı setuid program ancak yeterli sayıda argüman sağlandığı takdirde çalışacaktır. Argümanların sayısını ve sırasını Apache HTTP sunucusu bilir. Eğer setuid program yeterli sayıda argümanla çağrılmamışsa ya kendisinde bir değişiklik yapılmıştır ya da kurulu Apache httpd çalıştırılabilirinin suEXEC ile ilgili kısmında yanlış giden bir şeyler vardır.
Sadece tek bir kullanıcı (Apache’nin aidiyetinde çalıştığı kullanıcı) bu programı çalıştırmaya yetkilidir.
Hedef CGI veya SSI programının dosya yolu '/' veya
          '..' ile başlıyor  mu? Buna izin verilmez. Hedef CGI veya SSI
          programı suEXEC’in belge kök dizininde yer almalıdır (aşağıda
          --with-suexec-docroot=DİZİN seçeneğine
          bakınız).
Hedef kullanıcı mevcut mu?
Hedef grup mevcut mu?
root değil, değil mi?
        Mevcut durumda, root kullanıcısının
          CGI/SSI programlarını çalıştırmasına izin verilmemektedir.
Asgari kullanıcı numarası yapılandırma sırasında belirtilir. Böylece CGI/SSI programlarını çalıştırmasına izin verilecek olası en düşük kullanıcı numarasını belirlemeniz mümkün kılınmıştır. Bu bazı “sistem” hesaplarını devreden çıkarmak için yararlıdır.
root  değil, değil mi?
        root grubunun CGI/SSI
          programlarını çalıştırmasına izin verilmemektedir.
Asgari grup numarası yapılandırma sırasında belirtilir. Böylece CGI/SSI programlarını çalıştırmasına izin verilecek olası en düşük grup numarasını belirlemeniz mümkün kılınmıştır. Bu bazı “sistem” hesaplarını devreden çıkarmak için yararlıdır.
Bu noktadan itibaren program setuid ve setgid çağrıları üzerinden hedef kullanıcı ve grubun aidiyetine geçer. Erişim grubu listesi de ayrıca kullanıcının üyesi olduğu tüm gruplara genişletilir.
Dizin mevcut değilse dosyaları da içeremez. Hedef dizine geçemiyorsak bu, dizin mevcut olmadığından olabilir.
İstek sunucunun normal bir bölümü için yapılmış
          olsa da istenen dizin acaba suEXEC’in belge kök dizini altında mı?
          Yani, istenen dizin, suEXEC’in aidiyetinde çalıştığı kullanıcının
          ev dizini altında bulunan, UserDir ile belirtilen dizinin altında mı? (suEXEC’in yapılandırma seçeneklerine
          bakınız).
Başkaları da yazabilsin diye bir dizin açmıyoruz; dizin içeriğini sadece sahibi değiştirebilmelidir.
Mevcut değilse çalıştırılamaz.
Hedef CGI/SSI programının dosyasına sahibinden başka kimsenin bir şeyler yazmasını istemeyiz.
UID/GID‘i tekrar değiştirecek programlar çalıştırmayı istemeyiz.
Hedef kullanıcı dosyanın sahibi mi?
suEXEC, sürecin çalışacağı ortama güvenli bir program çalıştırma yolu sağlamaktan başka, yapılandırma sırasında oluşturulan güvenli ortam değişkenleri listesinde isimleri bulunan ortam değişkenlerinden başkasını aktarmayacaktır.
Burası suEXEC’in bitip CGI/SSI programının başladığı yerdir.
Bu süreç suEXEC güvenlik modelinin standart işlemlerini oluşturur. Biraz zorlayıcı ve CGI/SSI tasarımına yeni kurallar ve sınırlamalar getiriyor olsa da düşünülen güvenliği adım adım sağlayacak şekilde tasarlanmıştır.
Düzgün bir suEXEC yapılandırmasının hangi güvenlik risklerinden kurtulmayı sağladığı ve bu güvenlik modelinin sunucu yapılandırmasıyla ilgili sorumluluklarınızı nasıl sınırlayabildiği hakkında daha ayrıntılı bilgi edinmek için bu belgenin "Uyarılar ve Örnekler" bölümüne bakınız.
Eğlence başlıyor.
suEXEC yapılandırma seçenekleri
    
--enable-suexec--enable-suexec seçeneğinin yanında en azından bir tane
        de --with-suexec-xxxxx seçeneği belirtilmiş
        olmalıdır.--with-suexec-bin=YOLsuexec çalıştırılabilirinin
        bulunduğu yer sunucu koduna yazılır. Bu seçenekle öntanımlı yol
        değiştirilmiş olur. Örnek:--with-suexec-bin=/usr/sbin/suexec--with-suexec-caller=KULLANICI--with-suexec-userdir=DİZİNKullanıcıların ev dizinleri altında suEXEC’in erişmesine izin
        verilen alt dizinin yerini tanımlar. Bu dizin altında suEXEC
        kullanıcısı tarafından çalıştırılacak tüm programlar "güvenilir"
        olmalıdır. Eğer “basit” bir UserDir yönergesi kullanıyorsanız ( içinde “*”
        bulunmayan), bunun aynı dizin olması gerekir. Eğer burada belirtilen
        dizin, passwd dosyasında kullanıcı için belirtilmiş
        dizinin altında UserDir
        yönergesinde belirtilen dizin olmadığı takdirde suEXEC işini
        gerektiği gibi yapmayacaktır. Öntanımlı değer
        public_html’dir.
Eğer, sanal konaklarınızın herbiri farklı UserDir yönergeleri içeriyorsa
        burada belirtilecek dizinin üst dizininin hepsinde aynı olması
        gerekir. Aksi takdirde, "~kullanıcı"
        istekleri düzgün çalışmayacaktır.
--with-suexec-docroot=DİZİNUserDir’lardan başka) suEXEC için
        kullanılacak tek hiyerarşi olacaktır. Öntanımlı dizin sonuna
        "/htdocs" eklenmiş --datadir dizinidir.
        Yani, seçeneği "--datadir=/home/apache" olarak
        belirtmişseniz suEXEC çalıştırıcısı için belge kök dizini
        "/home/apache/htdocs" olur.--with-suexec-uidmin=UID--with-suexec-gidmin=GID--with-suexec-logfile=DOSYAsuexec_log" olup yeri (--logfiledir
        seçeneği ile belirtilen) günlük dosyaları dizinidir.--with-suexec-safepath=YOLPATH
        ortam değişkeninin değerini tanımlar.
        "/usr/local/bin:/usr/bin:/bin" öntanımlıdır.SuEXEC özelliğini --enable-suexec seçeneği ile
        etkinleştirdiyseniz make komutunu verdiğinizde httpd
        ile birlikte suexec çalıştırılabilir dosyası da
        derlenecektir.
Tüm bileşenler derlendikten sonra make install komutunu
        vererek kurulumu tamamlayabilirsiniz. suexec
        çalıştırılabilir dosyası --sbindir seçeneği ile
        tanımlanan dizine kurulacaktır; öntanımlı yeri
        /usr/local/apache2/bin/ dizinidir.
Kurulum adımında root yetkisine sahip
        olmanız gerektiğini unutmayın. Çalıştırıcıya kullanıcı kimliğinin
        atanabilmesi ve dosyanın sahibi olan kullanıcı kimliği ile
        çalıştırılabilmesini mümkün kılan bitinin etkin kılınabilmesi için
        kurulumun root tarafından yapılması
        önemlidir.
SuEXEC çalıştırıcısı kendini çalıştıran kullanıcının
        configure betiğine
        --with-suexec-caller seçeneği ile belirtilen kullanıcı
        olup olmadığına bakacaksa da, bu sınamanın da bir sistem veya
        kütüphane çağrısı ile istismar edilmiş olma ihtimali gözardı
        edilmemelidir. Bunun meydana gelmesini önlemek için ve genelde
        yapıldığı gibi dosyanın izinlerini suEXEC çalıştırıcısı sadece
        httpd'nin aidiyetinde çalıştığı grup tarafından çalıştırılacak
        şekilde ayarlayınız.
Örneğin, sunucunuz şöyle yapılandırılmışsa:
User www Group webgroup
Ve suexec çalıştırılabilir de
        /usr/local/apache2/bin/ dizinine kurulmuşsa şu komutları
        vermelisiniz:
          chgrp apache-grup /usr/local/apache2/bin/suexec
          chmod 4750 /usr/local/apache2/bin/suexec
      
Böylece suEXEC çalıştırıcısını httpd’yi çalıştıran grubun üyelerinden başkasının çalıştıramayacağından emin olabilirsiniz.
httpd başlatıldığı sırada suexec çalıştırıcısı için
      --sbindir seçeneği ile tanımlanan dizine bakar (seçeneğin
      öntanımlı değeri /usr/local/apache/sbin/suexec’tir). httpd
      düzgün yapılandırılmış bir suEXEC çalıştırıcısı bulduğu takdirde hata
      günlüğüne şöyle bir ileti yazacaktır:
    [notice] suEXEC mechanism enabled (wrapper: /dosya/yolu/suexec)
Sunucu başlatıldığında bu ileti yazılmazsa sunucu ya çalıştırıcı programı umduğu yerde bulamamıştır ya da dosyanın setuid biti root tarafından etkin kılınmamıştır.
SuEXEC mekanizmasını etkin kılmak istediğiniz sunucu çalışmaktaysa
      sunucuyu önce öldürmeli sonra yeniden başlatmalısınız.  Basit bir
      HUP veya USR1 sinyali ile yeniden başlamasını
      sağlamak yeterli olmayacaktır.
SuEXEC mekanizmasını iptal etmek için ise suexec
      dosyasını sildikten sonra httpd'yi öldürüp yeniden başlamalısınız.
CGI programlarına yapılan isteklerin suEXEC çalıştırıcısı tarafından
      yerine getirilebilmesi için sanal konağın bir SuexecUserGroup yönergesi içermesi veya
      isteğin mod_userdir tarafından işleme konulması
      gerekir.
Sanal Konaklar:
SuEXEC çalıştırıcısını farklı
      bir kullanıcı ile etkin kılmanın tek yolu VirtualHost bölümleri içinde SuexecUserGroup yönergesini
      kullanmaktır. Bu yönergede ana sunucuyu çalıştıran kullanıcıdan farklı
      bir kullanıcı  belirterek ilgili sanal konak üzerinden CGI kaynakları
      için yapılan tüm isteklerin belirtilen kullanıcı ve
      grup tarafından çalıştırılması sağlanır. Bu yönergeyi
      içermeyen sanal konaklar için ana sunucunun kullanıcısı
      öntanımlıdır.
Kullanıcı dizinleri:
    mod_userdir tarafından işleme sokulan tüm istekler için
    suEXEC çalıştırıcısı istek yapılan kullanıcı dizininin sahibinin
    aidiyetinde çalıştırılacaktır. Bu özelliğin çalışması için tek
    gereklilik, kullanıcının SuEXEC çalıştırıcısı için etkin kılınmış olması
    ve çalıştırıcının yukarıdaki güvenlik sınamalarından
    geçebilmesidir. Ayrıca,  --with-suexec-userdir derleme seçeneğinin açıklamasına da bakınız.
SuEXEC çalıştırıcısı yukarıda değinildiği gibi günlük bilgilerini
      --with-suexec-logfile seçeneği ile belirtilen dosyaya
      yazacaktır. Çalıştırıcıyı doğru yapılandırarak kurduğunuzdan emin olmak
      istiyorsanız, yolunda gitmeyen şeyler var mı diye bu günlük dosyasına
      bakmayı ihmal etmeyin.
UYARI! Bu bölüm henüz bitmedi. Bu bölümün son hali için çevrimiçi belgelere bakınız.
SuEXEC çalıştırıcısından dolayı sunucu ayarlarına bazı sınırlamalar getiren bir kaç önemli nokta mevcuttur. SuEXEC ile ilgili hata bildiriminde bulunmadan önce bunlara bir göz atmalısınız.
Güvenlik ve verimlilik adına, tüm suEXEC isteklerinin sanal konaklar için üst düzey belge kökünün altındaki dosyalarla, kullanıcı dizinleri için ise üst düzey bireysel belge köklerinin altındaki dosyalarla sınırlı kalması gerekir. Örneğin, dört sanal konağınız varsa ve suEXEC çalıştırıcısının getirilerinden faydalanmak istiyorsanız, sanal konaklarınızın belge kök dizinlerini ana sunucunun belge kök dizininin altında kalacak şekilde yapılandırmanız gerekir (örnek yolda).
PATH ortam değişkeni
        Bunu değiştirmek tehlikeli olabilir. Bu değişkende tanımladığınız her yolun güvenli bir dizini işaret ettiğinden emin olmalısınız. Başkalarının oralarda bir truva atı çalıştırmasını istemiyorsanız buna çok dikkat ediniz.
Gerçekte ne yaptığınızı bilmiyorsanız bu, büyük bir sorun olabilir. Böyle şeyler yapmaktan mümkün olduğunca uzak durmalısınız.