Bir web sunucusu, web sayfalarını depolar, işler ve web sitesi ziyaretçilerine sunar. Oldukça fazla sayıda Açık Kaynaklı web sunucusu yazılım seçeneği vardır, ancak Apache HTTP sunucusu dünyada en yaygın kullanılan web sunucusu olarak kabul edilir. Bunun nedeni, açık kaynaklı olmasının yanı sıra, modüler mimarisinin farklı amaçlara hizmet edecek modüller ekleyerek yeteneklerinin genişletilmesine olanak tanımasıdır. Sonuç olarak, web sunucusu son derece sağlamdır.
Eğer bir CentOS 7 sistemine Apache kurmak istiyorsanız, bu eğitim tam size göre. Ek olarak, sanal ana bilgisayarlar oluşturmayı öğreneceksiniz, böylece CentOS üzerinde çalışan tek bir Apache HTTP sunucusunda birden fazla web sitesi barındırabilirsiniz.
Bu, yalnızca Apache kurulumuna odaklanan ayrıntılı bir eğitimdir. LAMP yığını hakkında adım adım bir eğitim arıyorsanız, göz atabileceğiniz CentOS 7 üzerinde Linux, Apache, MySQL, PHP (LAMP) Nasıl Kurulur kılavuzumuz mevcuttur. Şimdi başlayalım!
Önkoşullar
Bu uygulamalı bir eğitim olduğundan, aşağıdakilere sahip olmalısınız:
- CentOS 7 çalıştıran bir sunucu; CloudSigma üzerinde birkaç basit adımla bu bağlantıyı takip ederek bir tane oluşturabilirsiniz.
- Sunucunuzda sudo yetkilerine sahip root olmayan bir kullanıcı yapılandırın. Ardından, bu kullanıcıyla giriş yapın.
- Şu eğitimimizdeki adımları izleyerek temel bir güvenlik duvarı yapılandırın: CentOS 7 üzerinde FirewallD ile Güvenlik Duvarı Kurulumu.
Adım 1: Apache HTTP Sunucusunun Kurulması
Apache'yi CentOS varsayılan depolarında bulabilirsiniz. Bu nedenle, kurulum yum paket yöneticisi kullanılarak oldukça kolaydır. Önkoşullar bölümünde belirtildiği gibi, root olmayan kullanıcıyla giriş yapmış olmanız gerekir. Yerel Apache httpd paket dizinini güncellemek için terminalinizde aşağıdaki komutu çalıştırın:
|
1 |
sudo yum update httpd |
Paketler güncellendikten sonra, Apache'yi kurmak için aşağıdaki komutu girin:
|
1 |
sudo yum install httpd |
Kurulumu onaylayın ve yum'un Apache'yi ve gerekli bağımlılıklarını kurmasını bekleyin.
Eğer CentOS 7 üzerinde FirewallD ile Güvenlik Duvarı Kurulumu eğitimindeki adımları izlediyseniz ve 80 numaralı bağlantı noktası için güvenlik duvarını etkinleştirdiyseniz, hazırsınız demektir. Firewalld, CentOS için güvenlik duvarı yöneticisidir. Aksi takdirde, aşağıdaki komutu girerek firewalld'nin http (port 80) hizmetini etkinleştirebilirsiniz:
|
1 |
sudo firewall-cmd --permanent --add-service=http |
Trafiği güvenli HTTPS üzerinden sunmayı planlıyorsanız, aşağıdaki komutu girerek firewalld'nin https (port 443) hizmetini etkinleştirebilirsiniz:
|
1 |
sudo firewall-cmd --permanent --add-service=https |
Son olarak, değişikliklerin geçerli olması için firewalld'yi yeniden yüklemelisiniz. Yeniden yükleme komutu şudur:
|
1 |
sudo firewall-cmd –reload |
Bu noktada, yukarıdaki komutları çalıştırıp çalıştırmadığınıza bağlı olarak, trafiği HTTP veya HTTPS üzerinden sunmak için Apache'yi kurdunuz ve yapılandırdınız.
Adım 2: Apache Web Sunucusunun Çalıştığının Doğrulanması
CentOS'ta Apache işlemi kurulumdan sonra otomatik olarak başlamaz. Apache'yi manuel olarak başlatmak için aşağıdaki komutu girin:
|
1 |
sudo systemctl start httpd |
Hizmetin başarıyla başlatıldığını doğrulamak için aşağıdaki komutu girerek durumu kontrol edin:
|
1 |
sudo systemctl status httpd |
Hizmet çalışıyorsa, aşağıdaki ekran görüntüsüne benzer bir çıktı görmelisiniz. Aktif (active) durumuna dikkat edin:

Çıktı, hizmetin başarıyla başlatıldığını ve çalıştığını gösterir. Sırada, Apache'nin internet kullanıcılarına bir sayfa sunabildiğini de test etmeliyiz. Apache, sunucunuza internet üzerinden erişilip erişilemediğini test etmek için kullanabileceğiniz varsayılan bir sayfa ile birlikte gelir.
Henüz bilmiyorsanız, sunucunuzun genel IP adresini bulmanız gerekecektir. Bu IP adresi, tarayıcınızın adres çubuğunda varsayılan Apache web sayfasını istemek için kullanacağınız adrestir. Aşağıdaki komutu girerek ana bilgisayarın ağ adreslerini görüntüleyebilirsiniz:
|
1 |
hostname –I |
Elde ettiğiniz adres listesinden, çalıştıklarını doğrulamak için her birini tarayıcınızda deneyebilirsiniz. İsteğe bağlı olarak, curl IP adresinizi şuradan almak için: icanhazip.com. Aşağıdaki komut, başka bir internet konumundaki bir bilgisayardan görüldüğü şekliyle genel IP adresinizi çıktı olarak verir:
|
1 |
curl -4 icanhazip.com |
Sunucunuzun genel IP adresini aldıktan sonra, bunu kopyalayıp tarayıcınızın adres çubuğuna yapıştırın:
|
1 |
http://your_server_public_ip |
Tarayıcınız varsayılan CentOS 7 Apache web sayfasını yüklemelidir:

Varsayılan Apache web sayfasını yükleyebildiyseniz, bu sunucunuzun düzgün çalıştığı anlamına gelir. Aşağı kaydırırsanız, Apache dosyaları ve dizin konumları hakkında bazı temel bilgileri görebilirsiniz. Servis kurulup düzgün bir şekilde çalışmaya başladığında, servisi yönetmek için çeşitli systemctl komutlarını kullanabilmeniz gerekir.
Adım 3: Apache Servisini Yönetme
Bu bölümde size bazı temel Apache Yönetim komutlarını göstereceğiz. İşte web sunucusunu durduran komut:
|
1 |
sudo systemctl stop httpd |
İşte web sunucusunu başlatmak için kullanılan komut:
|
1 |
sudo systemctl start httpd |
Sırada, web sunucusunu yeniden başlatmak (durdurmak ve başlatmak) için kullanılan komut var:
|
1 |
sudo systemctl restart httpd |
Bundan sonra, Apache servisini yeniden yükleme komutunu göstereceğiz. Bu komut, yalnızca yapılandırma değişiklikleri yaparken gereklidir. Yeniden yükleme yaparak, Apache işlemi, yeniden başlatmış olsaydınız gerçekleşecek olan bağlantıların kesilmesi durumu yaşanmadan yapılandırma değişikliklerini uygulayacaktır:
|
1 |
sudo systemctl reload httpd |
Varsayılan yapılandırmalara göre, Apache sunucu önyüklendiğinde otomatik olarak başlar. Bu davranışı değiştirmek isterseniz, servisin başlangıçta çalışmasını devre dışı bırakacak komut şudur:
|
1 |
sudo systemctl disable httpd |
Servisin başlangıçta çalışmasını yeniden etkinleştirmek için aşağıdaki komutu girin:
|
1 |
sudo systemctl enable httpd |
Adım 4: Apache Sanal Konaklarını (Virtual Hosts) Kurma
Varsayılan olarak Apache, tek bir web sitesini barındıracak ve sunacak şekilde yapılandırılmıştır. Çoğu durumda, web sunucunuzun birden fazla web sitesini sunmasını ve barındırmasını istersiniz. Örneğin, alt alan adlarınız olabilir veya ana şirket/kuruluş web siteniz için bir blog sayfası kurmak isteyebilirsiniz. İşte bu noktada Apache sanal konakları (virtual hosts) devreye girer. Apache sanal konakları, web sunucunuzu birden fazla web sitesi sunacak şekilde yapılandırmanıza olanak tanır. Apache sanal konakları, Nginx sunucusundaki.
sunucu bloklarının (server blocks) eşdeğeridir. Bu kılavuzda, alan adımız olarak example.com kullanarak bir sanal konağın nasıl oluşturulacağını göstereceğiz. Elbette, example.com alan adı internette çalışmayacaktır, bu nedenle onu kendi gerçek alan adınızla değiştirmelisiniz – adımlar aynıdır.
CentOS üzerine Apache kurduğunuzda, /var/www/html dizininden içerik sunacak şekilde yapılandırılmış bir sanal konak yükler. Bu tasarım, tek bir site barındırıyorsanız iyi çalışır. Ancak biz birden fazla site barındırabilmek istiyoruz. Varsayılan /var/www/html dizinini olduğu gibi bırakıp bunun yerine /var/www konumu içinde example.com alan adı için başka bir dizin oluşturacağız. Varsayılan dizini bırakmanın nedeni, istemci istekleri sanal konaklarla yapılandırdığınız diğer sitelerle eşleşmediğinde bu dizinin sunulmasını sağlamaktır. Ayrıca, oluşturduğunuz sanal konakları devre dışı bırakmak isterseniz, trafiği sunmak için varsayılan dizin kalacaktır.
İlk olarak, /var/www içinde alan adınız için bir dizin oluşturun. İstediğiniz bir ismi seçmekte özgürsünüz. Ancak, sanal konak conf dosyasını oluşturduğunuzda kolayca hatırlayabilmeniz için alan adınıza benzer bir isim seçmeniz önerilir. Örnek dizini oluşturmak için aşağıdaki komutu girin:
|
1 |
sudo mkdir -p /var/www/example |
Sitenin günlük (log) dosyalarını tutacak ek bir klasör oluşturmak için aşağıdaki komutu girin:
|
1 |
sudo mkdir -p /var/www/example/log |
Web sitesi dizinleriniz hazır olduğunda, aşağıdaki komutu kullanarak $USER çevre değişkeni ile dizinin sahipliğini atayın:
|
1 |
sudo chown -R $USER:$USER /var/www/example |
Web kök dizininizin varsayılan izinlere sahip olduğundan emin olmak için aşağıdaki komutu çalıştırın:
|
1 |
sudo chmod -R 755 /var/www |
Şimdi, index.html sayfasını, nano kullanarak example dizini içinde oluşturmak için aşağıdaki komutu girin:
|
1 |
sudo nano /var/www/example/index.html |
Nano düzenleyicide aşağıdaki HTML kod parçacığını ekleyin:
|
1 2 3 4 5 6 7 8 |
<html> <head> <title>Hoş geldiniz to Example.com!</title> </head> <body> <h1>Eğer siz görebiliyorsanız görmek bu mesajı, bu anlamına gelir <em>example.com</em> sanal sunucu is çalışıyor!</h1> </body> </html> |
İşlem tamamlandığında, Ctrl O tuşlarına basıp ENTER tuşuna basın. Artık Ctrl X tuşlarına basarak düzenleyiciyi kapatabilirsiniz..
Şu ana kadar, sanal ana bilgisayarı test etmek için site dizininiz ve temel web sayfanız hazır. Sırada, sanal ana bilgisayar yapılandırma dosyalarını oluşturmak var. Sanal ana bilgisayar dosyaları, tek bir Apache sunucusunda barındırmak istediğiniz çeşitli sitelerin yapılandırmalarını belirtir. Belirlenen alan adı isteklerini ilgili özel dizine yönlendirirler.
Sanal ana bilgisayar dosyaları /etc/httpd/sites-available dizininde saklanır. Etkinleştirilen sanal ana bilgisayar dosyaları, /etc/httpd/sites-available dizininden /etc/httpd/sites-enabled dizinine sembolik olarak bağlanır (symlink). Bu iki dizin CentOS'ta varsayılan olarak oluşturulmaz, bu nedenle bunları kendiniz oluşturmanız gerekir. Dizinleri oluşturmak için aşağıdaki komutu girin:
|
1 |
sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled |
Dizinler oluşturulduktan sonra, Apache'ye sites-enabled dizinindeki sanal ana bilgisayarları araması talimatını verin. Bunu Apache'nin ana yapılandırma dosyasını değiştirerek yapacaksınız. Dosyayı nano düzenleyicide açmak için aşağıdaki komutu girin:
|
1 |
sudo nano /etc/httpd/conf/httpd.conf |
Apache'ye isteğe bağlı bir dizindeki ek yapılandırma dosyalarını aramasını söyleyecek bir satır eklemek istiyoruz. Dosyanın en altına gidin ve sonuna aşağıdaki satırı ekleyin:
|
1 |
IncludeOptional sites-enabled/*.conf |
Dosyayı kaydetmek için Ctrl O tuşlarına basın ve ENTER tuşuna basın. Artık Ctrl X tuşlarına basarak düzenleyiciyi kapatabilirsiniz. Bir sonraki adım, sites-available dizini içinde sanal ana bilgisayar dosyasını oluşturmaktır. Yeni dosyayı oluşturmak ve nano düzenleyiciyle açmak için aşağıdaki komutu girin:
|
1 |
sudo nano /etc/httpd/sites-available/example.conf |
Açılan dosyaya aşağıdaki yapılandırma bloğunu ekleyin. example.com adresini kendi gerçek alan adınızla değiştirmeyi unutmayın ve eğer /var/www/example içinde farklı bir dizin adı kullandıysanız, bunu da uygun şekilde güncelleyin:
|
1 2 3 4 5 6 7 |
<VirtualHost *:80> ServerName www.example.com ServerAlias example.com DocumentRoot /var/www/example ErrorLog /var/www/example/log/error.log CustomLog /var/www/example/log/requests.log combined </VirtualHost> |
Gördüğünüz gibi, alan adını ve bu alan adı için sunulacak dosyaların bulunacağı belge kök dizinini (document root) belirttik. Ayrıca hata günlüğü (error log) konumunu da belirttik – bu, sunucu sorunlarını giderirken size yardımcı olacaktır.
Sanal ana bilgisayar dosyamız sites-available dizini içinde yer aldıktan sonra, bir sonraki adım sites-enabled dizinine sembolik bir bağlantı oluşturarak dosyayı etkinleştirmektir. Sembolik bağlantıyı oluşturmak için aşağıdaki komutu girin:
|
1 |
sudo ln -s /etc/httpd/sites-available/example.conf /etc/httpd/sites-enabled/example.conf |
Buraya kadar olan adımları takip ettiyseniz, sanal ana makineniz artık web sitenizin içeriğini sunmaya hazır olmalıdır. Ancak, sanal ana makineler çalışmaya başlamadan önce yapılandırmanız gereken bir kontrol daha var. Bir sonraki bölümde bunu ele alacağız.
Adım 5: Sanal Ana Makinelere İzin Vermek İçin SELinux İzinlerini Ayarlama
Aralarında Fedora, RHEL ve CentOS'un da bulunduğu Linux dağıtımları varsayılan olarak SELinux ile birlikte gelir. SELinux (Security Enhanced Linux), bir sunucunun istekleri nasıl işlemesi gerektiğini ve kullanıcıların soketler, ağ bağlantı noktaları ve temel dizinlerle nasıl etkileşime girmesi gerektiğini kısıtlayan ve tanımlayan, Linux sistemlerine yönelik bir güvenlik mimarisidir.
Kutudan çıktığı haliyle SELinux, varsayılan Apache yapılandırmasıyla çalışacaktır. Ancak, özel bir günlük (log) dizini de dahil olmak üzere oluşturduğunuz özel sanal ana makine ile Apache hizmetini yeniden başlatmayı denediğinizde bir hizmet hatası alınacaktır. Çözüm, Apache hizmetinin gerekli dosyalara yazmasına izin vermek için SELinux politikalarını değiştirmektir.
SELinux, CentOS'u son derece güvenli bir sunucu haline getirir. Bu nedenle, tamamen devre dışı bırakmanızı önermiyoruz. SELinux'un güvenlik seviyenizi çeşitli şekillerde özelleştirmenize izin verdiği göz önüne alındığında, politikaları yalnızca ortamınızın ihtiyaçlarına göre güncellemeniz veya belirlemeniz önerilir.
Apache politikalarını güncellemek için iki seçeneğiniz vardır: ya Evrensel Olarak ya da Belirli Dizine Göre. Belirli bir dizine özel politikaları güncellemek daha güvenlidir. Bu nedenle önerilen seçenek budur.
-
Apache Politikalarını Evrensel Olarak Güncelleme
Apache politikasını evrensel olarak değiştirebilirsiniz; bu, httpd_unified Boolean değerini kullanarak SELinux'a tüm Apache işlemlerine aynı şekilde davranması talimatını verecektir. Apache politikalarını evrensel olarak değiştirmenin, her dizini belirli bir şekilde yapmakla aynı düzeyde kontrol sağlamayacağını unutmayın. Ancak bakım söz konusu olduğunda daha pratiktir. Apache politikalarını evrensel olarak güncellemek için aşağıdaki komutu çalıştırın:
|
1 |
sudo setsebool -P httpd_unified 1 |
Bu komuttaki değerlerin ne işe yaradığını tanımlayalım:
- setsebool – SELinux boolean değerlerini günceller.
- -P etiketi – önyükleme zamanı değerini günceller, böylece bu değişiklik yeniden başlatmalar arasında kalıcı olur.
- httpd_unified – SELinux'a tüm Apache işlemlerini aynı türde ele alması talimatını verecek boolean değeridir. 1 değerinin kullanılması bunu etkinleştirir.
-
Bir Dizin Üzerinde Apache Politikalarını Ayarlama
Dizinler üzerinde daha fazla kontrol istiyorsanız, Apache politikalarını dizin başına ayarlamak doğru yoldur. Ancak bu, daha fazla bakım gerektirme yükünü de beraberinde getirir. Bunun nedeni politikanın genel (global) olmamasıdır. Dolayısıyla, sanal ana makine conf dosyalarınızda belirttiğiniz yeni günlük dizinleri için bağlam türünü manuel olarak ayarlamanız gerekecektir.
Politikayı güncellemeden önce, aşağıdaki komutu kullanarak SELinux'un /var/www/example/log dizinine atadığı bağlam türünü kontrol edin:
|
1 |
sudo ls -dZ /var/www/example/log/ |
Komut, temel olarak dizinin SELinux bağlamı olan aşağıdaki gibi bir çıktı verecektir:
|
1 |
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/example/log/ |
httpd_sys_content_t, Apache işleminin yalnızca bu dizinde oluşturulan dosyaları okumasına izin verildiğini SELinux'a bildiren geçerli bağlamdır. Sanal ana makine yapılandırmalarımızdan, Apache'nin /var/www/example/log dizinindeki günlük dosyalarına yazmasını istediğimiz için, Apache'nin web uygulaması günlük dosyalarını oluşturmasına ve bunlara ekleme yapmasına izin vermek üzere bu politikayı değiştireceğiz. Buna izin veren bağlam httpd_log_t bağlamıdır. Bağlamı güncellemek için gereken komut şudur:
|
1 |
sudo semanage fcontext -a -t httpd_log_t "/var/www/example/log(/.*)?" |
Yukarıdaki komuttan kaynaklanan değişiklikleri uygulamak ve bunların önyüklemeler arasında kalıcı olmasını sağlamak için aşağıdaki komutu çalıştırın:
|
1 |
sudo restorecon -R -v /var/www/example/log |
Komutun ne işe yaradığını tanımlayalım:
- restorecon – değişiklikleri uygular ve yeniden başlatmalar arasında kalıcı olmalarını sağlar.
- -R bayrağı – komutu özyinelemeli olarak çalıştırır ve mevcut tüm dosyaları yeni bağlamı kullanacak şekilde günceller.
- -v bayrağı – komut çalıştıktan sonra bağlam değişikliklerini yazdırır. Şuna benzer bir çıktı verecektir:
|
1 2 |
Output: restorecon reset /var/www/example/log context unconfined_u:object_r:httpd_sys_content_t:s0->unconfined_u:object_r:httpd_log_t:s0 |
|
1 |
sudo ls -dZ /var/www/example/log/ |
|
1 |
drwxr-xr-x. root root unconfined_u:object_r:httpd_log_t:s0 /var/www/example.com/log |
Adım 6: Sanal Konak Yapılandırmasını Test Etme
Sanal konağı test edebilmemiz için Apache hizmetlerini yeniden başlatmanız gerekecektir. Bunun için gereken komut şudur:
|
1 |
sudo systemctl restart httpd |
Ardından, aşağıdaki komutu kullanarak günlük dizininin içeriğini listeleyin:
|
1 |
ls -lZ /var/www/example/log |
Apache'in günlük dosyalarını oluşturduğunu gösteren, şuna benzer bir çıktı görüntülenmelidir:

Bu noktaya kadar olan adımları takip ettiyseniz, sanal konak dosyanızda tanımlanan alan adınızı ziyaret ettiğinizde Apache artık örnek HTML sayfasını sunabiliyor olmalıdır. Dilerseniz, ek alan adları kurmak ve bunların SELinux izinlerini uygun şekilde güncellemek için 4. ve 5. adımları tekrarlayabilirsiniz.
Sonuç
Bu öğreticide Apache'i kurduk, Apache'in özel günlük dosyalarına yazmasına izin vermek için SELinux politikalarını nasıl güncelleyeceğimizi öğrendik ve son olarak yapılandırmamızın doğru çalıştığını onaylamak için test ettik. Bu temel bilgileri kullanarak, bunun üzerine yeni şeyler inşa edebilir ve daha zengin deneyimlere sahip daha iyi uygulamalar sunabilirsiniz.
Eksiksiz bir web yığınını keşfetmek isterseniz, şu konudaki öğreticimize göz atın: CentOS 7 üzerinde LAMP yığınının nasıl kurulacağı.
Keyifli Çalışmalar!
Yorumlar
Henüz yorum yapılmamış. İlk siz olun.