Bu, LAMBA yığınını korumaya ilişkin Kanonik bir Soru
Bir LAMP sunucusunu güvenli hale getirmenin kesin kuralları nelerdir?
Bu, LAMBA yığınını korumaya ilişkin Kanonik bir Soru
Bir LAMP sunucusunu güvenli hale getirmenin kesin kuralları nelerdir?
Yanıtlar:
David'in cevabı, sunucu sertleştirmenin genel prensiplerinin iyi bir temelidir. David'in dediği gibi, bu çok büyük bir soru. Uyguladığınız belirli teknikler, ortamınıza ve sunucunuzun nasıl kullanılacağına bağlı olarak değişebilir. Uyarı, bunun doğru bir şekilde yapılması ve yapılması için bir test ortamında çok fazla çalışma yapmanız gerekebilir. Üretim ortamınıza ve daha da önemlisi iş sürecinize entegre etmek için yapılan çok fazla çalışmanın ardından geldi.
Ancak, önce kuruluşunuzun herhangi bir sertleştirme politikası olup olmadığını kontrol edin; bunlar doğrudan ilgili olabilir. Değilse, rolünüze bağlı olarak, bunları oluşturmak için uygun bir zaman olabilir. Ayrıca her bir bileşeni aşağıdan yukarıya doğru ayrı ayrı ele almanızı tavsiye ederim.
L
Size yardımcı olacak birçok iyi rehber var. Bu liste dağıtımınıza bağlı olarak size yardımcı olabilir veya olmayabilir.
A
Apache güvenliğini sağlamak için eğlenceli olabilir. İşletim sistemini sertleştirmeyi ve kullanılabilirliği sürdürmeyi Apache veya PHP'den daha kolay buluyorum.
M
P
Bu, tamamen kendi başına bir disiplin olan Güvenli Programlama Uygulamaları fikrine tam olarak devam eder. SANS ve OWASP konuyla ilgili çok saçma bir bilgiye sahipler, bu yüzden burada kopyalamaya çalışmıyorum. Çalışma zamanı yapılandırmasına odaklanacağım ve geliştiricilerinizin geri kalanı için endişelenmesine izin vereceğim. Bazen LAMP içindeki 'P', Perl, ancak genellikle PHP anlamına gelir. İkincisini farz ediyorum.
Açıkçası, konuyla ilgili birkaç kitaba layık bir soru sordunuz. Ancak iyi çalışan bazı genel temel kurallar vardır:
Umarım bu başlamanıza yardımcı olur.
İşte başlamak istediğim iyi bir kontrol listesi.
David'in önerdiğine ek olarak, kurulumunuz ne kadar modüler olursa olsun, belirli bir görev için özel olarak oluşturulmuş belirli kullanıcılara / gruplara erişimi kısıtlamak ve kapsamlarını sınırlandırmak demek istiyorum, LAMP yığınınız daha güvenli: Bunun bir Apache kullanıcısı olması Apache dosyaları / klasörleri, kritik sistem dosyalarına / klasörlerine erişebilen hiçbir grupta değil, buna göre ayarlanmış izinlere sahiptir. Web sitelerinizle ilişkili MySql tablolarına erişeceğiniz ve yalnızca bu tablolara erişebilecek bir kullanıcı. Ek olarak, bir PHP çağrısından minimum erişim sağlamak için erişimlerini kısıtlayabilirsiniz. Ayrıca, PHP dosyası aracılığıyla kullanılan / kullanılan MySQL kullanıcı adının başka bir kullanıcı için kullanılan aynı kullanıcı adı veya parola olmadığından emin olun.
Bunun anlamı şudur: apache kullanıcısı veya MySql kullanıcısı tehlikeye atılırsa, klasör (ler) in kapsamı dışında (apache kullanıcısı durumunda) ve tablonun dışında erişebildiği hiçbir zarar veremez. s) / database (s) (MySQL veritabanı için kullanıcı durumunda).
Eğer bir şekilde MySQL kullanıcısı tehlikeye atılsaydı, örneğin, veritabanına erişip tüm veritabanlarını MySQL'den çıkaramaz ve tüm verilerinizi mahvedemezlerdi. Bazı koşullar altında izole bir veritabanında tablolar bırakabilir veya bazı tablolara bilgi ekleyebilirler, bu nedenle yalnızca kesinlikle gerekli olduğu durumlarda tablo erişimini sağlamak ve sadece gerekli izinleri vermek önemlidir. tabloların ayrıcalıklarına veya güncelleme ayrıcalıklarına sahip olmanız gerekmiyor, o zaman bu kullanıcıya vermeyin.
Ayrıca, herhangi bir nedenden dolayı yönetici hesap kullanıcı adınız ve şifreniz MySQL için tespit edilirse, sisteminizdeki herhangi bir kullanıcı adından farklı bir kullanıcı adı kullanıyorsanız, zarar vermeden önce veritabanınıza girmeden önce sisteminizin güvenliğini kırmaları gerekir. Aynı apache kullanıcısı ve dosyalara erişim için de geçerlidir.
Örnek zaman! Fikri basitleştirmek için bir sistem örneği vereceğim.
sisteminizde kullanıcılarınızın olduğunu söyleyin (root, umod -l veya passwd -l, vb. gibi bir şey sayesinde güvenlik nedeniyle devre dışı bırakılmalıdır): john, barney, terence ve lisa.
MySQL'de bigbird adıyla bir kullanıcı oluşturabilirsiniz (bir karma parola kullandığınızdan emin olun). Bigbird sadece seçkin ayrıcalıklara ve güncelleme ayrıcalıklarına sahiptir, ancak bırakma veya yaratma ve kesinlikle yapma hakkına sahiptir . Ek olarak, MySQL veritabanında çalışmak için garfield adında başka bir MySQL kullanıcısı oluşturursunuz ve kök kullanıcıyı MySQL veritabanından siler ve böylece dengelenemez. Garfield verildi . MySQL boyunca ayrıcalıklar (etkili, bu sadece kökü yeniden adlandırıyor)
Şimdi, bir apache grubu veya bir kullanıcı oluşturursunuz ve biz buna apweb2 adını veririz. Appweb2 diğer grupların bir üyesi değildir ve apache için tüm dosyalar / klasörler / home / apweb2 / 'de depolanır. Her sanal ana bilgisayarın kendi alt klasörü olur ve bu ana bilgisayarların her birinin o alt klasöre ayarlanmış belge kökü olur. Yanlışlıkla sistemin geri kalanına erişim sağlamak için sembolik bağlantılar devre dışı bırakılır.
Ayrıca, ssh erişimini yalnızca belirli kullanıcılara (veya belirli gruplara, onları ssh grubuna koymak ve ssh'yi kullanabilecek tek şeyin yapmasına izin vermeyi) kısıtlayabilirsiniz.
Ayrıca, işleri daha da kısıtlamak için hangi kullanıcıların sudo ayrıcalıklarına sahip olduğunu seçebilirsiniz. Daha ileriye atabileceğiniz başka bir adım, herhangi bir ssh kullanıcısının sudo yapamamasını sağlamaktır, ssh kullanamayan sudo kullanabilen özel kullanıcılar oluşturabilirsiniz, böylece ssh girdikten sonra, başka bir kullanıcıya giriş yapmanız gerekir. sudo erişimi.
Böylece, her bir parçayı modüler hale getirerek, eğer biri tehlikeye atılırsa, tüm yığın tehlikeye girmez ve sıfırdan baştan başlamak yerine 1 sorunu çözebilirsiniz.
Bu belgeyi SANS.org'dan gerçekten faydalı buldum http://www.sans.org/score/checklists/linuxchecklist.pdf
Şu anda, konteyner sanallaştırmasını, yani Docker, systemd-nspawn'ı ve üzerinde oluşturuldukları konteyner sanallaştırma mekanizmalarını (ad alanları, gruplar) ihmal etmeyin. Kap sanallaştırmayı kullanmak, işlemleri yalıtmanıza olanak sağlar; örneğin, hizmetlerden biri tehlikeye girerse, saldırgan diğer hizmetlere erişemez.
LAMP durumunda, örneğin, SSH-server, Apache, MySQL, PHP-FPM / Python / Perl / etc'li dört Docker konteynerini kullanmak mümkündür.