Linux sunucusunda kaybolan dosyalar


13

Bir kullanıcının ana dizininden kaybolmaya devam eden 4 belirli dosyam var. Bildiğimiz kadarıyla, onları kaldıracak cronjobs veya diğer otomatik görevler yoktur. Onları denetledim, ancak günlükler gerçekten ilgi çekici bir şey göstermiyor. Yedekleme hizmet programımızın artık orada olmadıkları noktaya kadar her gece eriştiğini görüyorum, ama başka bir şey yok. Bu dosyaların kaldırılmasına neden olacak ve denetlenecek bir şey var mı?

Söz konusu dosyalar şunlardır:

/home/username/.bashrc
/home/username/.bash_profile

ve bu kullanıcının .ssh dizinindeki birkaç dosyayı içerir. "Keepers" adlı bir alt klasöre yerleştirilen bu dosyaların kopyaları da aynı anda silinir. Onlara ilişkin izinleri 000 olarak değiştirmek ve köklerine sahip olmak yardımcı olmamıştır.

Şu anda oluşturmak, silmek, bu alt klasörde hareket etmek için inotifywait kurulumunu aldım, umarım bu bir şey ortaya çıkarır, ancak ne zaman meydana geldiğini değil, ne olduğu hakkında çok fazla oturum açmaz.


1
Lütfen gönderilerinize adlarını ve yollarını ekleyin, yardımcı olabilir.
Shadok

2
Ayrıca denetim günlükleri yayınlamak da yararlı olabilir.
Janne Pikkarainen

3
Ayrıca hala kaldırılıp kaldırılmadığını görmek için root ve chmod 000 olarak sahip olunan dosyaları oluşturmayı deneyebilirsiniz (veya başka bir şeyin şikayet etmesine / hata yapmasına neden olup olmadığını).
polinom

5
Chmod 0000'a ek olarak, root kökünün bile kaldırmasını önlemek için chattr + i'yi deneyebilirsiniz
mer

1
chattr'in ek dosya sistemlerine yardımcı olduğunu unutmayın. ama bir chattr yardımcı olacaktır. :-) Bu dosyaların değiştirilmesini durdurmak için chattr yerine SELINUX'u da kullanabilirsiniz. ancak IMHO'nun silinmesi bir işlem veya kullanıcıdan gelmelidir.
JMW

Yanıtlar:


20

Çözüm 1 : systemtap Sistemin ve dosyalarının üzerindeki unlink () yöntemini kullanmaya çalışan tüm PID'leri göstermek
için systemtap kullanabilirsiniz ..bashrc.bash_profile

Çekirdeğiniz için systemtap ve hata ayıklama sembollerini yükleyin .

unlink.stapAşağıdaki içeriğe sahip bir dosya oluşturun :

probe syscall.unlink
{
    printf ("%s(%d) unlink (%s) userID(%d)\n", execname(), pid(), argstr, uid())
}

Sonra ile çalıştırın sudo stap unlink.stap

Çözüm 2 : inotify Dosyanın ne zaman silindiğini görmek
için inotify'ı da kullanabilirsiniz .

Çözüm 3 : ftrace
Başka bir çözüm ftrace kullanmaktır :

trace-cmd record -e \*unlink\*

Dosyanın silinmesini bekleyin, durdurmak için CTRL + C tuşlarına basın trace-cmd record ..., ardından çalıştırın:

trace-cmd report

Çözüm 4 : Bpftrace
Install bpftrace, ardından çalıştırın:

bpftrace -e 'tracepoint:syscalls:sys_enter_unlink* { printf("%s %s\n", comm, str(args->pathname)); }'

5

micea'nın cevabına ek olarak, dosyaları roottr olarak chattr + i ile sohbet edebilir ve kaldırmaya çalışırken bir şey kaydedip kaydetmediğini görebilirsiniz.


4

Kullanıcının kendisinin (yanlışlıkla) onları silmediğinden kesinlikle emin misiniz?

Aynı sorunu olan bazı clueless (Windows) kullanıcılarım vardı. Bir ftp istemcisi ile evlerini her ziyaret ettiklerinde bu dosyaları kendileri sildikleri ortaya çıktı. .Xxxx dosyalarını fark ettiler (ftp istemcisi bunları gizlemedi) ve "karmaşayı" kaldırdı.

Biri birkaç gün önce sildiği kendiliğinden görünen dosyalar hakkında şikayet edene kadar bunu kendilerine yapmamışlardı.


2
İnan bana, bu kadar kolay olmasını isterdim.
Chad P

Bu komikti :)
ek

3
Şimdi komik .... Olduğu zaman o kadar da değil ve neler olduğunu anlayamadım. @Chad P: Lütfen ne bulduğunuzu bize bildirin. Bunu oldukça meraklı buluyorum.
Tonny

3

Oturumu kapattıktan sonra belirli dosyaları temizlemek için bash çıkış çıkış komut dosyaları (~ / .bash_logout) kullanıyoruz - belki de içinde yağ parmaklı bir glob ile bu kuruluma sahip olup olmadığınızı kontrol edebilirsiniz.


2

Daha fazlası, bir find / home / user-name dosya adı -exec rm -f {} \ yapan bir davetsiz misafir gibi görünüyor ; sonuçta onun gizlice :). Sadece tahmin ediyorum, çünkü yedekleme dosyalarının da silindiğinden bahsettiniz.


1

Dosyaların ve içeriklerinin kaybolmasını önlemek için libtrash'i ayarlayabilirsiniz. LD_PRELOAD aracılığıyla . Libtrash kullanarak birçok şey yapabilirsiniz, ancak sizin için ilginç olabilecek şeyler

INTERCEPT_UNLINK
INTERCEPT_RENAME
INTERCEPT_FOPEN
INTERCEPT_OPEN

Libtrash hakkında iyi bir makale burada bulunabilir

Bahsettiğiniz başka bir şey, dosyaları köklendirmek için seçtiğiniz ve yine de kaldırıldıkları. Çünkü / home / username kullanıcı adına aittir; ve dir, mod 755 diyorsa; o zaman kullanıcı tarafından kaldırılabilecek olan herhangi bir dosya veya dizin o dosyaya ait değildir; kök dosya veya dir olsa bile. Temelde dir dosya kaldırmak dir içeriğini değiştirmek anlamına gelir ve kullanıcı o dir 7 (755) sahip böylece istediği her şeyi yapabilir.

Bunu başkalarının, dosyaları değiştirilemez (+ i) olarak ayarlamak için ext dosya sistemlerinde chattr aracılığıyla önerdiği gibi engellemenin yolları vardır. Daha sonra, + i bayrağına sahip olan dosya / dir üzerinde herhangi bir değişiklik yapmadan önce değişmez bayrağın ayarının kaldırılması gerekir. Değişmez bayrak / chattr sadece kök tarafından kullanılabilir.

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.