Müsait — Yerel Dijital Ürünler
HCA · Studio
TR — İletişim ↗
Teknik Not 08 · Sunucu

Loglar neden bir anda yazılmayı bırakıyor

Erişim kaydı belli bir tarihte donmuştur; dosya durur, boyutu değişmez, hata kaydında tek satır yoktur. Site normal çalışmaya devam eder. Kaybettiğiniz şey sadece görünürlük değildir — log'a bağlı her şey de sessizce durur.

Sunucu
OpenLiteSpeed
Belirti
Log donuyor
Yan etki
fail2ban kör kalır
Kısa cevap

OpenLiteSpeed ana süreci root olarak başlar, ama istekleri karşılayan işçi süreçler ayrıcalıksız bir kullanıcıya düşer (çoğu kurulumda nobody ya da lsadm). Log dosyasını açan taraf bu ayrıcalıksız süreçtir. Log dizini 750 izinli ve başka bir kullanıcıya aitse, işçi süreç dosyayı açamaz — ve bunu bir hata olarak bildirmez, yalnızca yazmayı bırakır. Sorun logrotate sonrasında da tekrarlar: yeni dosya yanlış sahiplikle oluşturulursa kayıt bir daha başlamaz. Çözüm, log dizininin sahipliğini ve iznini OpenLiteSpeed'in çalıştığı kullanıcıya göre ayarlamaktır.

Belirti

Erişim kaydına bakarsınız ve son satır haftalar öncesine aittir. Site çalışmaktadır, ziyaretçi gelmektedir, ama dosyaya hiçbir şey eklenmemektedir. Hata kaydında ipucu yoktur; çoğu zaman hata kaydı da aynı dizinde olduğu için o da yazılmıyordur.

Bu arıza özellikle yanıltıcıdır çünkü hiçbir şey bozulmuş gibi görünmez. Sunucu sağlıklıdır, sayfalar açılır, izleme yeşildir. Yalnızca gözünüz kapanmıştır.

Kök neden

OpenLiteSpeed ayrıcalık ayrımı uygular: ana süreç root olarak başlar (ayrıcalıklı portları dinleyebilmek için), ardından istekleri işleyen süreçleri ayrıcalıksız bir kullanıcıya düşürür. Log dosyasını açan ve ona yazan taraf bu ikinci gruptur.

Panel kurulumlarında log dizini çoğu zaman site kullanıcısına ya da root'a ait olur ve 750 iznine sahiptir. 750, "sahibi okur-yazar-girer, grup okur-girer, diğerleri hiçbir şey yapamaz" demektir. OpenLiteSpeed'in işçi kullanıcısı ne sahip ne de gruptaysa, dizine giremez bile.

Açılamayan bir log dosyası, OpenLiteSpeed için ölümcül bir hata değildir. Sunucu isteği karşılamaya devam eder ve kaydı düşürür. Bu tasarım tercihi mantıklıdır — log yüzünden site düşmez — ama teşhisi zorlaştırır.

Hangi kullanıcı

Doğru izni verebilmek için önce kimin yazdığını bilmeniz gerekir. Bu bilgi ana yapılandırmadadır:

grep -E '^user|^group' /usr/local/lsws/conf/httpd_config.conf

Çalışan süreçlerden de doğrulayabilirsiniz; ilk satır ana süreci (root), diğerleri işçileri gösterir:

ps -eo user,group,comm | grep -E 'litespeed|lshttpd'

Log dizininin mevcut durumunu da yan yana koyun:

ls -la /home/alanadi.com/logs/

Dizin sahibi ile işçi kullanıcı farklıysa ve izin 750 ise, sebebi bulmuşsunuz demektir.

Çözüm

En temiz yaklaşım, dizini OpenLiteSpeed'in çalıştığı gruba vermek ve gruba yazma izni tanımaktır. Böylece herkese açık hâle getirmeden sorunu çözersiniz:

chgrp nogroup /home/alanadi.com/logs
chmod 770 /home/alanadi.com/logs

Mevcut dosyaların sahipliğini de düzeltin; dizin izni doğru olsa bile eski dosya yazılamaz durumda kalabilir:

chown nobody:nogroup /home/alanadi.com/logs/*.log
/usr/local/lsws/bin/lswsctrl restart

Yeniden başlatmanın ardından bir istek gönderip kaydın gerçekten aktığını doğrulayın — varsaymayın:

curl -sS -o /dev/null https://alanadi.com/
tail -2 /home/alanadi.com/logs/alanadi.com.access_log

logrotate tarafı

Asıl sinsi kısım burasıdır. Dizin iznini düzeltip sorunu çözdüğünüzü düşünürsünüz; birkaç gün sonra loglar yine durur. Sebep, günlük döndürme sırasında yeni dosyanın yanlış sahiplikle oluşturulmasıdır.

Döndürme yapılandırmasında yeni dosyanın kimin adına açılacağı açıkça belirtilmelidir:

create 0640 nobody nogroup

OpenLiteSpeed'in kendi rollingSize ayarını kullanıyorsanız dosyayı zaten kendisi oluşturur ve bu sorun çıkmaz. Karışıklık, harici logrotate ile dahili döndürmenin aynı dosyada çakıştığı kurulumlarda başlar: ikisinden birini seçin, ikisini birden çalıştırmayın.

Görünmeyen yan etki

Log'un durması tek başına da can sıkıcıdır, ama asıl bedel log'a bağlı sistemlerdir. fail2ban, okuyacak satır bulamadığında hata vermez — sadece hiç kimseyi engellemez. Jail listesinde kural aktif görünür, durum çıktısı sağlıklıdır, yasaklanan IP sayısı sıfırda kalır.

fail2ban-client status wordpress-ols

"Currently failed: 0, Total banned: 0" çıktısını kaba kuvvet saldırısı olmadığı için değil, log okunamadığı için görüyor olabilirsiniz. Trafiği yüksek bir sitede bu sayının uzun süre sıfır kalması normal değildir; log akışını kontrol edin.

Aynı şey trafik istatistikleri, hata izleme ve güvenlik denetimi için de geçerlidir. Bir sunucuyu devraldığınızda ilk bakılacak yerlerden biri, logların gerçekten bugüne ait olup olmadığıdır.

Özet

Sessiz arızalar, gürültülü arızalardan pahalıdır: çünkü onları aramaya karar verene kadar varlıklarını bilmezsiniz. Log dizini izni bunun ders kitabı örneğidir — tek bir chmod hatası hem görünürlüğü hem de ona bağlı güvenlik katmanını devre dışı bırakır ve hiçbir yerde iz bırakmaz. Bakım listenize tek satır ekleyin: log dosyasının son satırı bugüne ait mi?

Hızlı referans
Kök neden
İşçi süreç ayrıcalıksız kullanıcıya düşer; 750 dizine giremez
Neden sessiz
Log açılamaması OpenLiteSpeed için ölümcül hata değildir
Kullanıcıyı bul
grep -E '^user|^group' /usr/local/lsws/conf/httpd_config.conf
Çözüm
chgrp nogroup logs && chmod 770 logs + dosya sahipliği
Tekrarlıyorsa
logrotate create 0640 nobody nogroup satırı eksiktir
Çakışma
Harici logrotate ile OLS rollingSize aynı anda kullanılmamalı
Yan etki
fail2ban log okuyamayınca hata vermez, sadece kimseyi engellemez
Kontrol
Log dosyasının son satırı bugüne ait mi?
Sık Sorulan Sorular

Log izinleri hakkında.

Log dosyası duruyor ama boyutu değişmiyor, sunucu çalışıyor. Neden?

Büyük ihtimalle OpenLiteSpeed'in işçi kullanıcısı dosyayı açamıyordur. Ana süreç root olarak başlar ama istekleri işleyen süreçler ayrıcalıksız bir kullanıcıya düşer; log dizini 750 izinliyse ve o kullanıcı sahip ya da grup değilse dizine giremez. OpenLiteSpeed bunu ölümcül hata saymaz, kaydı sessizce düşürür.

İzni düzelttim ama birkaç gün sonra loglar yine durdu.

Sebep log döndürmedir. Döndürme sırasında oluşturulan yeni dosya yanlış sahiplikle açılırsa kayıt yeniden durur. logrotate yapılandırmasına create 0640 nobody nogroup satırını ekleyin. Ayrıca harici logrotate ile OpenLiteSpeed'in kendi rollingSize ayarını aynı dosyada birlikte kullanmayın.

fail2ban kurdum ama hiç kimseyi engellemiyor. İlgisi var mı?

Doğrudan ilgisi var. fail2ban okuyacak log satırı bulamadığında hata üretmez; jail aktif görünür ve yasaklanan IP sayısı sıfırda kalır. Trafiği olan bir sitede bu sayının uzun süre sıfır kalması normal değildir. Önce log akışını, sonra filtre desenini kontrol edin.

777 vermek sorunu çözer mi?

Çözer ama yapmayın. Log dizinine herkese yazma izni vermek, sunucudaki herhangi bir sürecin kayıtları değiştirmesine veya silmesine imkân tanır; bu da denetim izini güvenilmez kılar. Doğru yaklaşım dizini OpenLiteSpeed'in grubuna verip 770 kullanmaktır.

Teklif ve Uygunluk

Bir fikriniz mi var?
Yarım cümle de olur.