Swisslinux.org

− Le carrefour GNU/Linux en Suisse −

 

Langue

 

Le Forum

Vous n'êtes pas identifié.

  • Index
  •  » Debian
  •  » bashrc / profile / Ou comment avoir un historique shell avancée

#1 24 Jan 2010 17:36:21

Didier100
Prêcheu(r|se) du libre
 
Date d'inscription: 11 Aug 2005
Messages: 138

bashrc / profile / Ou comment avoir un historique shell avancée

Je souhaite modifier mon fichier /root/.bashrc et/ou /etc/profile en sorte d'obtenir un historique des commandes tapé dans le(s) shell(s) .

La date et l'heure / utilisateur /  devront être en début de ligne suivi par la commande shell exécutée et sans qu'il y à de limite des enregistrements.

Pour le moment je suis en "phase" de recherche et d'expérimentation ...
Voici une liste des sites qui ont relevé mon intérêt ...

http://www.linux-perl-c.lami20j.fr/cont … aq-57.html
http://www.linuxpedia.fr/doku.php/commande/historique
http://linux-attitude.fr/post/Bashrc-collaboratif
http://www.debian-administration.org/articles/175
http://www.debianadmin.com/how-to-add-d … -file.html
http://blog.motarion.net/2009/04/18/bas … commandes/
http://larsmichelsen.com/open-source/ba … h-history/

Je pense qu'il est intéressant d'avoir un historique détaillé et illimité (nombre d'enregistrements) ... cela permet d'examiner ou de remonter des éventuelles sources des problèmes ou simplement de servir comme mémoire des commandes exécute.

Si quelqu'un à un script sympa sous la main je serrai ravis s'il pouvez le partager ... smile

Dernière modification par Didier100 (24 Jan 2010 22:38:02)

Hors ligne

 

#2 24 Jan 2010 22:17:30

Didier100
Prêcheu(r|se) du libre
 
Date d'inscription: 11 Aug 2005
Messages: 138

Re: bashrc / profile / Ou comment avoir un historique shell avancée

Bon en exploitant quelques informations que j'ai trouvé sur la toile j'ai suis arrivé à me constituer le fichier suivant.

fichier /root/.bashrc

Code:

# ~/.bashrc: executed by bash(1) for non-login shells.

# Fixer le nombre max. d'enregistrements
HISTFILESIZE=100000

# Ajoute la date et l'heure dans le fichier .bashrc
HISTTIMEFORMAT="%Y/%m/%d @ %T "

# Affiche le prompt en rouge si vous êtez logue sous root
if [ $(id -u) -eq 0 ];
then # you are root, set red colour prompt
  export PS1="\\[$(tput setaf 1)\\]\\u@\\h:\\w #\\[$(tput sgr0)\\]"
else # normal
  export PS1="[\\u@\\h:\\w] $"
fi

umask 022

# Pour la colorisation des fichiers et répertoires
if [ "$TERM" != "dumb" ]; then
    eval `dircolors -b`
    alias ls='ls --color=auto'
    alias ll='ls -l --color=auto'
    #alias dir='ls --color=auto --format=vertical'
    #alias vdir='ls --color=auto --format=long'
fi

# A chaque connexion root un email est envoyé pour informer l'administrateur
# Si vous activez la ligne suivante vous devez indiquer votre adresse email en fin de la ligne ...
# echo 'Accès Shell Root le ' `date` `who` | mail -s `hostname` Shell Root de `who | cut -d"(" -f2 | cut -d")" -f1`" votrepseudo@domaine.fr"

Une fois que vous avez apporté des informations au fichier .bashrc vous devez quitter votre console et vous reconnecter ensuite pour que les modifications sont prise en compte.

La commande vim /root/.bash_history produit ceci (juste un extraît de la fin du fichier):

Code:

vim .bashrc
#1264364239
exit
#1264364282
vim .bashrc
#1264364307
exit

comme vous pouvez remarquer le temps est en format timestamp ... non directement déchiffrable.

Il existe plusieurs moyens pour avoir un affichage plus sympas:

En exécutant la commande :

Code:

history

voici une partie de l'affichage bien plus sympas:
 

Code:

 501  2010/01/24 @ 21:13:18 vim .bashrc
  502  2010/01/24 @ 21:17:19 exit
  503  2010/01/24 @ 21:18:02 vim .bashrc
  504  2010/01/24 @ 21:18:27 exit

Voici une manière pour convertir le temps timestamp en temps normal

Code:

perl -e 'print scalar localtime(1264364239)'

Je n'ai toujours pas réussi d'avoir le nom de l'utilisateur dans le fichier .bash_history

Quelqu'un à une idée comment faire pour avoir le nom de l'utilisateur et son adresse ip dans mon script?

exemple:

Code:

504  root 203.45.22.108 - 2010/01/24 @ 21:18:27 exit

Dernière modification par Didier100 (24 Jan 2010 22:39:50)

Hors ligne

 

#3 25 Jan 2010 12:01:29

BOFH
Admin
Lieu: Ecublens, VD
Date d'inscription: 03 Feb 2005
Messages: 862
Site web

Re: bashrc / profile / Ou comment avoir un historique shell avancée

Hello,

  Eh bien, le nom d'utilisateur est root, puisque tu vas chercher les informations dans /root/.bash_history...

  Si tu veux un historique consolidé, il te faudrait combiner les .bash_history de tous tes utilisateurs, éventuellement en préfixant chaque ligne avec le nom d'utilisateur en question. Certainement faisable avec awk/sed, ou un langage un peu plus évolué.

  Attention toutefois, tu ne peux pas utiliser ça pour surveiller tes utilisateurs; d'une part, il suffit d'utiliser un autre shell installé (csh par exemple) pour ne pas être loggé dans le bash_history, et d'autre part, bash écrit son historique au logout, donc un kill -9 du shell l'empêche d'enregistrer l'historique de la session en cours.

EDIT: oups, encore les accents.

Hors ligne

 

#4 25 Jan 2010 15:08:44

jean@adimp.ch
Illuminé(e)
Lieu: Marly
Date d'inscription: 10 Mar 2005
Messages: 1228
Site web

Re: bashrc / profile / Ou comment avoir un historique shell avancée

Salut,
Au bol, est-ce qu'il y aurait pas des informations dans syslog déjà?
Meilleures salutations.


--------------------------------------------------------
Jean Tinguely Awais
Ma vie sur twitter : http://www.twitter.com/tservi

Hors ligne

 

#5 26 Jan 2010 00:52:03

Didier100
Prêcheu(r|se) du libre
 
Date d'inscription: 11 Aug 2005
Messages: 138

Re: bashrc / profile / Ou comment avoir un historique shell avancée

Hello, Salut,

Eh bien, le nom d'utilisateur est root, puisque tu vas chercher les informations dans /root/.bash_history...

Bien vu,  mais je souhaite étendre mon exemple sur d'autres comptes de mon serveur ... et je ne souhaite pas installer ce script dans chaque compte utilisateur... mais le centraliser pour qu'il s'applique à toutes les connexions ssh .... et donc c'est pour cela je cherche un moyen de récupérer le nom utilisateur.

Au bol, est-ce qu'il y aurait pas des informations dans syslog déjà?

A ma connaissance je n'ai jamais découvert des commandes exécute au shell dans un fichier syslog!
Je rappelle que syslogd est un démon permettant de rediriger vers des fichiers ou des terminaux les messages envoyés par d’autres démons, services ou par le noyau Linux, messages enregistré dans le fichier /etc/syslog. Donc c'est pas cela qui me intéresse dans le sujet que j'ai évoque.

En tout cas merci pour votre aide ...

Je vais continuer à chercher quand j'aurais un peut plus de temps ... pour completter mon script.

Dernière modification par Didier100 (26 Jan 2010 00:59:35)

Hors ligne

 

#6 26 Jan 2010 08:50:53

BOFH
Admin
Lieu: Ecublens, VD
Date d'inscription: 03 Feb 2005
Messages: 862
Site web

Re: bashrc / profile / Ou comment avoir un historique shell avancée

Hello,

  Si le but est de faire de la surveillance, voici un patch pour bash qui envoie toutes les commandes entrées par l'utilisateur dans syslog:
http://bugs.gentoo.org/attachment.cgi?i … ction=view

  Il envoie sur local5 par défaut, tu peux le changer a la main. Les messages incluent l'UID et le PID (et évidemment le timestamp ajouté par syslog).

C'est bourrin, mais moins facilement contournable qu'une approche utilisant le .bash_history. Par contre il ne fera pas la différence entre les connexions ssh et le reste; mais tu peux installer les deux versions en parallèle, la patchée et la normale, et configurer les comptes ssh pour utiliser le shell patché.

Hors ligne

 
  • Index
  •  » Debian
  •  » bashrc / profile / Ou comment avoir un historique shell avancée

Pied de page des forums

Powered by FluxBB