Despre această serie de articole
În mod obișnuit, administratorul UNIX® aplică în mod regulat o serie de utilitare, trucuri și sisteme. Pentru a simplifica diferitele procese, puteți utiliza utilitare standard, interfață de linie de comandă și scripturi. Unele dintre aceste instrumente vin cu sistemul de operare, dar majoritatea tehnicilor sunt construite pe baza experienței practice și a dorinței administratorului de a-și simplifica viața. Scopul acestei serii este de a descrie majoritatea instrumentelor disponibile pentru diferite sisteme bazate pe UNIX, inclusiv instrumente pentru simplificarea administrării mediilor eterogene.
Verificarea conținutului fișierelor
Verificarea fișierelor de configurare (și, dacă este necesar, a fișierelor de aplicații) care alcătuiesc baza sistemului UNIX și asigurarea funcționării neîntrerupte poate dura mult timp. În plus, această procedură este un element cheie de securitate, nu doar garantând corectitudinea setărilor sistemului, ci verificând dacă sistemul de securitate este într-adevăr de încredere.
Deci, cum verific conținutul fișierelor?
Există mai mulți parametri care trebuie luați în considerare. Fiecare dintre elementele de mai jos poate duce la probleme dacă acestea sunt modificate în configurația de lucru:
- conținutul dosarului;
- proprietarul dosarului;
- grup de proprietari;
- permisiuni de fișiere;
- timpul schimbării;
- timpul de creație.
Cea mai ușoară modalitate este să salvați o copie a fișierelor de configurare (și setările corespunzătoare) pe un alt computer și apoi să comparați periodic fișierele locale cu cele de la distanță. Problema este că stocarea unei copii a fișierelor de configurare poate necesita o cantitate semnificativă de spațiu pe disc, iar procedura de copiere și comparare poate fi destul de lungă în timp. În plus, în timpul procesului de înregistrare, fișierele de configurare se pot schimba.
O altă metodă frecvent utilizată este pur și simplu înregistrarea informațiilor despre dimensiunea fișierului, data schimbării, drapelul și proprietarul. Deoarece această informație ocupă mult mai puțin spațiu, este mai ușor să stocați și să verificați mai repede decât conținutul complet al fișierelor.
Problema este că dimensiunea fișierului nu garantează încă păstrarea conținutului fișierului. Luați în considerare un astfel de fișier de configurație alcătuit dintr-o linie:
Și același fișier cu șirul modificat:
Ambele rânduri ale fișierului au o lungime de 22 de caractere, dar conținutul lor este diferit și, deși verificarea dimensiunii fișierului nu va dezvălui diferența, această schimbare relativ nevinovată poate avea consecințe grave.
Ca și alți parametri, timpul de modificare, pavilionul și alte informații pot fi modificate, de exemplu, puteți schimba timpul de schimbare utilizând comanda tactil. Chiar și timpul pentru a crea un fișier poate fi falsificat prin modificarea timpului de sistem și crearea din nou a fișierului.
Nu este suficient să scrieți doar aceste informații, aveți nevoie de o metodă eficientă de comparare a conținutului fișierelor. Probabil cel mai bun mod de a face acest lucru este să utilizați sumele de control ale fișierelor.
Sumă de verificare a fișierului
Crearea sumelor de control pentru fișiere este o metodă clasică de comparare a conținutului fișierelor fără a fi necesară compararea fizică a tuturor octeților din fiecare fișier.
Mecanismul de control se bazează pe prelucrarea conținutului unui fișier și generarea unei imprimări aproape unice a conținutului acestuia. Această sarcină poate fi efectuată în mai multe moduri. De exemplu, puteți adăuga valoarea fiecărui octet împreună cu utilizarea algoritmului utilizat pentru a calcula complex biti individuali sau un grup de biți din fișierul specificat. Alegerea finală a metodei de calcul a sumelor de control se află în afara domeniului de aplicare al prezentului articol și depinde de instrumentul de verificare a sumelor de verificare utilizate.
În UNIX, există o comandă simplă pentru lucrul cu sumele de control - sumă. Această comandă este foarte limitată în ceea ce privește capacitățile sale, dar creează un număr destul de unic care poate fi folosit pentru a detecta diferențele dintre majoritatea fișierelor. Cu toate acestea, acest algoritm are limitări. Multe programe moderne acceptă comanda md5. care creează un fișier de amprentă de 128 biți și poate genera teoretic o semnătură unică pentru orice fișier de orice dimensiune.
Algoritmul md5 pentru generarea informațiilor privind suma de control a fost inițial conceput pentru a crea amprente digitale unice înainte de a cripta fișierele pentru a garanta integritatea fișierelor decriptate. Sumele de verificare create cu md5 pot fi reprezentate ca un șir binar, un șir hexazecimal sau un șir codificat cu metoda base64. Ultimul format este utilizat în mesajele MIME de poștă electronică pentru a furniza un identificator unic pentru diverse atașamente.
Crearea sumelor de control ale fișierelor
Deoarece soluțiile de lucru cu informații despre sumele de control utilizează interfața liniei de comandă, puteți crea o sumă de control a oricărui fișier direct din linia de comandă. Un bun exemplu de utilizare a unei sume de control este fișierele menționate mai sus, care au aceeași lungime, dar conținutul diferit.
Puteți crea o sumă de control a două fișiere cu o singură comandă, după cum se arată în listare 1.
Listing 1. Creați o sumă de control a două fișiere cu o singură comandă
Deși fișierele diferă între ele numai în două caractere, sunt obținute două sume de control distincte diferite. Listă 2 arată aceleași fișiere procesate cu md5.
Listing 2. Prelucrarea fișierelor cu md5
Aceste sume de control variază considerabil și nu există nicio îndoială că aceste fișiere diferă unele de altele.
O altă metodă este să utilizați Perl pentru a genera informații despre suma de control. Pentru aceasta, utilizați modulul Perl Digest :: MD5. care poate crea sumele de control MD5 din orice șir de date sau fișier specificat.
Lista 3 prezintă un script simplu care returnează suma de control MD5 pentru fișierul descărcat pe linia de comandă, sub forma unui șir hexagonal (identic cu formatul din lista 2).
Listarea 3. Un script care returnează suma de control MD5
Puteți rula acest script pentru a procesa fișierele anterioare. Rezultatul ar trebui să aibă aceleași informații ca în Lista 4.
Listing 4. Prelucrarea acelorași fișiere cu Digest :: MD5
Pentru a simplifica procesul, este necesar să scrieți informațiile primite într-un fișier pentru a compara mai târziu informațiile obținute. Înainte de aceasta, adăugați informații suplimentare pentru comparație (timpul de schimbare, dimensiunea fișierului, proprietar, inode și așa mai departe).
Adăugarea de informații suplimentare în raport
Funcția Perl stat () poate obține o mulțime de informații din fișierul dat, dintre care majoritatea pot fi utilizate. Lista de informații care pot fi obținute este prezentată în Lista 5.
Lista 5. Funcția Perl stat ()
Puteți scrie aproape toate aceste informații, dar unele dintre ele sunt inutile, deoarece fie se schimbă prea des, fie se resetează atunci când reporniți. Ca regulă, ar trebui să se excludă următorii parametri:
- rdev-este folosit numai pentru fișiere speciale (dispozitive sau conducte) și, prin urmare, de regulă, poate fi exclusă.
- atime - ultimul timp de acces se modifică de fiecare dată când fișierul este accesat. Aceasta înseamnă că fișierul va arăta ca schimbat, chiar dacă nu sa schimbat cu adevărat. Urmărirea acestui parametru poate duce la declanșarea falsă a sistemului de comparație.
- blksize-este utilizat în sistemul de fișiere de intrare-ieșire. Acest parametru este puțin probabil să se schimbe, cu toate acestea alți factori care nu au legătură cu schimbarea fișierului pot duce la o modificare a valorii acestui parametru, astfel că urmărirea acestuia pentru controlul integrității fișierelor nu are sens.
- blocuri - numărul de blocuri ocupate de fișier în sistemul de fișiere. Această informație este asociată cu fișierul, dar dacă dimensiunea fișierului este deja controlată, scrierea acestui parametru va fi superfluă.
Următorii parametri sunt utilizați pentru urmărirea în cazuri speciale:
- dev-Numărul dispozitivului din sistemul de fișiere trebuie să fie constant, indiferent de repornirea acestuia, dacă nu există nici o montare și deconectare permanentă a sistemelor de fișiere. Dacă sistemele de fișiere sunt montate în aceeași ordine de fiecare dată când reporniți, numărul dispozitivului trebuie să rămână constant.
- nlink-numărul de linkuri fixe la un fișier poate dezvălui crearea unei legături fixe la un fișier în locul în care acest fișier poate fi suprascris și poate ocoli permisiunile fișierului sursă. Nu puteți avea o legătură fixă la fișier cu proprietarul și permisiuni care diferă de fișierul original.
- ctime - timpul modificării inodului se poate modifica atunci când fișierul este creat sau când proprietarul sau pavilionul se modifică. Dacă acest parametru sa modificat, acest lucru poate indica faptul că parametrii corespunzători ai fișierului s-au modificat, chiar dacă s-au întors la valorile originale.
Lista 6 arată codul de script care transmite calea către fișiere și suma de control către dispozitivul de ieșire standard ca coloane separate. În plus față de suma de control, sunt afișate informații suplimentare, astfel încât pur și simplu să comparăți emiterea, puteți înțelege dacă fișierele s-au schimbat.
Afișarea 6. Afișarea căii către fișiere, suma de control și alte date către un dispozitiv de ieșire standard
Scriptul utilizează modulul Perl File :: Find. care procesează directorul și caută toate fișierele și directoarele din locația specificată. Pentru fiecare fișier, funcția search () este chemată. și în această funcție pentru toate fișierele, se numește funcția genchksuminfo (). Acesta primește informații folosind stat () și returnează un șir cu informații despre calea către fișier, suma de control și datele suplimentare. În acest script, informațiile se transmit simplu la un dispozitiv de ieșire standard.
Directorul de scanare este specificat ca parametru de comandă. Pentru a prelua datele despre sumele de control pentru fișiere din directorul / etc, utilizați comanda afișată în listare 7.
Listing 7. Scanarea / etc
Etapa finală a procesului este de a salva informații și de a oferi o modalitate de a compara starea actuală cu cea de referință.
Verificarea informațiilor sumelor de control
Scriptul rezultat (Listing 8) se bazează pe codul din Listing 6. Acest script este semnificativ îmbunătățit comparativ cu originalul și include mai multe caracteristici noi:
- Procesarea parametrilor liniei de comandă utilizând modulul Getopt :: Long. Cu ajutorul lor, puteți specifica fișierul de control (magazin de control și alte informații primite), sau nu pentru a compara noile informații cu anterioare (prin citirea conținutului chksumfile) și capacitatea de a atribui un director de acasă pentru a căuta. La compararea fișierelor, datele sunt actualizate și sunt afișate doar diferențele.
- Funcția loadchksumdata () pentru încărcarea și procesarea unui fișier de date existent facilitează compararea informațiilor vechi și noi.
- Funcția de raport de jandarmi (). care compară direct câmpurile individuale ale statelor curente și cele salvate, pentru a raporta modificările. Această funcție este chemată numai dacă se știe că a existat un anumit tip de schimbare.
Lista 8. Scenariul final
Pentru a utiliza acest script, trebuie mai întâi să creați un fișier cu un sumă de control de referință și alte date care să servească drept bază pentru comparație. De exemplu, pentru a obține datele de control pentru fișiere din directorul / etc, puteți utiliza următoarea comandă:
Acum, dacă aveți aceste informații, dacă faceți modificări în fișiere și reluați din nou scriptul, se va crea un raport de modificare. În listare 9, puteți vedea un raport despre modificarea fișierului / etc / hosts.
Listing 9. Raportați schimbarea fișierului / etc / hosts
Rețineți că raportul afișează informații despre modificarea fișierului și ștergerea fișierului. Când se creează fișiere noi, se adaugă și informații în raport.
Utilizarea informațiilor privind suma de control
Folosind scriptul din listare 6, puteți crea un fișier pe care îl puteți utiliza pentru a testa și verifica integritatea sistemului. Existența acestui fișier implică necesitatea de a stoca aceste informații într-un loc sigur, în caz contrar cineva poate să actualizeze aceste informații, inclusiv pe cei care au folosit în mod malefic calculatorul și au schimbat fișierele pe care doriți să le protejați.
Nu există reguli clare și simple cu privire la aceste informații, dar ar trebui să fie clar că nu ar trebui să stocați fișierul rezultat pe aceeași mașină unde a fost creată, altfel poate fi găsită și modificată. Același lucru este valabil și pentru stocarea unui fișier pe o altă mașină din aceeași rețea. Odată ce fișierul este detectat, acesta poate fi modificat sau înlocuit. Probabil cea mai bună soluție ar fi să scrieți fișierul pe un CD sau DVD și să îl stocați separat de computer.
Deși acest lucru complică puțin procesul, beneficiile protejării informațiilor din aceste fișiere sunt neprețuite.
concluzie
În acest articol, am analizat crearea unui script pe care îl puteți utiliza pentru a verifica integritatea fișierelor sau a unui director cu fișiere. Informațiile monitorizate includ calea spre fișier și suma de control, prin urmare puteți compara conținutul fișierelor și informațiilor unice despre fișier (inode, permisiuni, informații despre proprietar) și identificați diferențele, dacă există.
Folosirea acestui script rămâne la discreția dvs. Aveți posibilitatea să salvați informații și să executați periodic scriptul, după ce apar problemele imediat, sau să utilizați acest fișier ca instrument de diagnosticare pentru a înțelege ce fișiere s-au modificat și pentru a crea o listă de fișiere de verificat.