Essa é a solução que cuida da primeira pergunta, além de introduzir o uso de auditoria interativamente, fora da solução do módulo pam_tty fornecida na outra resposta.
bash
Primeiro, conforme explicado por um colaborador, pode haver problemas de sintaxe com a configuração original e há uma maneira melhor de fazer isso usando o Variável $ BASH_COMMAND :
The command currently being executed or about to be executed, unless
the shell is executing a command as the result of a trap, in which
case it is the command executing at the time of the trap.
Atualizando a referência original do prompt_command e a função como funciona:
PROMPT_COMMAND=$(history -a)
typeset -r PROMPT_COMMAND
function log2syslog
{
declare command
command=$BASH_COMMAND
logger -p local1.notice -t bash -i -- $USER : $command
}
trap log2syslog DEBUG
Portanto, as novas linhas do histórico são gravadas no arquivo bash_history
toda vez devido ao PROMPT_COMMAND, e como o $ BASH_COMMAND está na interceptação, o comando digitado no CLI é o comando que está sendo executado. Se eu remover o histórico -a, eu posso ver meu PS1 sendo ecoado. Funciona perfeitamente e remove todas as linhas duplicadas. A saída inclui também a expansão de alias por algum motivo.
Também é possível fazer isso sem a interceptação usando apenas PROMPT_COMMAND, assim:
PROMPT_COMMAND='history -w; history -a; history -r; command=$(fc -ln 0); logger -p local1.notice -t bash -i -- $USER : $command'
Ele não mostra expansão de alias, mas tem um pequeno defeito que não posso corrigir: se você simplesmente pressionar enter com nada mais na linha, ele envia o último comando para os logs. Você não pode mesclar as opções de histórico do arwn. Escrevemos a história que temos que arquivar, depois escrevemos o histórico anexado desde o início da sessão, depois lemos de volta e depois procuramos a última linha.
zsh
Com o zsh, podemos usar a função interna precmd , semelhante a P_C, assim, com um shell opção do shell específico do shell, tudo em .zshrc
:
setopt incappendhistory
precmd () {
command="$(fc -n -e - -l -1)"
logger -p local1.notice -t zsh -i "$USER : $command"
}
E é isso!
Auditoria
Auditoria é um pacote de auditoria que contém um daemon com plug-ins e recursos de relatório. Ele usa uma abordagem baseada em regras (consulte o exemplo de audit.rules orientado à segurança aqui ) para capturar e eventos de log. Instale o pacote e verifique se você tem isso em /etc/conf.d/auditd
:
AUDITD_LANG=en_US
AUDITD_DISABLE_CONTEXTS="no"
Você também pode revisar muitas outras opções em /etc/audit/auditd.conf
, incluindo o caminho do registro ( /var/log/audit/audit.log
por padrão).
O framework também inclui um dispatcher com plugins, incluindo um que tem a capacidade de escrever diretamente para syslog
, se assim for desejado, por conveniência. Você deve primeiro ativá-lo em /etc/audisp/plugins.d/sysconf ativando active
:
active = yes
direction = out
path = builtin_syslog
type = builtin
args = LOG_INFO
format = string
Você também encontrará os recursos (audisp-remote) no dispatcher para o log remoto, mas isso não precisa ser definido para ativar o envio para o syslog aqui. Se você ativar o plug-in do syslog e o journald for usado em vez do syslog, o journald mostrará a saída, assim como /var/log/audit/audit.log (configuração padrão). Quando a configuração estiver concluída, você poderá iniciar o daemon com auditd -s enable
. Nos logs:
Started dispatcher: /sbin/audispd pid: 3869
audispd[3869]: priority_boost_parser called with: 4
audispd[3869]: max_restarts_parser called with: 10
audispd[3869]: syslog plugin initialized
audispd[3869]: audispd initialized with q_depth=120 and 1 active plugins
audispd[3869]: node=gentoouser3x86_64 type=DAEMON_START msg=audit(1391089266.449:1498): auditd start, ver=2.1.3 format=raw kernel=3.10.2...res=success
auditd[3867]: Init complete, auditd 2.1.3 listening for events (startup state enable)
you can easily check the status too with auditctl -s:
AUDIT_STATUS: enabled=1 flag=1 pid=3867 rate_limit=0 backlog_limit=64 lost=21 backlog=0
O uso interativo não exige isso, mas se você não tiver uma unidade auditd.service válida para gerenciar com systemctl
para iniciar na inicialização, você poderá simplesmente incluir audit=1
como um parâmetro de inicialização do kernel muitas vezes isso foi implementado no nível do kernel.
A estrutura agora está ativa e você pode interceptar seletivamente os eventos de forma interativa no cli usando auditctl
. Toneladas de opções estão disponíveis. Em particular, podemos monitorar as chamadas de sistema EXECVE e ver os comandos usados no shell como argumentos aqui:
# auditctl -a exit,always -F arch=b64 -S execve
(audit.log output)
type=EXECVE msg=audit(1391090877.859:98): argc=3 a0="ls" a1="--color=auto" a2="-la"
type=CWD msg=audit(1391090877.859:98): cwd="/root"
type=PATH msg=audit(1391090877.859:98): item=0 name="/bin/ls" inode=4194395 dev=08:34 mode=0100755 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL
type=PATH msg=audit(1391090877.859:98): item=1 name=(null) inode=1613135 dev=08:34 mode=0100755 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL
type=SYSCALL msg=audit(1391090887.955:99): arch=c000003e syscall=59 success=yes exit=0 a0=1de21f0 a1=1de10c0 a2=1db7960 a3=7fff3691a390 items=2 ppid=3994 pid=4006 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 ses=1 tty=pts2 comm="clear" exe="/usr/bin/clear" key=(null)
type=EXECVE msg=audit(1391090887.955:99): argc=1 a0="clear"
type=CWD msg=audit(1391090887.955:99): cwd="/root"
type=PATH msg=audit(1391090887.955:99): item=0 name="/usr/bin/clear" inode=1966198 dev=08:34 mode=0100755 ouid=0 ogid=0 rdev=00:00 nametype=NORMAL
Here's a sample showing both outputs from our trap function and
auditd appearing in our log using journald (which also shows our logger command in the 'trap'):
bash[4410]: myuser : ls --color=auto
audispd[3869]: node=gentoomyuser3x86_64 type=SYSCALL msg=audit(1391096772.067:120): arch=c000003e syscall=59 success=yes exit=0 a0=8e5a10 a1=8e4a60 a...
audispd[3869]: node=gentoomyuser3x86_64 type=EXECVE msg=audit(1391096772.067:120): argc=2 a0="ls" a1="--color=auto"
audispd[3869]: node=gentoomyuser3x86_64 type=CWD msg=audit(1391096772.067:120): cwd="/home/myuser"
audispd[3869]: node=gentoomyuser3x86_64 type=PATH msg=audit(1391096772.067:120): item=0 name="/bin/ls" inode=4194395 dev=08:34 mode=010075...type=NORMAL
audispd[3869]: node=gentoomyuser3x86_64 type=PATH msg=audit(1391096772.067:120): item=1 name=(null) inode=1613135 dev=08:34 mode=0100755 o...type=NORMAL
audispd[3869]: node=gentoomyuser3x86_64 type=EOE msg=audit(1391096772.067:120):
audispd[3869]: node=gentoomyuser3x86_64 type=SYSCALL msg=audit(1391096807.548:121): arch=c000003e syscall=59 success=yes exit=0 a0=8e5c50 a1=8e6430 a...
audispd[3869]: node=gentoomyuser3x86_64 type=EXECVE msg=audit(1391096807.548:121): argc=10 a0="logger" a1="-p" a2="local1.notice" a3="-t" ..." a9="date"
audispd[3869]: node=gentoomyuser3x86_64 type=CWD msg=audit(1391096807.548:121): cwd="/home/myuser"
audispd[3869]: node=gentoomyuser3x86_64 type=PATH msg=audit(1391096807.548:121): item=0 name="/usr/bin/logger" inode=1966477 dev=08:34 mod...type=NORMAL
audispd[3869]: node=gentoomyuser3x86_64 type=PATH msg=audit(1391096807.548:121): item=1 name=(null) inode=1613135 dev=08:34 mode=0100755 o...type=NORMAL
audispd[3869]: node=gentoomyuser3x86_64 type=EOE msg=audit(1391096807.548:121):
bash[4415]: myuser : date
audispd[3869]: node=gentoomyuser3x86_64 type=SYSCALL msg=audit(1391096807.549:122): arch=c000003e syscall=59 success=yes exit=0 a0=8e5f40 a1=8e5cd0 a...
audispd[3869]: node=gentoomyuser3x86_64 type=EXECVE msg=audit(1391096807.549:122): argc=1 a0="date"
audispd[3869]: node=gentoomyuser3x86_64 type=CWD msg=audit(1391096807.549:122): cwd="/home/myuser"
audispd[3869]: node=gentoomyuser3x86_64 type=PATH msg=audit(1391096807.549:122): item=0 name="/bin/date" inode=4194318 dev=08:34 mode=0100...type=NORMAL
audispd[3869]: node=gentoomyuser3x86_64 type=PATH msg=audit(1391096807.549:122): item=1 name=(null) inode=1613135 dev=08:34 mode=0100755 o...type=NORMAL
audispd[3869]: node=gentoomyuser3x86_64 type=EOE msg=audit(1391096807.549:122):
audispd[3869]: node=gentoomyuser3x86_64 type=SYSCALL msg=audit(1391096838.004:123): arch=c000003e syscall=59 success=yes exit=0 a0=8e6c60 a1=8e6d00 a...
audispd[3869]: node=gentoomyuser3x86_64 type=EXECVE msg=audit(1391096838.004:123): argc=21 a0="logger" a1="-p" a2="local1.notice" a3="-t" a4="bash" a...
audispd[3869]: node=gentoomyuser3x86_64 type=CWD msg=audit(1391096838.004:123): cwd="/home/myuser"
audispd[3869]: node=gentoomyuser3x86_64 type=PATH msg=audit(1391096838.004:123): item=0 name="/usr/bin/logger" inode=1966477 dev=08:34 mod...type=NORMAL
audispd[3869]: node=gentoomyuser3x86_64 type=PATH msg=audit(1391096838.004:123): item=1 name=(null) inode=1613135 dev=08:34 mode=0100755 o...type=NORMAL
audispd[3869]: node=gentoomyuser3x86_64 type=EOE msg=audit(1391096838.004:123):
bash[4417]: myuser : aafire -width 82 -height 25 -gamma 1 -floyd_steinberg -font mda14 -driver curses
audispd[3869]: node=gentoomyuser3x86_64 type=SYSCALL msg=audit(1391096838.006:124): arch=c000003e syscall=59 success=yes exit=0 a0=8e6c60 a1=8c3880 a...
audispd[3869]: node=gentoomyuser3x86_64 type=EXECVE msg=audit(1391096838.006:124): argc=12 a0="aafire" a1="-width" a2="82" a3="-height" a4...11="curses"
audispd[3869]: node=gentoomyuser3x86_64 type=CWD msg=audit(1391096838.006:124): cwd="/home/myuser"
audispd[3869]: node=gentoomyuser3x86_64 type=PATH msg=audit(1391096838.006:124): item=0 name="/usr/bin/aafire" inode=1594727 dev=08:34 mod...type=NORMAL
audispd[3869]: node=gentoomyuser3x86_64 type=PATH msg=audit(1391096838.006:124): item=1 name=(null) inode=1613135 dev=08:34 mode=0100755 o...type=NORMAL
audispd[3869]: node=gentoomyuser3x86_64 type=EOE msg=audit(1391096838.006:124):
audispd[3869]: node=gentoomyuser3x86_64 type=SYSCALL msg=audit(1391096852.816:125): arch=c000003e syscall=59 success=yes exit=0 a0=8e5870 a1=8e5b20 a...
audispd[3869]: node=gentoomyuser3x86_64 type=EXECVE msg=audit(1391096852.816:125): argc=11 a0="logger" a1="-p" a2="local1.notice" a3="-t" ...su" a10="-"
audispd[3869]: node=gentoomyuser3x86_64 type=CWD msg=audit(1391096852.816:125): cwd="/home/myuser"
audispd[3869]: node=gentoomyuser3x86_64 type=PATH msg=audit(1391096852.816:125): item=0 name="/usr/bin/logger" inode=1966477 dev=08:34 mod...type=NORMAL
audispd[3869]: node=gentoomyuser3x86_64 type=PATH msg=audit(1391096852.816:125): item=1 name=(null) inode=1613135 dev=08:34 mode=0100755 o...type=NORMAL
audispd[3869]: node=gentoomyuser3x86_64 type=EOE msg=audit(139109
... termine a saída simplesmente removendo as regras ativas com auditctl -D
ou interrompa toda a auditoria com auditd -s disable
ou auditctl -e 0
. Nós não conseguimos ver todas as seqüências de caracteres digitadas no terminal usando esta regra, mas registramos todos os comandos.