4. Nástroje pre sledovanie systému

Posledná zmena: 7/9/2021

4.1 netstat

Program "netstat" je ozajstný klenot medzi programami na správu servera. Dokáže zobraziť sieťové spojenia (otvorené porty, prebiehajúce spojenia), routovacie tabuľky a ďalšie podrobnosti týkajúce sa siete. Ak ste doteraz často používali programy "ping" a "traceroute", pripravte sa rozšíriť zbierku obľubených programov i vášho poznania.

4.1.1 Načo slúži

Ja sa budem zaoberať programom "netstat" s cieľom ukázať vám, čo všetko môžete zistiť o vašich démonoch a sieťových spojeniach. Ako sme už hovorili, každý démon zabezpečujúci nejakú sieťovú službu musí počúvať na nejakom porte. "netstat" vám tieto porty dokáže zobraziť spolu s menom procesu (démona), ktorý na porte počúva. Okrem toho dokáže vypísať adresu pripojeného klienta a vlastníka procesu. Týmto spôsobom môžete zistiť, či na vašom serveri nebežia nejaké démony, o ktorých neviete a ktoré môžu byť pokojne zadnými dvierkami používateľov. Celkom nedávno som si takto všimol, že na niektorom vysokom porte (okolo 30000) počúva proces označený ako "bash", ktorý tam vonkoncom nemal čo robiť. Boli to zadné vrátka spustené nejakým šikovným chlapíkom, ktoré každému, kto sa pripojil na daný port, umožnili pracovať s príkazovým interpreterom "bash" s právami používateľa, pod ktorým beží Apache... No srandy kopec. Bez "netstat-u" by som na to nikdy neprišiel.

4.1.2 Spustenie programu

Dosť bolo slov, prejdime k veci. Spustite program "netstat" (parametre: -p: zobraziť mená procesov, -e: zobraziť meno používateľa, -v: verbose, -a: zobraziť všetky spojenia) pod rootom:

netstat -peva

Zobrazí sa výpis podobný tomuto:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name
tcp        0      0 *:mysql                 *:*                     LISTEN      root       1216       905/mysqld
tcp        0      0 *:6000                  *:*                     LISTEN      root       1244       976/X

tcp        0      0 *:www-http              *:*                     LISTEN      root       1082       830/httpd
tcp        0      0 *:ipp                   *:*                     LISTEN      root       1330       590/cupsd
tcp        0      0 *:https                 *:*                     LISTEN      root       1081       830/httpd
tcp        0      0 hudson.marine.:www-http hudson.mari:filenet-tms FIN_WAIT2   root       0          -

tcp        1      0 hudson.mari:filenet-tms hudson.marine.:www-http CLOSE_WAIT  vix        49882      1321/galeon-bin
udp        0      0 *:ipp                   *:*                                 root       1331       590/cupsd

Podľa hlavičky sa zobrazujú aktívne internetové spojenia (čakajúce servery a prebiehajúce spojenia). Dôležité stĺpce:

Proto
protokol
Local Address
lokálny soket (adresa:port), na ktorej počúva server (ak je stav LISTEN) alebo soket, z ktorého odchádza spojenie.
Remote Address
soket (adresa:port), z ktorej prichádza požiadavka na server, alebo soket, na ktorý sa pripája lokálny proces. Ak je soket zobrazený ako "*:*", spojenie nie je nadviazané
State
stav, v ktorom sa nachádza soket. Môže mať niekoľko hodnôt, ale z hľadiska bezpečnosti nás momentálne zaujímajú prebiehajúce spojenia a čakajúce servery:
ESTABLISHED
spojenie je uskutočnené, komunikácia prebieha medzi soketmi určenými "Local Address" a "Remote Address". Ak chcete vedieť, ktorým smerom komunikácia prebieha, jedinou indíciou je skontrolovať, ktorý z portov je "štandardný", teda na ktorom normálne beží nejaká služba.
LISTEN
server čaká na požiadavky a počúva na lokálnom porte
User
používateľ, s ktorého právami beží proces
PID/Program name
PID (číslo procesu) a meno procesu

Ak chcete vidieť číselné hodnoty portov a IP adresy (ako ste videli, adresy sa nezobrazili celé), pridajte parameter "n":

netstat -pevan

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      0          1216       905/mysqld
tcp        0      0 0.0.0.0:6000            0.0.0.0:*               LISTEN      0          1244       976/X
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      0          1082       830/httpd
tcp        0      0 0.0.0.0:631             0.0.0.0:*               LISTEN      0          1330       590/cupsd
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      0          1081       830/httpd
tcp        1      0 127.0.0.1:32768         127.0.0.1:80            CLOSE_WAIT  501        49882      1321/galeon-bin
udp        0      0 0.0.0.0:631             0.0.0.0:*                           0          1331       590/cupsd

Jednotlivé riadky výpisu znamenajú:

  1. proces "mysqld" (MySQL server) bežiaci pod rootom čaká na spojenie na porte 3306
  2. proces "X" (X server) bežiaci pod rootom čaká na spojenie na porte 6000
  3. proces "httpd" (Apache web server) bežiaci pod rootom čaká na spojenie na porte 80
  4. proces "cupsd" (Common Unix Printing System) bežiaci pod rootom čaká na spojenie na porte 631 (protokol TCP)
  5. proces "httpd" (Apache web server) bežiaci pod rootom čaká na spojenie na porte 443 (obsluha HTTPS)
  6. proces "galeon-bin" (prehliadač www stránok) bežiaci pod vixom skončil spojenie z localhostu, port 32768 na 127.0.0.1, port 80. Smer spojenia sa dá dedukovať z toho, že port 80 je štandardný port pod hranicou 1024, čo znamená, že obsluhujúci proces musel byť spustený pod rootom.
  7. proces "cupsd" bežiaci pod rootom čaká na spojenie na 631 (protokol UDP)

Príkaz "netstat" normálne vypisuje aj ďalšie riadky, tie vás však teraz nemusia zaujímať. Ak by ste chceli vidieť iba procesy čakajúce na požiadavky, stačí použiť parameter "-l":

netstat -plen

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      0          1216       905/mysqld
tcp        0      0 0.0.0.0:6000            0.0.0.0:*               LISTEN      0          1244       976/X

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      0          1082       830/httpd
tcp        0      0 0.0.0.0:631             0.0.0.0:*               LISTEN      0          1330       590/cupsd
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      0          1081       830/httpd

4.1.3 Odporúčania

Cieľom krátkej ukážky výpisu "netstat" bolo ukázať vám, ako jednoducho zistiť, aké procesy na vašom serveri "počúvajú" na portoch a obsluhujú prichádzajúce požiadavky. Ako ste si všimli, pre tento účel sa stačí koncentrovať na parameter "-l". Ak budete "netstat" používať pravidelne, napríklad každú noc v nejakom jednoduchom skripte, ktorý pošle výsledky mailom, budete vidieť každú zmenu.

4.2 logcheck

Program "logcheck" slúži na filtrovanie logov servera a upozorňovanie na podozrivé udalosti. Ak ste doteraz nikdy nekontrolovali logy, nie ste skutočným správcom servera :). A ak ste to robili, určite ste si priali, aby existovala nejaká možnosť, ako logy čítať "lepším spôsobom", najmä, ak hľadáte nejakú skutočne podozrivú udalosť. V logoch servera sú totiž obyčajne aj celkom neškodné riadky, ktoré vám pri hľadaní komplikujú život.

4.2.1 Načo slúži

Program "logcheck" je určený na pravidelnú kontrolu logovacích súborov servera. Pri každom spustení analyzuje vami určené logy, odfiltruje nepodstatné riadky (niekedy ich volám "balast") a naopak, upozorní vás na zaujímavé výrazy (ja to volám "Reader's Digest :)"), ktoré pošle mailom na vami určenú adresu (najčastejšie "root"). Takže už nemusíte čítať celé logy, ale len to, čo program (na základe vašich nastavení) považuje za dôležité. Program si po skončení práce uloží pozície pre každý spracovaný log, aby nabudúce nemusel analyzovať opäť od začiatku a skončí. "logcheck" počíta aj s tým, že sa logy občas "rotujú" a v takom prípade pracuje od začiatku logu.

Definície zaujímavých výrazov sú súčasťou konfigurácie "logchecku" (rôzne udalosti a klasické chybové hlásenia, texty typu "denied", "refused", "denied", "warning" a tak podobne), ale môžete ich kedykoľvek upraviť či doplniť, ide o textové súbory. Ak viete pracovať s regulárnymi výrazmi, bude to pre vás hračka, ak aj nie, rýchlo odkukáte spôsob, akým si pridať vlastné hlásenia.

Mailom zasielané upozornenia majú tri časti: udalosti typické pre aktívny útok (cracking), udalosti typické pre porušenie bezpečnosti (violations) a udalosti pre "nezvyčajné udalosti" v systéme - čo je v podstate všetko, čo filtre z logov explicitne neodstránili.

4.2.2 Inštalácia a konfigurácia

Najjednoduchší spôsob je nainštalovať balíček "logcheck", na Debiane pomocou:

apt-get install logcheck

Počas inštalácie sa vás Debian spýta, akú citlivosť balastných filtrov má nastaviť: na výber máte "paranoid", "server" a "workstation", pričom "paranoid" odfiltruje iba malý počet balastných výrazov. "server" aplikuje filtre na balast pre "paranoid" a súčasne "server". Nastavenie "workstation" je ešte benevolentnejšie, aplikuje filtre pre "paranoid", "server" aj "workstation".

Ja osobne používam nastavenie "server" pre počítač, ktorý funguje ako server so službami a súčasne aj firewall.

Po inštalácii môžete skontrolovať spúšťací súbor pre démona "crond" "/etc/cron.d/logcheck". Ja ho mám v tomto tvare, ktorý definuje spúšťanie programu denne o 6:00 a po každom reštarte systému:

# /etc/cron.d/logcheck: crontab entries for the logcheck package

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

@reboot         logcheck    if [ -x /usr/sbin/logcheck ]; then nice -n10 /usr/sbin/logcheck -R; fi
0 6 * * *       logcheck    if [ -x /usr/sbin/logcheck ]; then nice -n10 /usr/sbin/logcheck; fi

# EOF

To znamená, že sa vás každé ráno okrem novín a čerstvej kávy bude čakať aj mail od "logchecku". Mail vás bude čakať aj v prípade, že dôjde k reštartovaniu servera - ak nepoužívate iný monitoring, dozviete sa tak o každom jeho reboote.

Konfigurácia programu sa nachádza v adresári "/etc/logcheck". V súbore "/etc/logcheck/logcheck.logfiles" sa nachádza zoznam logovacích súborov, ktoré sa budú prezerať. Upravte si súbor ako chcete, ja používam takéto nastavenie:

# these files will be checked by logcheck
/var/log/syslog
/var/log/auth.log

Konfiguračný súbor "/etc/logcheck/logcheck.conf" vyzerá takto:

# The following variable settings are the initial default values,
# which can be uncommented and modified to alter logcheck's behaviour

# Controls the format of date-/time-stamps in subject lines:
# Alternatively, set the format to suit your locale

#DATE="$(date +'%Y-%m-%d %H:%M')"

#
# Controls the presence of boilerplate at the top of each message:
# Alternatively, set to "0" to disable the introduction.
#
# If the files /etc/logcheck/header.txt and /etc/logcheck/footer.txt
# are present their contents will be read and used as the header and
# footer of any generated mails.
#
#INTRO=1

# Controls the level of filtering:
# Can be Set to "workstation", "server" or "paranoid" for different
# levels of filtering. Defaults to server if not set.

REPORTLEVEL="server"

# Controls the address mail goes to:
# *NOTE* the script does not set a default value for this variable!
# Should be set to an offsite "emailaddress@some.domain.tld"

SENDMAILTO="root"

# Should the hostname of the generated mails be fully qualified?
FQDN=1

# Controls whether "sort -u" is used on log entries (which will
# eliminate duplicates but destroy the original ordering); the
# default is to use "sort -k 1,3 -s":
# Alternatively, set to "1" to enable unique sorting

#SORTUNIQ=0

# Controls whether /etc/logcheck/cracking.ignore.d is scanned for
# exceptions to the rules in /etc/logcheck/cracking.d:
# Alternatively, set to "1" to enable cracking.ignore support

#SUPPORT_CRACKING_IGNORE=0

# Controls the base directory for rules file location
# This must be an absolute path

#RULEDIR="/etc/logcheck"

# Controls if syslog-summary is run over each section.
# Alternatively, set to "1" to enable extra summary.

#SYSLOGSUMMARY=0

# Controls Subject: lines on logcheck reports:

#ATTACKSUBJECT="Attack Alerts"
#SECURITYSUBJECT="Security Events"
#EVENTSSUBJECT="System Events"

# Controls [logcheck] prefix on Subject: lines

ADDTAG="yes"

Kde najdôležitejšie direktívy znamenajú:

REPORTLEVEL="server"
citlivosť balastných filtrov pri prezeraní logov
SENDMAILTO="root"
adresa, na ktorú sa majú posielať upozornenia

Pri konfigurácii je najdôležitejšie odfiltrovať z logov balast, na ktorý nie je potrebné upozorňovať administrátora. V závislosti od nastavenia citlivosti sa používajú filtrovacie výrazy z adresárov "/etc/logcheck/ignore.d.XXX", kde XXX je "paranoid", "server" alebo "workstation". V každom z adresárov sa nachádzajú súbory s filtrovacími výrazmi pre podporované balíčky, ktoré logujú do systémových logov. Tieto súbory sú automatické brané do úvahy pre dané nastavenie citlivosti. Vlastné filtre pridávajte do súboru "/etc/logcheck/ignore.d.XXX/local".

Súbory s filtrami, ktoré detekujú pokusy o útok na server alebo útok samotný, nájdete v adresári "/etc/logcheck/cracking.d".

Súbory s filtrami, ktoré detekujú rôzne systémové problémy nájdete v adresári "/etc/logcheck/violations.d". Vlastné filtre pridávajte do súboru "/etc/logcheck/violations.d/local".

No a napokon súbory s filtrami, ktoré dodatočne filtrujú záznamy o systémových problémoch nájdete v adresári "/etc/logcheck/violations.ignore.d". Vlastné filtre pridávajte do súboru "/etc/logcheck/violations.ignore.d/local".

Ukážka konfiguračného súboru "/etc/logcheck/cracking.d/logcheck" (hlásenia typické pre aktívny útok na server):

uucico\[[0-9]+\]: refused connect from
tftpd\[[0-9]+\]: refused connect from
kernel: Oversized packet received from
attackalert
attack

Ukážka konfiguračného súboru "/etc/logcheck/violations.d/logcheck" (negatívne a potenciálne nebezpečné hlásenia):

!=
-ERR Password
CWD etc
DEBUG
ERROR
EXPN
FAILURE
Failed
ILLEGAL
PERMITTED
REFUSED
RETR group
RETR passwd
RETR pwd.db
ROOT LOGIN
SITE EXEC
VRFY
\bBAD\b
admin
alias database
debug
denied
deny
expn
failed
failure
illegal
kernel: Packet log: .* DENY
kernel: Packet log: .* REJECT
kernel: martian source
permitted
promisc
reject
rexec
rshd
securityalert
setsender
shutdown
smrsh
sucked
unapproved
unauthorized
vrfy

Ukážka konfiguračného súboru "/etc/logcheck/violations.ignore.d/logcheck-postfix" (filtrovanie hlásení Postfixu o odmietnutí mailu pomocou niektorej RBL služby - filter neguje výraz "reject", na ktorý inak upozorňujeme):

^\w{3} [ :0-9]{11} [._[:alnum:]-]+ postfix/smtpd\[[0-9]+\]: [[:upper:]0-9]+: reject: RCPT from [^[:space:]]+: [45][0-9][0-9] Service unavailable; Sender address \[[^[:space:]]+\] blocked using [._[:alnum:]-]+; .*; from=<[^[:space:]]*> to=<[^[:space:]]+> proto=(ESMTP|SMTP) helo=<[^[:space:]]+>$

Ukážka konfiguračného súboru "/etc/logcheck/ignore.d.server/postfix" (filtrovanie hlásení Postfixu o neodoslanom maili kvôli nefungujúcemu spojeniu so vzdialeným serverom - takéto udalosti nás tak veľmi nezaujímajú, ide o pomerne bežnú vec):

^\w{3} [ :0-9]{11} [._[:alnum:]-]+ postfix/n?qmgr\[[0-9]+\]: [[:alnum:]]+: to=<[^[:space:]]+>, relay=none, delay=[0-9]+, status=deferred \(delivery temporarily suspended: connect to [^[:space:]]+: (Connection timed out|read timeout|Connection refused)\)$

Všimnite si, že súbory v "/etc/logcheck/cracking.d" a v "/etc/logcheck/violations.d" obsahujú všeobecnejšie definované výrazy, na ktoré má "logcheck" upozorňovať a súbory v "/etc/logcheck/violations.ignore.d" a v "/etc/logcheck/ignore.d.XXX" zasa naopak čo najkonkrétnejšie s využitím regulárnych výrazov. Je to celkom logické - chceme upozorňovať na podozrivé udalosti, ale ignorovať falošné poplachy, ktoré vieme presne špecifikovať. A ak odfiltrujeme falošné poplachy, zostanú už len "zaujímavé".

Všimnite si, že súbory, ktoré majú vylučovať falošné poplachy (posledné dva), obsahujú konkrétnejšie definované hlásenia, ako som spomínal. V texte môžete používať regulárne výrazy, z nich najjednoduchší a najpoužívanejší je ".*", čo znamená "ľubovoľný počet ľubovoľných znakov". Ak budete mať denne falošné poplachy a veľké maily od "logchecku", budete musieť v prvom rade vytvoriť podľa skutočných logovacích súborov riadky v súbore "ignore". Pri tom vám regulárne výrazy veľmi pomôžu.

Príklad: "logcheck" vás denne bude dennodenne upozorňovať na márne pokusy počítačov s Windows vo vašej sieti (10.0.0.x) aktualizovať zónu DNS servera:

Mar 30 07:26:22 twin named[24148]: client 10.0.0.99#4990: update '0.0.10.in-addr.arpa/IN' denied

Na odfiltrovanie pomôže regulárny výraz (konštanta nepomôže, pretože číslo procesu, IP adresa počítača a zóna sa menia) v súbore "/etc/logcheck/violations.ignore.d/local":

^\w{3} [ :0-9]{11} [._[:alnum:]-]+ named\[[0-9]+\]: client [.[:alnum:]#-]+: update '[._[:alnum:]-]+/IN' denied

A máte po (jednom) probléme.

4.2.4 Odporúčania

Spočiatku budete mať s "logcheckom" trochu práce, kým si ho "vyladíte" pre váš server - budete sa musieť hrať s regulárnymi výrazmi. Ale odmenou za vašu snahu budú každodenné (nie príliš dlhé) maily, z ktorých sa dozviete, čo sa v noci udialo na serveri. Takto odhalíte veľa problémov a pokusov o hacknutie, čo vám v konečnom dôsledku uľahčí správu servera.

4.3 ippl

Program "ippl" (IP protocols logger) slúži na logovanie pokusov o prístupy na porty vášho servera pomocou protokolov TCP, UDP a ICMP. Pre každý prístup zaznamenáva zdrojovú a cieľovú adresu a zdrojový a cieľový port. Program beží ako démon s právami bežného používateľa, je teda relatívne bezpečný. Výhodou je, že umožňuje zaznamenať aj pokusy o pripojenie, ktoré neprejdú pravidlami vášho firewallu. Spolu so systémovými logmi vám preto poskytne cenné doplnkové informácie pri hľadaní stôp po útočníkovi.

4.3.1 Možnosti "ippl"

"ippl" je konfigurovateľný a flexibilný, umožňuje:

  1. logovať TCP, UDP a ICMP protokoly (alebo ich ľubovoľnú kombináciu)
  2. vytvárať samostatné logovacie súbory pre jednotlivé protokoly
  3. zisťovať spätný preklad IP adresy a overovať pôvodcu TCP spojenia pomocou služby "ident"
  4. určiť kombináciu adries a portov, pre ktoré sa budú logovať prístupy
  5. určiť kombináciu adries a portov, ktoré sa budú v logovaní ignorovať

4.3.2 Konfigurácia

Konfiguračný súbor "/etc/ippl.conf" obsahuje direktívy nastavujúce všeobecné vlastnosti logovania a pravidlá, ktoré upresňujú, aké pakety sa budú/nebudú logovať. Štandardne sa logujú všetky prichádzajúce pakety, pokiaľ nie je povedané inak.

4.3.2.1 Direktívy

Text začínajúci znakom "#" sa ignoruje a považuje za komentár.

runas user
používateľ, s ktorého právami beží démon "ippl". Default: nobody.
run protokol
určuje protokol, ktorý chcete logovať. Direktívu môžete zopakovať niekoľkokrát, platné protokoly sú: "tcp", "udp", "icmp" a "all" (všetky protokoly).
resolve [protokol] [protokol] ...
určuje protokoly (pozri vyššie), pre ktoré sa majú z IP adries zisťovať doménové adresy pomocou reverzného DNS. Vo všeobecnosti je najlepšie nepovoľovať reverz, pretože to spomaľuje logovanie.
noresolve [protokol] [protokol]
opak predchádzajúcej direktívy, určuje protokoly, pre ktoré sa nebudú zisťovať doménové adresy. Default: doménové adresy sa nezisťujú pre nijaký protokol.
logformat [format] [protokol] [protokol] ...
určuje formát logovania pre vybrané protokoly. Platné formáty sú: "short", "normal" a "detailed".
ident
zapne overovanie TCP spojení pomocou služby ident. Ak na počítači, z ktorého prišla požiadavka, beží služba ident, budete vidieť prihlasovacie meno používateľa, ktorý uskutočnil spojenie. Cenou za túto vlastnosť je spomalenie logovania.
noident
opak predchádzajúcej direktívy, vypne overovanie TCP spojení pomocou služby ident. Default: ident sa nepoužíva.
logclosing
logovanie ukončení TCP spojení
nologclosing
opak predchádzajúcej direktívy, vypne logovanie ukončení TCP spojení. Default: ukončenia spojení sa nelogujú.
log-in [protokol] [cesta]
určuje cestu k logovaciemu súboru pre daný protokol ("tcp", "udp", "icmp" alebo "all")

4.3.3 Pravidlá logovania paketov

Pomocou direktív sa určujú všeobecné pravidlá logovania paketov (protokoly, možnosti reverzného DNS, ident atď). Pokiaľ ich bude treba upraviť pre určitý druh spojenia, pridáte do konfiguračného súboru nový riadok, t.j. pravidlo. Pravidlá logovania majú všeobecný tvar:

ignore|log {option [option,[option],...} [protokol] [popis]

Každé pravidlo musí začínať kľúčovým slovom "ignore" alebo "log", ktorým definujete, či to bude pravidlo na logovanie alebo ignorovanie logovania paketov. Až na špeciálne výnimky budete chcieť zmenšovať počet informácií v logu a bude vás zaujímať najmä "ignore".

Pomocou parametra "options" môžete nastaviť možnosti logovania platné iba pre toto pravidlo. Možnosti: "resolve", "noresolve", "ident", "noident", "logclosing", "nologclosing", "short", "normal", "detailed".

Ďalší parameter určuje protokol, pre ktorý definujete pravidlo. Je to buď "tcp", "udp", "icmp" alebo "all".

Parameter "popis" určuje typ paketu, ktorý sa má logovať alebo ignorovať. Má tieto časti:

type číslo
určuje typ správy ICMP a funguje len pre tento protokol.
port číslo
určuje cieľový TCP alebo UDP port. Namiesto čísla môžete použiť názov portu zo súboru "/etc/services". Ak neuvediete cieľový port, pravidlo platí pre všetky.
srcport číslo
určuje zdrojový TCP alebo UDP port. Namiesto čísla môžete použiť názov portu zo súboru "/etc/services". Ak neuvediete zdrojový port, pravidlo platí pre všetky.
Číslo môžete definovať aj ako:
n--
číslo >= n
--n
číslo <= n
l--k
číslo z intervalu <l, k>
from adresa
zdrojová adresa paketu. Môže byť vo forme "server.example.com", IP adresa alebo IP adresa v tvare "ADRESA/MASKA". Ak neuvediete adresu, pravidlo platí pre každú adresu.
expire čas_v_sekundách
čas platnosti cacheovaných DNS údajov. Default: 3600s.

Príklad 1: Ignoruj TCP pripojenia na port 3128 z adries 192.168.0.0/255.255.255.0:

ignore tcp port 3128 from 192.168.0.0/255.255.255.0

Príklad 2: Ignoruj pripojenia na DNS server (port 53, teda "domain"):

ignore tcp port domain

Príklad 3: Ignoruj pripojenia na DNS server Z portu 53, teda "domain" (takéto požiadavky prichádzajú zo sekundárneho DNS servera pri prenose zónových informácií):

ignore tcp srcport domain

Príklad 4: Pri pripojení na port "ssh" loguj okrem štandardných možností aj informácie z ident a spätný preklad adresy:

log options ident,resolve tcp port ssh

Ukážka konfiguračného súboru s niektorými mojimi zmenami a komentármi (pre vnútornú sieť 192.168.0.0/255.255.255.0):

# IP protocols logger - Configuration file
# See ippl.conf(5)

# User used
# ---------
# Specify the user (declared in /etc/passwd) used to run the
# logging threads.
# pouzivatel, pod ktorym bezi "ippl", tu: nobody

runas nobody

# Resolve hostnames?
# ------------------
# Uncomment the line below to disable DNS lookups
# VYPINAME spatne preklady IP adries v logoch: zbytocne by sme si spomalovali
# server...

noresolve all

# Use ident?
# ----------
# Uncomment the line below to enable IDENT lookups
# kvoli bezpecnosti budeme pouzivat sluzbu ident!

ident

# Log end of TCP connections ?
# ----------------------------
# Uncomment the line below to enable logging of closing TCP connections
# See the BUGS file.
# NEBUDEME logovat ukoncenie TCP spojeni

#logclosing

# Expiration of DNS data
# ----------------------
# cas, po ktorom vyprsia cachovane udaje z DNS, ak ho pouzivate

expire 3600

# Log in a file
# -------------
# Uncomment this line if you want to log messages into a /var/log/ippl.log
# See ippl.conf(5) for the syntax.
# subory, do ktorych sa loguje:
# vsetky protokoly idu do tohto suboru (tu: vypnute)

#log-in all /var/log/ippl/all.log

# UDP ide do tohto suboru (tu: vypnute)
#log-in udp /var/log/ippl/udp.log

# TCP ide do tohto suboru
log-in tcp /var/log/ippl/tcp.log

# ICMP ide do tohto suboru
log-in icmp /var/log/ippl/icmp.log


# Protocols logged
# ----------------
# ktore protokoly budeme vlastne logovat?
# tu: ICMP a TCP

run icmp tcp

# Uncomment the line below to log UDP traffic.
# See ippl.conf(5) for recommandations.
# ak chcete logovat aj UDP, odkomentujte nasledujuci riadok

#run udp

# Logging format
# ----------------
# If you want to see the destination address, the ports, etc
# Or if you want to log the minimal information.
# See ippl.conf(5) for details.
# format logovania: detailny pre vsetky protokoly

logformat detailed all

# Filtering of packets logged
# ---------------------------
# pravidla na ignorovanie zaznamov o paketoch

# Do not log answers to echo requests
# neloguj odpovede na ICMP echo

ignore icmp type echo_reply

# Log telnet connections using ident and name resolution
# loguj pripojenia na telnet a ssh s pouzitim DNS a ident

log options ident,resolve tcp port telnet
log options ident,resolve tcp port ssh

# Do not log UDP from localhost
# neloguj nic UDP z localhost

#ignore udp from localhost

# Do not log DNS queries
# neloguj poziadavky na DNS

ignore udp port domain
ignore udp srcport domain

# by VIX
# ignoruj pripojenia na proxy z vnut. siete, pretoze ich je vela a z vnutornej
# siete proxy povolujete aj tak vsetkym

ignore tcp port 3128 from 192.168.0.0/255.255.255.0

# ignoruj pripojenia na ssh z vnut. siete

ignore tcp port ssh from 192.168.0.0/255.255.255.0

# ignoruj pripojenia na pop3 z vnut. siete, inak vam Outlook zaplni logy velmi
# rychlo :)

ignore tcp port pop3 from 192.168.0.0/255.255.255.0

# ignoruj pripojenia na ftp z vnut. siete

ignore tcp port ftp from 192.168.0.0/255.255.255.0
ignore tcp port ftp-data from 192.168.0.0/255.255.255.0

# ignoruj pripojenia na imap z localhostu (kvoli webmailu IMP, ktory sa takto
# pripaja na imap server)

ignore tcp port imap2 from 127.0.0.1

# ignoruj pripojenia sposobene sambou z lokalnej siete

ignore tcp port 137--139 from 192.168.0.0/255.255.255.0

# ignoruj vsetky pripojenia na sluzby, ktore povolujeme aj tak odvsadial:
# http (80), https, smtp (25), nameserver, ident, finger, pop3s

ignore tcp port 80
ignore tcp port https
ignore tcp port 25
ignore tcp port domain
ignore tcp srcport domain
ignore tcp port auth
ignore tcp port finger
ignore tcp port pop3s

# a ignoruj vsetko z localhostu, pretoze by sme toho mali plne logy
ignore tcp from 127.0.0.1

# End of configuration
# Copyright (C) 1998-1999 Hugo Haas - Etienne Bernard

4.3.4 Odporúčania

Démon "ippl" by som vám jednoznačne odporučil. Ak budete hľadať problémy v bežných systémových logoch, ktoré vytvára "syslogd", môže vám pomôcť v odhalení takých pokusov o pripojenie, ktoré ani neprešli vašim firewallom, alebo pokusy o pripojenie na porty, ktoré ani nie sú využité. Ľahko si môžete potvrdiť prípadný portscan.

4.4 Kontrola integrity súborových systémov

Pod kontrolou integrity súborových systémov rozumieme kontrolu obsahu súborových systémov servera s cieľom zistiť zmeny, ktoré sú nebezpečné, alebo ktoré sú priamym dôsledkom útoku na server. Pri kontrole je dôležité odlíšiť súbory a adresáre, ktorých obsah sa mení počas bežnej prevádzky servera od tých, ktoré by mali zostať nemenné (do odinštalovania alebo upgradu balíčka, ktorý obsahuje daný súbor).

4.4.1 Nebezpečné setuid súbory

V tomto súbore sa bavíme o nástrojoch na sledovanie stavu servera. Teraz začnem trochu zoširoka a krátko opíšem ďalšiu možnosť, ako dať pozor na server a hoci (zatiaľ) nenapíšem spôsob konfigurácie nejakého konkrétneho programu, ukážem vám, ako si napísať vlastný.

4.4.1.1 Čo sú setuid súbory?

Pojmom "setuid súbor" (tiež "s-kový súbor") sa v unixových systémoch označuje jeden špeciálny prípad, kedy má súbor okrem prístupových práv pre čítanie, zápis a spúšťanie, nastavený ešte ďalší príznak. Vo výpise súborov sa označuje písmenom "s", a znamená asi toľko, že pri spustení programu sa tento bude spúšťať s právami vlastníka súboru! (set user id).

Ak ste to ešte nepostrehli, ukážeme si to na nejakom príklade.

Príklad 1: bežný program ("find")

Program "find" sa používa v unixových systémoch veľmi často, pretože slúži na hľadanie súborov s nejakými požadovanými vlastnosťami. Štandardne je prístupný všetkým používateľom, čo vidíme aj na výstupe príkazu

ls -la /usr/bin/find

-rwxr-xr-x    1 root     root        74492 jan 22  2001 /usr/bin/find

Vlastníkom súboru je samozrejme root (skupina root), prístupové práva zabezpečujú čítanie a spúšťanie každému a zápis iba vlastníkovi. Keď program "find" spustíte, bude sa spúšťať s vašimi právami, preto napríklad nebude môcť hľadať súbory v adresároch, kam nemáte prístup.

Všetko jasné? OK.

Príklad 2: setuid program ("passwd")

Program "passwd" hádam ani netreba predstavovať, pretože slúži na zmenu hesla používateľa. Určite ste si všimli, že root môže zmeniť heslo každému, kým bežný používateľ iba sám sebe. Zamyslite sa teraz nad jedným faktom: ako je možné, že bežný používateľ vôbec môže zmeniť svoje heslo, keď sa pritom vyžaduje právo zápisu do súboru s heslami "/etc/shadow", ktorý má dokonca aj pre roota iba právo na čítanie?

ls -la /etc/shadow

-r--------    1 root     root         1261 dec 10 19:23 /etc/shadow

Odpoveďou je práve výpis príkazu

ls -la /usr/bin/passwd

-r-s--x--x    1 root     root        13044 jan  5  2001 /usr/bin/passwd*

Vlastníkom súboru je root (skupina root), prístupové práva - aha, je tu nejaké čudné "s" na mieste "x" pre vlastníka! Inak je všetko v poriadku, bežný používateľ má právo program spustiť. Ale čo je to "s"?

Ak má program (pre nespustiteľný súbor to nemá zmysel) príznak "s" na mieste vlastníka, znamená to, že sa nebude spúšťať s právami používateľa, ktorý ho spustil, ale s právami vlastníka súboru, čo je v tomto prípade root! Preto po spustení programu môžete zapisovať do súboru "/etc/shadow", pretože počas spustenia programu ste de facto root. Keďže program si skontroluje, kto ho skutočne spustil, umožní vám zmenu hesla iba pre vás.

A to je v podstate všetko. Ešte spomeniem, že program môže mať príznak "s" aj na mieste skupiny, v takom prípade po spustení preberáte privilégiá skupiny, ktorá vlastní program.

4.4.1.2 Pre a proti

Setuid programy majú jednu veľkú výhodu: umožnia vám vykonávať isté operácie, na ktoré za normálnych okolností nemáte právo, pričom vám nedávajú automaticky práva vykonávať iné operácie. Videli ste to na príklade programu "passwd", kde ste ako bežný používateľ získali právo zápisu (svojho hesla) do súboru s heslami. Neznamenalo to však, že môžete do tohto súboru zapisovať aj cudzie heslá alebo ich čítať. Setuid program vám teda prepožičiava (najčastejšie rootovské) privilégiá na jeden konkrétny druh činnosti. Keby neexistovali, musel by tieto operácie vykonávať výhradne root.

Dobrý setuid program musí byť napísaný tak, že neumožní vykonať inú operáciu okrem tej, na ktorú je určený.

Ak však niekto zneužije vlastnosť (chybu) v setuid programe, ktorá mu napríklad umožní spustiť z neho shell, automaticky získavá všetky práva vlastníka programu (a keďže sa bavíme o rootovi, tak je to sakramentsky nebezpečné). Potom si už môže robit, čo len chce. Napríklad si skopíruje shell k sebe do homediru a nastaví si k nemu s-kový príznak a vlastníka root (chown root subor ; chmod u+s subor). Ak aj prídete na to, že vám niekto šarapatil v systéme a odstránite cestu, ktorou sa do systému dostal, ak aj zmeníte rootovské heslo, hacker sa môže kedykoľvek stať rootom jednoduchým spustením tohto rootovského shellu.

4.4.1.3 Zníženie rizika

Bohužiaľ, neexistuje systémové opatrenie, ako odstrániť zo svojho servera všetky rootovské setuid súbory, aby ste zároveň neodstránili aj funkčnosť samotného servera. :) Niekoľko pomôcok a vtipných riešení však našťastie máme!

4.4.1.3.1 Zníženie počtu setuid programov

Ak je to možné, nepoužívajte (neinštalujte) programy, ktoré k svojej činnosti potrebujú s-kové rootovské súbory a nahraďte ich bezpečnejším variantom. Napríklad program "sendmail" je setuid, ale existuje viacero bezpečnejších (aj z iných hľadísk) programov na obsluhu pošty, napr. "postfix" a "qmail".

4.4.1.3.2 Parameter nosuid v "/etc/fstab"

Proti setuid programom vytváraným používateľmi existuje pomerne jednoduché protiopatrenie: stačí pre súborové systémy, kde sa nachádzajú domáce adresáre používateľov, maily, dočasné súbory a všetko, kam bežný používateľ môže zapisovať, nastaviť parametre "nosuid,nodev" v súbore "/etc/fstab", ktorý obsahuje informácie o súborových systémoch. Parameter "nosuid" znamená, že na danom súborovom systéme sa budú ignorovať setuid príznaky pre súbory. "nodev" zasa znamená, že sa na danom súborovom systéme nebudú dať vytvárať systémové zariadenia (devices), čo síce s setuid súbormi vôbec nesúvisí, ale je to dobrá bezpečnostná voľba pre domáce adresáre.

Napr. pre domáce adresáre používateľov (zariadenie "/dev/hda6" môže byť vo vašom prípade celkom iné)

/dev/hda6 /home ext2 defaults 1 2

upravíme riadok na:

/dev/hda6 /home ext2 defaults,nosuid,nodev 1 2

To isté môžete urobiť aj pre súborové systémy, do ktorých majú používatelia prístup. Ak máte pekne rozdelený disk, pripadajú do úvahy "/var/tmp" resp. "/var/spool/mail" a "/tmp". Pre tie môžete pridať aj parameter "noexec", aby sa z daného súborového systému nedalo nič spúšťať. Medzi mailami a v "/tmp" nemajú zariadenia a programy čo hľadať.

/dev/hda7 /tmp ext2 defaults,nosuid,nodev,noexec 1 2

Po uložení súboru "/etc/fstab" treba znovu pripojiť súborové systémy:

mount -a -o remount

Upozornenie: takto sa môžete chrániť pred setuid programami bežných používateľov alebo pred ich už existujúcimi zadnými vrátkami typu "rootovský setuid shell". Príznak "nosuid" však nemôžete určiť pre súborové systémy, na ktorých sa nachádzajú systémové programy (najčastejšie je to len hlavný súborový systém "/", ale niekto zvykne mať aj "/usr" a pod.) - keby ste to urobili, server by začal robiť problémy, pretože mnoho systémových programov potrebuje byť setuid.

4.4.1.3.3 Trójske kone

Druhým spôsobom zneužitia setuid programov sú trójske kone. Existuje ich celá kopa, napr. program, čo sa tvári ako "ping", ale v skutočnosti robí niečo iné. V dnešnej dobe sa vám zriedka podarí nainštalovať si čosi také, ak inštalujete distribúciu Linuxu a upgradujete ju z dôveryhodných zdrojov (ak sa dá, kontrolujte kontrolné súčty - ak používate program "rpm", môžete použiť "rpm -V meno_balika").

Iná vec je, keď vám útočník po úspešnom prieniku zanechá na serveri niekoľko takýchto trójskych koní. Aby nevyvolal zvýšenú pozornosť, zvyknú ich útočníci maskovať za seriózne a potrebné programy - napríklad za už spomínaný "ping", ktorý je setuid root a ktorý som jedného dňa našiel zmenený. (Pripomínam, že hlavný súborový systém nemôžete chrániť pomocou "nosuid"). V budúcnosti sa môže hacker vrátiť, spustiť svoj program (napríklad s nejakým špeciálnym parametrom) a už má opäť rootovské práva. V princípe sa trójske kone používajú najmä ako zadné vrátka.

4.4.1.3.4 Kontrola setuid súborov

Teraz sa teda pozrieme, čo s setuid súbormi v hlavnom adresári a na iných miestach, ktoré nemôžeme chrániť pomocou "nosuid". Máme na sklade ešte pasívne riešenie - môžeme ich kontrolovať a to ich výskyt na disku a tiež každú zmenu v takýchto súboroch. Existujú na to špecializované programy (Nabou (http://www.daemon.de/Nabou) a chystám sa vyskúšať "tripwire", ktorý okrem setuid súborov kontroluje aj všetky ostatné), ale teraz si ukážeme, ako to urobiť bez nich. Ak chcete na disku nájsť všetky súbory, ktoré majú nastavený príznak "s" pre vlastníka, použite príkaz "find":

find / -type f -perm -04000

ak vás zaujíma aj príznak "s" pre skupiny:

find / -type f \( -perm -04000 -o -perm -02000 \)

iba s-kové súbory s vlastníkom root:

find / -type f -user root -perm -04000

Nebudem vás napínať, ponúkam vám jeden hotový skript, ktorý vyhľadáva setuid súbory s vlastníkom alebo skupinou "root" na celom disku (okrem "/proc"). Skript zisťuje, či sa zmenil kontrolný súčet (a teda či došlo k zmene) setuid programu. Výsledný zoznam zašle mailom používateľovi "root". Pre tých, čo nerozumejú shellu, napísal som dovnútra pár komentárov (za znakom "#").

Celý skript si môžete aj stiahnuť.

#!/bin/bash
# check root suid/sgid files and md5 checksum
# VIX, 25/3/2001
# thanks to "msec" by Mandrake

# subory, ktore budeme potrebovat:
# pre porovnavanie so vcerajskom si musime ponechat aj vcerajsi stav

SUID_FILES_TODAY=/var/log/s-files.today
SUID_FILES_YESTERDAY=/var/log/s-files.yesterday
SUID_FILES_TMP=/var/log/s-files.tmp

SUID_FILES_DIFF=/var/log/s-files.diff

# subory s "kontrolnymi suctami" (MD5)
SUID_MD5_TODAY=/var/log/s-md5.today
SUID_MD5_YESTERDAY=/var/log/s-md5.yesterday
SUID_MD5_TMP=/var/log/s-md5.tmp

OUTPUT_FILE=/var/log/s-output.tmp

echo "Searching for SUID/SGID files..." >>$OUTPUT_FILE

# najvacsia magia: hladanie programov na disku

find / -path '/proc' -prune -o \( \( -user root -and -perm +04000 \) -or \
\( -group root -and -perm +02000 \) \) -type f -print \
| sort  > "$SUID_FILES_TMP"

# vypocita sa MD5
cat $SUID_FILES_TMP |xargs md5sum > "$SUID_MD5_TMP"

# vznikaju "dnesne" subory
mv -f $SUID_FILES_TMP $SUID_FILES_TODAY
mv -f $SUID_MD5_TMP $SUID_MD5_TODAY

# ak mame s cim porovnavat, porovnavame so vcerajsim stavom
if [ -f $SUID_FILES_YESTERDAY ]; then
	if ! diff -u $SUID_FILES_YESTERDAY $SUID_FILES_TODAY > \
"$SUID_FILES_DIFF"; then

grep -w "^+" $SUID_FILES_DIFF | grep -vw "^+++ " | sed 's/^.//' |\
while read file; do
	printf "Added s-file: ${file}\n`ls -l ${file}`\n" >>$OUTPUT_FILE
done
grep -w "^-" $SUID_FILES_DIFF | grep -vw "^--- " | sed 's/^.//' |\
while read file; do
	echo "Removed s-file: ${file}" >>$OUTPUT_FILE
done

else
	echo "NO CHANGES in s-files list found." >>$OUTPUT_FILE
fi
else
	echo "No yesterday's data available." >>$OUTPUT_FILE
fi

if [ -f $SUID_MD5_YESTERDAY ]; then
	echo "Checking MD5 checksums..." >>$OUTPUT_FILE
	md5sum -cv $SUID_MD5_YESTERDAY >>$OUTPUT_FILE 2>&1
else
	echo "First run, no md5 checks." >>$OUTPUT_FILE
fi

# pamatame na zajtra a dnesne subory prehlasime za vcerajsie
cp -f $SUID_FILES_TODAY $SUID_FILES_YESTERDAY
cp -f $SUID_MD5_TODAY $SUID_MD5_YESTERDAY

# All done, now mail it to the sysadmin!
/usr/bin/mail -s "S-FILES security scan at `date`" root < $OUTPUT_FILE
rm $OUTPUT_FILE

##netstat -pevan 2>/dev/null |grep LISTEN | grep -v ^unix | mail -s LISTEN root

# ako bonus zistime aktivne spojenia a servery beziace na nasom pocitaci
netstat -pevln 2>/dev/null | grep -v ^unix | mail -s LISTEN root
netstat -pevan 2>/dev/null |grep ESTABLISHED | grep -v ^unix | mail -s ESTABLISHED root

Ak tento program nastavíte na spúšťanie každú noc (pomocou "crond"), každý deň vás bude čakať mail so zoznamom s-kových súborov a prípadnými zmenami. Pokiaľ nejaký program upgradujete, počítajte s tým, že sa jeho kontrolný súčet zmení ;-)

Ak necháte odkomentované aj posledné dva riadky skriptu, dostanete ďalšie dva maily, ktoré vám prezradia, aké sieťové spojenia boli v čase spustenia skriptu aktívne a aké démony počúvali na akých portoch. Na tieto testy sa používa program netstat.

Ak ste väčší paranoici ako ja, mali by ste si mail nechať posielať na iný počítač, pretože ak vám niekto hackne server, môže sa poobzerať a pozametať za sebou stopy aj v mailboxoch... ;-)

4.4.1.4 Odporúčania

Ako vidíte, setuid súbory sú ako malé deti - treba na ne dávať dobrý pozor, lebo by mohli veľmi rýchlo vyrásť. Ak ste doteraz setuid súbory nekontrolovali, mali by ste s tým začať čím skôr. Či už použijete môj skript, alebo nejaký oficiálny program, hlavné je, aby ste sa s-kovým súborom venovali. Ak totiž zistíte zmenu v niektorom z nich a naisto viete, že ste neinštalovali jeho novú verziu (alebo novú verziu balíka, ktorý zahŕňa tento súbor), je takmer isté, že máte v systéme hackera.
Ak zmeny v setuid súboroch nezisťujete, neznamená to, že ho tam nemáte.

4.4.2 Súbory/adresáre zapisovateľné pre všetkých

Ďalším rizikovým faktorom súborového systému sú súbory a adresáre zapisovateľné pre všetkých používateľov. Adresáre sú nebezpečnejšie, pretože umožňujú komukoľvek zmazať obsah adresára (bez ohľadu na práva súborov v adresári)!

Za normálnych okolností existuje niekoľko súborov (v "/dev") a adresárov zapisovateľných pre všetkých používateľov. Tieto som našiel doma ja:

Systémové súbory:

Systémové adresáre:

O vymenované systémové súbory v "/dev" sa nebojte, sú určené práve na zápis. Napríklad "/dev/null" je súbor - zariadenie, do ktorého môžete čokoľvek zapísať, pričom sa výsledok nikam neuchová. "null" sa správa ako čierna diera a používa sa pri presmerovaní výstupu z programov. Horšie by bolo, keby ste objavili povedzme voľne zapisovateľný súbor "/dev/hda". Znamenalo by to, že vám ktokoľvek bez námahy môže vymazať (prvý IDE) harddisk.

Adresáre "/tmp" a "/var/tmp" sa nachádzajú na každom unixovom systéme a služia ako miesto na dočasné súbory. Môže do nich zapisovať každý používateľ (pozrite aj ako sa v takýchto adresároch chrániť proti setuid programom). Proti vymazaniu cudzích súborov existuje jednoduchá ochrana - atribút "t" použitý pri zmene prístupových práv. Ak sa pozriete na dočasné adresáre, mali by ste vidieť asi toto:

ls -lad /tmp

drwxrwxrwt  11 root     root         4096 jan 29 22:40 /tmp

Atribút "t" spôsobí, že používateľ do neho síce môže zapísať, čo len chce, ale vymazať môže iba svoje súbory. Hore uvedené práva nastavíte pomocou:

chmod 1777 /tmp

Pred samotným hľadaním si treba uvedomiť, že všetky symbolické linky sú zapisovateľné pre všetkých (čo však nevadí, pretože práva symbolických liniek sa nikdy neberú do úvahy). Vo výraze pre "find" ich teda odignorujeme pomocou "! -type l":

find / -perm -2 ! -type l -ls

Výstup príkazu bude obsahovať aj súbory a adresáre, ktoré som uviedol ja, okrem nich veľa ďalších zariadení v "/dev" a niekoľko socketov (často vo "/var"). Na prípadné ďalšie adresáre a súbory treba dať dobrý pozor a zistiť, kto ich vytvoril a načo slúžia.

4.4.2.3 Odporúčania

  1. pokiaľ máte dobre rozdelený disk, t.j. adresáre zapisovateľné pre všetkých sa nachádzajú na iných partíciách, ako systémové alebo používateľské adresáre, zaplnenie týchto adresárov nemôže významne ohroziť beh vášho servera. Napriek tomu treba z času na čas dočasné súbory mazať (niektoré programy si po sebe upratujú, ale mnohé nie) - niekedy na to existujú aj špeciálne programy spúšťané z démona "crond".
  2. nastavte adresárom, ktoré majú byť zapisovateľné pre všetkých, práva "1777", vlastníka "root" a skupinu "root".
  3. pravidelne kontrolujte zoznam adresárov a súborov, ktoré sú zapisovateľné pre všetkých. Bez vážnej príčiny by sa tento zoznam nemal meniť, t.j. nemali by pribúdať!