Günlük büyüyor ama yeniden oluşturulamıyor: dizinin ACL'sini kontrol edin
Bir dosyaya ekleme yapmak dizininde yeni bir ad gerektirmez; oluşturmak gerektirir. Herhangi bir şeyi genişletmeden önce erişim ACL'sini devralınan varsayılanlarla karşılaştırın.
Sürekli büyüyen bir günlük, bir şey onu yeniden oluşturduğu anda büyümeyi durdurur ve hata izin verilmediğini söyler. Cazip sonuç, günlük dosyasının kendisinin daha fazla izne ihtiyacı olduğudur, ancak dosya aynı hesap tarafından zaten yazılabilir olabilir. Varolan bir ada ekleme yapmak ve yeni bir ad oluşturmak iki farklı denetimdir ve yalnızca ikincisi dizine başvurur.
Ekleme ve oluşturma farklı denetimlerdir
Varolan bir dosyayı ekleme için açmak, o dosya üzerinde yazma erişimi ve yolundaki her dizinde arama erişimi gerektirir. Dosya oluşturmak, onu içeren dizinde yazma ve arama gerektirir, çünkü işlem ona bir ad ekler. Bir dosyayı yeniden adlandırmayla değiştirmek her iki dizine ve onların sticky bit kurallarına da dokunur.
| Operation | What must permit it | Typical failure message |
|---|---|---|
| Append to an existing log | File write access, path traversal | Permission denied on the file |
| Create a missing log | Directory write and search access | Permission denied on the path |
| Rename a replacement into place | Both directories, plus sticky restrictions | Permission denied or operation not permitted |
Zaten açık bir tanımlayıcı dördüncü durumu ekler. Bir süreç, ayrıcalıklardan vazgeçmeden önce açılmış bir yazma tutamacını elinde tutup yine de sonraki kimliği altında aynı yolu yeniden açmada başarısız olabilir. Başarılı eklemeler ve başarısız oluşturma aynı anda, aynı süreç için ikisi de doğru olabilir.
Varsayılan ACL'ler devralınır, bağışlamazlar
Varsayılan önekle başlayan bir girdi, yeni nesnelerin dizinden neyi devraldığını açıklar. Dizinin kendisine hiçbir şey bağışlamaz ve zaten varolan bir dosyanın ACL'sini onarmaz.
namei -l /var/log/openvpn/server.log
getfacl -p /var/log/openvpn
getfacl -p /var/log/openvpn/server.log
Erişim girdilerini varsayılanlardan ayrı okuyun ve maskeyi okuyun. Tam yetkileri listeleyen adlandırılmış bir girdi bile maskeyle sınırlanabilir, bu yüzden etkin yorum ilk satırdaki harflerden daha önemlidir.
Yapılandırmadaki yol yerine çözümlenmiş yolu kullanın. Bir sembolik bağlantı, bir bağlama noktası veya döndürülmüş bir dizin gerçek dosyayı verdiğiniz iznin asla ulaşmadığı bir yere koyabilir. Önce ad aracıyla yolu yürüyün, sonra her düzeyi söz konusu hesapla karşılaştırın. Üst düzey dizini tahmin etmek, bir düzeltmenin bir düzey fazla yükseğe inmesinin yoludur.
O anda kimin yazdığını belirleyin
Herhangi bir şeyi değiştirmeden önce hizmet birimini, onun drop-in'lerini ve daemonun kendi hesap ayarlarını kontrol edin. Ekleyen süreç ile yeniden oluşturan süreç farklı olabilir: bir rotasyon yardımcısı, bir durum yazıcısı ve bir web okuyucusu nadiren aynı kimliği paylaşır.
root kabuğundan çalıştırılan bir test kısıtlı bir hizmeti yeniden üretmez, ve hizmet başarısız olmaya devam ederken başarılı olacaktır. Başarısız işlemi aynı birim altında, aynı hesapla ve aynı sandbox ayarlarıyla yeniden üretin. Yapamıyorsanız birimi geçici bir kabukla başlatın ve bildirdiği kimliği kontrol edin. Başka her şey hizmeti değil, terminalinizi ölçer.
Oluşturma gerçekten gerekiyorsa yazıcıya ayrılmış günlük dizinine erişim verin ve tüketiciler için okuma erişimini ayrı tutun. Tek bir günlükleme çağrısını karşılamak için paylaşılan bir hesabı veya tüm uygulama ağacını yazılabilir yapmak küçük bir sorunu büyük bir sorunla değişir.
Sorunu geri getirmeden döndürün
Dosyayı yeniden oluşturan kişi sonraki döngü için sahibini ve modunu belirler, bu yüzden düzeltmeyi rotasyon yapılandırmasıyla koordine edin. Başka bir hesap altında ya da yeni bir ACL ile oluşturulan bir yedek, başarılı bir düzeltmeden sonra arızayı geri getirir.
Modu ve grubu oluşturma sırasında ayarlayın, sonra değil, ve sonraki ekleme yerine sonraki rotasyonu doğrulayın. Ekleme yalnızca zaten geçmiş testi yineler. Rotasyon aracı bir oluşturma modu ayarı sunuyorsa, oluşturmadan sonra chmod yerine onu kullanın. Oluşturma ile chmod arasındaki boşluk tam olarak sonraki yazmanın başarısız olabileceği andır.
Kısaltma yine de başarısız olduğunda izin eklemeyi bırakın
Yazabildiğiniz bir dosyayı kısaltmanın başarısız olması dizin izinleriyle açıklanmaz ve bunlardan daha fazlasını eklemek yardımcı olmaz. Bunun yerine özniteliklere ve kısıtlamaya bakın: append-only özniteliği yalnızca ekleme modunda yazmaya izin verir ve salt okunur bir bağlama veya hizmet sandbox'ı ACL'nin izin verdiği bir işlemi reddedebilir.
Birimin dosya sistemi kısıtlamalarını ve yolun bağlama seçeneklerini kontrol edin, ardından başarısız olan tam işlemi yeniden üretin. Hiç başvurulmamış bir izni genişletmek yalnızca hangi kısıtlamanın gerçek olduğunu gizler. Tek seferlik bir birimde her defasında bir kısıtlamayı kaldırın ve kalıcı bir şeyi değiştirmeden önce geri alın.