
Panelsiz nginx ve php kullanıyorsanız bir site çalıştırdığınızda sorun yaşamazsınız ancak birden fazla websitesi çalıştırmak istediğinizde, bütün siteleri aynı kullanıcı ile çalıştırmanız güvenlik sorunlarına neden olur ve bir çok konuda yetki sorunları yaşayabilirsiniz. Buda siteleriniz üzerinde hatalar görebileceğiniz anlamına gelir.
İlginizi çekebilir:
- CDN server kurulumu (nginx),
- Nginx için wp süper cache ayarları,
- Centos 7 Panelsiz sunucu kurulumu: Nginx + Php-fpm (10 saniyede)
Bu yazımda, uzun zamandır benimde dikkatimden kaçan bu sorunu çözüme ulaştırmayı düşünüyorum. Böylece php ve nginx kullanan panelsiz sunucularda birden fazla kullanıcı ile sitelerimizi çalıştırabilir, her kullanıcının kendi yetkileri dışına çıkmasını engelleyebiliriz.
Örnek olarak A websitesinde bir kod çalıştırdığınızda, eğer işi biliyorsanız, B sitesindeki her şeye ulaşabilirsiniz. Bu bir güvenlik açığıdır, bu sebeple her siteyi kendi kullanıcısı ve yetkileri ile çalıştırmak için aşağıdaki adımları izleyelim.
Php-fpm kullanıcı ayar dosyaları oluşturma
Öncelikler çalıştıracağımız her kullanıcı için php-fpm ayar dosyası oluşturmamız gerekiyor. bunun için sunucumuza root girişi yaptıktan sonra bu klasörü açıyoruz: /etc/php-fpm.d/
İçerisinde genelde tek ayar dosyası olur: www.conf
Ben uzun yıllar panelsiz sunucularda tek site çalıştırdığım için, bu ayarın birden fazla site için kullanılması gerektiğini bilmiyordum. Bunu öğrendiğimde şuanda olan budur, sizlerle paylaşarak ilerde olası sorunlara engel olmayı istiyorum.
www.conf Bu dosyadan (içerisindekilerle beraber) sunucunuz da ki site (kullanıcı) sayısı kadar oluşturun. Her dosyanın ismini de kullanıcı adı ile aynı yapın ki kafanız karışmasın.
Örneğin sunucunuz da aşağıdaki domain ve kullanıcılar var diyelim:
- kuazabi.com (kuazabi)
- kuazaabla.com (kuazaabla)
- kuazababa.com (kuazababa)
Domain ve yanında kullanıcı isimleri var. Yukarda bahsettiğim default ayar dosyasının aynısından, kullanıcı isimlerine göre oluşturmamız gerekiyor. Örnek:
- kuazabi.conf
- kuazaabla.conf
- kuazababa.conf
sonrasında bu oluşturduğumuz dosyaları düzenlemek için açalım ve aşağıdaki ayarları bulup her sitenin ve kullanıcının adına göre düzenleyelim:
[www]
user = nginx
group = nginx
listen = /var/run/php-fpm/php-fpm.sock
Sadece yukarıdaki ayarları oluşturduğumuz yada kullanacağımız kullanacıya göre düzenleyeceğiz. Örnek:
[kuazabi]
user = kuazabi
group = kuazabi
listen = /var/run/php-fpm/kuazabi.sock
user ve group kısmı, kullanıcı adı olmak zorunda, diğer değiştiğim kısımlar oluşturduğunuz php-fpm deki dosya ismi ile aynı olabilir. Hatda aynı olsun ;)
Yukarıda ki işlemi sunucunuz da çalıştırdığınız her domain, websitesi yada kullanıcı için tekrarlayın. bu ayar dosyalarındaki aşağıdaki kısımları değiştirmeyin aynen bırakın:
listen.owner = nginx
listen.group = nginx
Nginx kullanıcı ayar dosyalarını düzenleme
Nginx de oluşturulan her websitesi ayar dosyasını açarak tek tek düzenlememiz gerekiyor. nginx site ayar dosyaları genelde bu klasörde bulunuyor: /etc/nginx/conf.d
Örnek alıbaba.conf nginx dosyasını düzenlemek için açalım ve içerisindeki aşağıdaki kısmı bulalım: (php dosyalarını çalıştırmak için kullanılan alan)
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
Burada tek değişeceğimiz kısım /var/run/php-fpm/php-fpm.sock. Daha önce php-fpm klasöründe oluşturduğumuz kullanıcı ayar dosyası içerisinde yer alan bu kısımla aynı olmalı: Örnek kullanıcı: kuazabi
listen = /var/run/php-fpm/kuazabi.sock
Örnek nginx kullanıcı ayar dosyasındaki düzenleyeceğimiz alan bu şekilde olacak:
fastcgi_pass unix:/var/run/php-fpm/kuazabi.sock;
Bu değişiklikleri her kullanıcı için, ayrı ayrı yapın, böylece her sitede çalıştırılacak php dosyaları, o siteye atanan kullanıcı yetkileri ile sınırlı olacaktır. Bu ayarları daha da kısıtlayabilirsiniz, bunun için php-fpm klasöründe oluşturduğunuz kullanıcı ayar dosyasını açarak içerisindeki ayarları özelleştirebilirsiniz. Ayrı olarak buradan her sitenin kullanacağı sunucu özelliklerini de kısıtlayabilir, açabilirsiniz.
Nginx ve Php-fpm restart atma
Ayarların aktif olabilmesi için nginx ve php-fpm ye restart atmayı unutmayalım:
nginx -t && service nginx restart
service php-fpm restart
Anlamadığınız kısımlar olursa lütfen yorum yazarak destek isteyin, geri dönüş yaparak yardımcı olacağım. Her ne kadar detaylı anlatmaya çalıştıysam da, uzadığı için kafanız karışmış olabilir, aslında çok basit bir anlatım. Bu dokümanı hazırlarken buradaki siteden feyz aldım arkadaşlar. Oradaki anlatımda da görebileceğiniz gibi aslında 2 dakikalık bir çalışma ile istenen sonuca ulaşabilirsiniz.
Bu konu ile alakalı digitalocean daki makale ve tecmint makalesi aradığınız şeyler konusunda size yardımcı olabilir.