O kernel Linux tem subsistema de auditoria desde o lançamento da série 2.6. Juntamente com o daemon auditd
e várias ferramentas de relatório, como aureport
e ausearch
, permite um monitoramento muito refinado.
Então, digamos que você queira monitorar esse diretório /etc/php5/conf.d
, ou possivelmente apenas /etc/php5/conf.d/php-dev.ini
file. Primeiro instale o auditd e execute-o; deve ser tão fácil quanto apt-get install auditd
.
Em seguida, o monitor de instalação desse arquivo:
auditctl -w /etc/php5/conf.d/php5-dev.ini -p war -k uniquekeyforidentifyingthiswatch
A chave exclusiva ajuda você a pesquisar logs possivelmente grandes se estiver fazendo muitas auditorias.
Depois, para ver se algo interessante aconteceu nesse arquivo:
ausearch -f /etc/php5/conf.d/php5-dev.ini
Isso deve produzir um relatório semelhante a este (eu acabei de configurar um relógio para /etc/elinks.conf
para fins de demonstração para você):
----
time->Thu Aug 4 09:24:20 2011
type=PATH msg=audit(1312439060.306:71152): item=0 name="/etc/elinks.conf" inode=57674 dev=fd:00 mode=0100644 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0
type=CWD msg=audit(1312439060.306:71152): cwd="/home/jpikk/tmp"
type=SYSCALL msg=audit(1312439060.306:71152): arch=c000003e syscall=191 success=yes exit=27 a0=2601ce0 a1=3c12015d8b a2=26d1a60 a3=ff items=1 ppid=6643 pid=6672 auid=500 uid=500 gid=500 euid=500 suid=500 fsuid=500 egid=500 sgid=500 fsgid=500 tty=pts7 ses=6075 comm="vim" exe="/usr/bin/vim" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="uniquekeyforidentifyingthiswatch"
----
time->Thu Aug 4 09:24:20 2011
type=PATH msg=audit(1312439060.306:71153): item=0 name="/etc/elinks.conf" inode=57674 dev=fd:00 mode=0100644 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0
type=CWD msg=audit(1312439060.306:71153): cwd="/home/jpikk/tmp"
type=SYSCALL msg=audit(1312439060.306:71153): arch=c000003e syscall=2 success=no exit=-13 a0=2601ce0 a1=241 a2=1a4 a3=0 items=1 ppid=6643 pid=6672 auid=500 uid=500 gid=500 euid=500 suid=500 fsuid=500 egid=500 sgid=500 fsgid=500 tty=pts7 ses=6075 comm="vim" exe="/usr/bin/vim" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="uniquekeyforidentifyingthiswatch"
----
time->Thu Aug 4 09:24:20 2011
type=PATH msg=audit(1312439060.306:71154): item=1 name="/etc/elinks.conf" inode=57674 dev=fd:00 mode=0100644 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0
type=PATH msg=audit(1312439060.306:71154): item=0 name="/etc/" inode=12 dev=fd:00 mode=040755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0
type=CWD msg=audit(1312439060.306:71154): cwd="/home/jpikk/tmp"
type=SYSCALL msg=audit(1312439060.306:71154): arch=c000003e syscall=87 success=no exit=-13 a0=2601ce0 a1=0 a2=0 a3=3c107933ac items=2 ppid=6643 pid=6672 auid=500 uid=500 gid=500 euid=500 suid=500 fsuid=500 egid=500 sgid=500 fsgid=500 tty=pts7 ses=6075 comm="vim" exe="/usr/bin/vim" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="uniquekeyforidentifyingthiswatch"
----
time->Thu Aug 4 09:24:20 2011
type=PATH msg=audit(1312439060.306:71155): item=0 name="/etc/elinks.conf" inode=57674 dev=fd:00 mode=0100644 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:etc_t:s0
type=CWD msg=audit(1312439060.306:71155): cwd="/home/jpikk/tmp"
type=SYSCALL msg=audit(1312439060.306:71155): arch=c000003e syscall=2 success=no exit=-13 a0=2601ce0 a1=241 a2=1a4 a3=3c107933ac items=1 ppid=6643 pid=6672 auid=500 uid=500 gid=500 euid=500 suid=500 fsuid=500 egid=500 sgid=500 fsgid=500 tty=pts7 ses=6075 comm="vim" exe="/usr/bin/vim" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key="uniquekeyforidentifyingthiswatch"
Uau, muita coisa lá dentro. Você verá o nome do arquivo e seu número de inode que foi acessado, dispositivo bruto, contexto do SELinux (se o SELinux for usado), caminho atual que o usuário / processo teve ao tentar executar a operação, falhou / sucedeu solidar , uid / gid / effective uid do usuário e as possíveis ACLs do sistema de arquivos, tty onde a operação foi executada, comando e a final executável o comando led, função SELinux e assim por diante. Acabei de abrir esse arquivo para vim
.
Mais monitoramento pode ser feito instalando a estrutura de segurança, como grsecurity ou SELinux . Especialmente o grsecurity pode ser útil, pois com ele você pode mais facilmente (comparado ao SELinux) configurar um grupo de usuários especial que é auditado e então você pode registrar possíveis garfos, sinais, tentativas de escape chroot e assim por diante. Mas isso pode ser um exagero e um fardo para você assistir.