Bütün bir linux sunucusunun kaynak kontrolü altına alınması (git)


17

Git kullanarak tüm linux sunucumu sürüm kontrolü altına almayı düşünüyorum. Bunun arkasındaki neden, kötü niyetli değişiklikleri / kök setlerini tespit etmenin en kolay yolu olabilmesidir. Sistemin bütünlüğünü kontrol etmek için saf olarak gerekli olduğunu düşündüğüm tek şey: Linux bölümünü her hafta bir kurtarma sistemi kullanarak monte edin, git deposunun hala bozulmamış olup olmadığını kontrol edin ve sonra sistemde yapılan değişiklikleri tespit etmek için bir git durumu verin .

Disk alanındaki bariz atığın yanı sıra, başka olumsuz yan etkileri var mı?

Tamamen çılgın bir fikir mi?

En azından / dev ve / proc'u hariç tutmam gerektiğinden rootkit'lere karşı kontrol etmenin güvenli bir yolu mu var?


5
"Tamamen çılgın bir fikir" için oy kullanırım, çok fazla çıkarım. Dosyalarda her zaman değişiklik olacak ve yükseltme prosedürlerini kabus haline getirecektir.
forcefsck

@forcefsck - dosya değişiklikleri neden sürekli oluşsun? Sadece sistem yükseltme sırasında meydana gelmemeli midir?
Tobias Hertkorn

1
Sadece bir düşünce, neden --link-dest ile dirvish veya rsync gibi bir şey kullanmıyorsunuz ? Yedeklerinizi yapmak için dirvish kullanırsanız, her yedekleme için neyin değiştiğini gösteren güzel bir rapor verecektir. Geçerli durumu yedeklemenizle karşılaştırmak için rsync - kuru çalışma modunda. Kirli kullanıyorsanız, yedekleme sistemi olarak iyi test edilmiş bir araç kullanacaksınız.
Zoredache

Yanıtlar:


16

Bu bir "Kötü Fikir" (tm). Her şeyden başka, deponuz her halt gibi yavaş çalışacak ve her revizyon tutuldukça daha da kötüleşecektir.

Kukla / cfengine / chef gibi merkezi yönetimi deneyin. Bu, işleri beklediğiniz gibi tutacak ve beklenmedik değişiklikleri geri alacaktır.

Yetkisiz dosya değişikliklerinin e-postalarını almak için bunu iwatch gibi bir şeyle birleştirin.

Özel uygulamaları kullanıma sunmak için gerekirse rpm / deb dosyalarıyla daha da birleştirin.

Rkhunter veya chkrootkit gibi bir şeye at ve sonra tekmeler için ve gitmek için iyi olmalısın.

İş bitmiş.


Kötü Fikir için +1 - Merkezi yönetim (kukla / cfengine / şef / radmind / vb.), Sisteminizin tanımlanmış gereksinimlerinize göre yapılandırılmasını sağlama yeteneği sağlar ve çoğu "tripwire" olarak da kullanılabilir ne zaman değişmesi gerektiğini size bildirmek için sistem yazın.
voretaq7 17:11

Bence bu gerçekten kötü bir fikir. Tamam, hangi dosyaların yeni ve değiştiğini görebilirsiniz. Ancak git'i çalıştırırsanız, dosyalarınızı açmak ve hesaplamak için çok fazla işlemci gerekir. Bunu tüm makinede yaparsanız çok zaman alır.
René Höhle

1
Bu listeye bir tane daha atacağım; Etckeeper git repo'yu sadece / etc hariç yapacaktır.
Shane Madden

git gibi depolar inanılmaz derecede hızlı. Ve aklımdaki sunucunun kesinti süreleri (bu nedenle bir kurtarma sistemi kullanarak monte etme olasılığı) olduğundan CPU veya IO hakkında endişelenmiyorum
Tobias Hertkorn

Anlamadığım şey: Merkezi yönetim sistemleri yanlış pozitif olmadığını nasıl garanti eder - sistem tehlikeye
atılır

5

Başka bir alternatif, sisteminizdeki tüm önemli dosyalar arasında örümcek oluşturan ve hangilerinin kabul edilemez olarak tanımladığınız şekilde değiştiğini belirleyen GPL yazılımı olan tripwire'ı kurmaktır. Değişim, kriptografik olarak güçlü sağlama toplamlarına kadar, inode numarası ile basitçe mtime olarak tanımlanabilir.

Her gece değişen dosyalar /var/run, DHCP istemci dosyalarındaki değişiklikler /etcve benzerleri hakkında çok fazla rapor almak istemiyorsanız, bazı ayar ve ayarlama yapmak gerekir , ancak bu sorunla karşılaşırsanız, gerçekten çok yararlı.

Dosya özelliklerinin veritabanı bir anahtarla imzalanmış değil hiçbir alet kötü niyetle veritabanı veya tuzak teli ikilileri değiştiğini güven yardımcı makineye bilinen. Tam bir kesinlik için, tripwire araçlarının ve veritabanlarının bir kopyasını, salt adli bir ortama yazabilirsiniz; bu, sunucuya monte edilebilir ve tam bir adli analiz gerekiyorsa, disk yazdırıldığından beri tüm değişiklikleri doğrulamak için kullanılabilir.

Bunu yapacaksanız, makine üretime dağıtılmadan önce tripwire'ın kurulması ve çalıştırılması oldukça önemlidir veya bazı kötü niyetli kullanıcıların makineye daha önce bulaşma şansı olmadığından asla emin olamazsınız. tripwired.


3

Bunun işe yaramadığını düşünmüyorum, ancak bir deneme olarak, bunu sadece / etc klasörü ile yaparsanız ne olacağını görmek istiyorum. Bu, yapılandırma bilgilerinin çoğunun saklandığı yerdir.


4
Sadece / etc yapılıyor. Check out kitenet.net/~joey/code/etckeeper (etckeeper)
Tobias Hertkorn

1
etckeeper gerçekten güzel çalışıyor, çok kullanışlı buluyorum.
Zoredache

2

@Sirex zaten çok iyi bir cevap verdi, ancak güvenlikle ilgili bir adım daha atmak istiyorsanız, bununla başa çıkmanın en iyi yolu önce önleme sonra algılamadır.

/ Filesystem monteli salt okunur olarak bir sistem kurmayı deneyin. / Tmp noexec, nodev seçeneği ile monte edilmiş ayrı bir ramfs yapın. Sistemin çalışması için gerçekten sadece okuma / yazma monte edilmesi gerekir. Yani / var altında rw, noexec, nodev ile bir fs bağlanır ve / var / tmp (afaik, nadiren daemons tarafından ihtiyaç duyulur ve yapılandırılabilir olmalıdır) yazma izinlerini kaldırır. Ayrıca, kullanıcılar tarafından kaynaklara erişimi daha da sınırlandırmak için çekirdeğiniz için bir güvenlik düzeltme eki kullanın, örneğin grsec'i deneyin. Mümkün olan en kısıtlayıcı kurallara sahip bir güvenlik duvarı kullanın.

Bazı dağıtımlar sistem sertleştirmesi hakkında kapsamlı belgeler sunar. Örneğin:


0

Bir aracın sisteminizde yaptığı değişiklikleri analiz etmenin iyi bir fikir olduğunu düşünüyorum:

  1. VM'ye çıplak bir Linux kurmak
  2. root git'i başlat
  3. analiz etmek istediğiniz aracı yükleyin
  4. sisteminizde yapılan tüm değişiklikleri görün

... VM'yi sil

.gitignore Proc, vb. Olsa da dosyaya çok sayıda klasör eklemeniz gerekir .


0

Tüm dosya sistemindeki belirli klasörleri sürüm kontrolü altında tutmakla ilgileniyorsanız, aşağıdaki yaklaşım işe yarayabilir:

İlk olarak, /seviyede bir Git deposu oluşturun :

$ cd /
# git init

Ardından /.gitignoreyalnızca belirli klasörleri beyaz listeye ekleyen bir liste oluşturun , örneğin yalnızca beyaz listeye ekleyin /path/to/versioned/config/folder/( /programming//a/11018557/320594 temel alınarak ):

/*
!/path/
/path/*
!/path/to/
/path/to/*
!/path/to/versioned/
/path/to/versioned/*
!/path/to/versioned/config/
/path/to/versioned/config/*
!/path/to/versioned/config/folder/
!/.gitignore

Ardından bir ilk taahhüt oluşturun:

# git add -A
# git commit -m "Initial commit"

Ardından, isteğe bağlı sürüm denetimi altında istediğiniz ek klasörleri ekleyin.

Not:

Önceki yönteme ek olarak, / etc / sürümünü sürüm denetiminde tutmanız gerekiyorsa , belirli bir klasörü bu amaç için daha özel olduğu için sürümlemek için etckeeper( https://etckeeper.branchable.com/ ) kullanmayı tercih edebilirsiniz ( örneğin paketleri kurduktan sonra otomatik olarak çalışır).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.