File menghilang di server linux

13

Saya punya 4 file spesifik yang sepertinya terus menghilang dari direktori home pengguna. Sejauh yang kami tahu, tidak ada cronjobs atau tugas otomatis lainnya yang akan menghapusnya. Saya sudah menyiapkan auditd pada mereka tetapi log tidak benar-benar menunjukkan sesuatu yang menarik. Saya dapat melihat utilitas cadangan kami mengaksesnya setiap malam sampai titik mereka tidak ada lagi, tetapi tidak ada yang lain. Apakah ada sesuatu yang akan menyebabkan file-file itu dihapus yang dapat di audit?

File yang dimaksud adalah:

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

serta beberapa file dalam direktori .ssh pengguna itu. Salinan file-file ini ditempatkan ke dalam subfolder yang disebut "penjaga" juga dihapus pada saat yang sama. Mengubah izin menjadi 000 dan memilikinya dimiliki oleh root tidak membantu.

Saat ini saya tidak punya pengaturan menunggu untuk membuat log, menghapus, memindahkan subfolder itu, jadi mudah-mudahan itu akan muncul sesuatu, meskipun itu tidak mencatat banyak selain dari saat itu terjadi, bukan apa yang menyebabkannya.

Chad P
sumber
1
Harap tambahkan nama dan jalur mereka ke pos Anda, mungkin membantu.
Shadok
2
Juga memposting log auditd mungkin membantu.
Janne Pikkarainen
3
Anda juga dapat mencoba membuat file yang dimiliki sebagai root dan chmod 000 untuk melihat apakah mereka masih bisa dihapus (atau jika itu menyebabkan sesuatu yang lain mengeluh / kesalahan keluar).
polinomial
5
Selain chmod 0000, Anda dapat mencoba chattr + i untuk mencoba mencegah root untuk menghapusnya
mer
1
perlu diketahui bahwa chattr hanya membantu pada sistem file ext. tapi obrolan akan membantu. :-) Anda juga dapat menggunakan SELINUX alih-alih chattr untuk menghentikan perubahan file tersebut. tapi IMHO penghapusan harus berasal dari suatu proses atau pengguna.
JMW

Jawaban:

20

Solusi 1 : systemtap
Anda dapat menggunakan systemtap untuk menampilkan semua PID yang mencoba menggunakan tautan () pada inode .bashrcdan .bash_profilefile.

Instal systemtap dan simbol debug untuk kernel Anda.

Buat file dengan nama unlink.stapdengan konten berikut:

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

Kemudian jalankan dengan sudo stap unlink.stap

Solusi 2 : inotify
Anda juga dapat menggunakan inotify untuk melihat kapan file dihapus.

Solusi 3 : ftrace
Solusi lain adalah menggunakan ftrace :

trace-cmd record -e \*unlink\*

Tunggu file dihapus, tekan CTRL + C untuk berhenti trace-cmd record ..., lalu jalankan:

trace-cmd report

Solusi 4 :
Instal bpftrace bpftrace, lalu jalankan:

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

selain jawaban micea, Anda dapat chattr + i file sebagai root dan melihat apakah ada yang mencatat kesalahan ketika mencoba untuk menghapusnya.

Sirex
sumber
4

Apakah Anda benar-benar yakin pengguna itu sendiri tidak (tidak sengaja) menghapusnya?

Saya memiliki beberapa pengguna yang tidak mengerti (Windows) dengan masalah yang sama. Ternyata mereka menghapus file-file itu sendiri setiap kali mereka mengunjungi dir-home mereka dengan klien ftp. Mereka memperhatikan file .xxxx (klien ftp tidak menyembunyikannya) dan menghapus "kekacauan".

Tidak pernah terpikir oleh saya bahwa mereka melakukannya sendiri sampai salah satu dari mereka mengeluh tentang file yang muncul kembali secara spontan yang telah dia hapus beberapa hari sebelumnya.

Tonny
sumber
2
Percayalah, saya ingin ini semudah ini.
Chad P
Ini lucu :)
jepret
3
Lucu sekarang .... Tidak terlalu banyak ketika itu terjadi dan saya tidak tahu apa yang sedang terjadi. @Chad P: Mohon beri tahu kami apa yang Anda temukan. Saya menemukan ini cukup penasaran.
Tonny
3

Kami menggunakan skrip logout bash (~ / .bash_logout) untuk membersihkan file-file tertentu saat logout - Anda mungkin memeriksa untuk melihat apakah Anda memiliki setup itu, mungkin dengan gumpalan yang memiliki jari yang gemuk.

Ram
sumber
2

Lebih mirip pengganggu, yang sedang melakukan find / home / user -name nama file -exec rm -f {} \; setelah semua nya menyelinap :). Hanya menebak, karena Anda menyebutkan bahwa file cadangan juga semakin dihapus.

SparX
sumber
1

Untuk mencegah kehilangan file dan kontennya, Anda dapat mengatur libtrash melalui LD_PRELOAD. Menggunakan libtrash Anda dapat melakukan beberapa hal tetapi hal-hal yang mungkin menarik bagi Anda

INTERCEPT_UNLINK
INTERCEPT_RENAME
INTERCEPT_FOPEN
INTERCEPT_OPEN

Artikel bagus tentang libtrash dapat ditemukan di sini

Hal lain yang Anda sebutkan, bahwa Anda mencopot file yang akan di-rooting dan mereka masih bisa dihapus. Itu karena / home / nama pengguna dimiliki oleh nama pengguna; dan jika dir mengatakan mod 755; lalu setiap file atau dir di dir itu dimiliki oleh siapa pun yang dapat dihapus oleh pengguna; bahkan jika itu adalah file root atau dir. Itu pada dasarnya karena menghapus file dir berarti mengubah isi dir dan pengguna memiliki 7 (dalam 755) dir itu sehingga dia dapat melakukan apa pun yang dia inginkan.

Ada cara untuk memblokir ini karena orang lain telah menyarankan melalui chattr pada sistem file ext untuk mengatur file sebagai tidak dapat diubah (+ i). Maka seseorang harus meng-unset flag yang tidak dapat diubah sebelum membuat perubahan pada file / dir yang memiliki flag + i. Bendera / obrolan yang tidak dapat diubah hanya dapat digunakan oleh root.

Hrvoje Špoljar
sumber