Vous n'êtes pas identifié.
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 ...
Dernière modification par Didier100 (24 Jan 2010 22:38:02)
Hors ligne
Bon en exploitant quelques informations que j'ai trouvé sur la toile j'ai suis arrivé à me constituer le fichier suivant.
fichier /root/.bashrc
# ~/.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):
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 :
history
voici une partie de l'affichage bien plus sympas:
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
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:
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
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
Salut,
Au bol, est-ce qu'il y aurait pas des informations dans syslog déjà?
Meilleures salutations.
Hors ligne
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
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