Chtěl bych zaznamenat každý příkaz zadaný do bash (buď rootem nebo uživatelem), stejně jako každou operaci se souborem.
Myšlenka je taková, že bych mohl napsat nástroje, které by mohly tento soubor protokolu zkoumat a poskytovat velmi užitečné informace.
Například by bylo skvělé vypsat všechny příkazy, které kdy byly napsány, jeden na řádek, s „- – -“ pro 8-24h časovou mezeru a „===např. 24. června 2014 ===” pro>24h mezeru. Pokud by to také odstranilo duplikáty v rámci relace „===…“, ještě lépe!
To by znamenalo, že kdykoli splním nějaký úkol, jako je „upgrade flask/mod_wsgi/apache na Python 3.x“, zanechám záznam, stopu, kterou mohu zachytit, pokud budu muset o šest měsíců později udělat totéž.
Za stejným účelem by bylo velmi hezké vidět, jaké změny souborového systému nastaly po instalaci konkrétního balíčku. To by mi dalo vědět, kam byly umístěny konfigurační soubory.
PS:Jsem na Ubuntu 14.04
Přijatá odpověď:
Toto není tak komplexní jako skutečné účetnictví a uživatel to může snadno vrátit zpět, ale za předpokladu, že to nemusí být skutečný účetní systém a že se používají BASH i rsyslog, upravte soubor BASH RC pro celý systém. :
sudo -e /etc/bash.bashrc
Připojte na konec tohoto souboru:
export PROMPT_COMMAND='RET_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]+[ ]*//" ) [$RET_VAL]"'
Nahoře logger
zaznamenává čas, uživatele, příkaz a návratovou hodnotu příkazu. Nastavte protokolování pro „local6“ pomocí nového souboru:
sudo -e /etc/rsyslog.d/bash.conf
A obsah…
local6.* /var/log/bash_commands.log
Restartujte rsyslog:
sudo service rsyslog restart
Odhlásit se. Přihlaste se. Rotace protokolu:
sudo -e /etc/logrotate.d/rsyslog
Existuje seznam souborů protokolu, které lze otáčet stejným způsobem…
/var/log/mail.warn
/var/log/mail.err
[...]
/var/log/message
Přidejte nový soubor protokolu bash-commands do tohoto seznamu:
/var/log/bash_commands.log
Uložte a restartujte/znovu načtěte rsyslog. (Otočení nakonec přepíše soubory protokolu, takže může být potřeba více přemýšlet nebo konfigurovat.)
Chcete-li zobrazit všechny soubory, které balíček nainstaloval:
dpkg-query -L [package_name]
Něco takového tedy můžete spustit při instalaci softwaru.
dpkg-query -L abc-package > /var/log/files_abc-package.log