Catégorie : Bash

3 janvier 2017 /

Je reprend l’exemple d’un fichier texte contenant une multitude d’identifiants.
Des identifiants qui commencent par 4 chiffres puis 2 lettres (exemple: 1502KQ) respecte le standard voulu, les autres non.

Nous souhaitons donc isoler les identifiants ne correspondant pas à ce standard.

Pour cela, crée un fichier, test.txt par exemple, et on y inscrit cette liste d’identifiants:

7737OM
8053HR
8184MH
8579MX
9254NF
1034AP
ADMIN01
ADMIN26
BIZOT
4569DF
BOURGAINET
CHACONNI
4126NR
4685ET
D?ALES
5016NW
DESOUSASSE06
FITGERERT
FRANCINETTE

Pour afficher les occurrences qui correspondent à notre expression régulière, [0-9]{4}[a-zA-Z]{2} (pour 4 chiffres et 2 lettres en minuscule ou majuscule):

egrep "[0-9]{4}[a-zA-Z]{2}" test.txt

7737OM
8053HR
8184MH
8579MX
9254NF
1034AP
4569DF
4126NR
4685ET
5016NW

Pour afficher au contraire les occurrences qui correspondent pas à notre expression régulière, on rajoute l’option « -v »:

egrep -v "[0-9]{4}[a-zA-Z]{2}" test.txt

ADMIN01
ADMIN26
BIZOT
BOURGAINET
CHACONNI
D?ALES
DESOUSASSE06
FITGERERT
FRANCINETTE

Note: On peut également utiliser grep avec l’option « -E » qui forcer grep à se comporter comme egrep:

grep -E "[0-9]{4}[a-zA-Z]{2}" test.txt

Autres exemples:

Recherche les mots dont b n’est pas suivi de o:

egrep "b[^o]" test.txt

Recherche toute ligne qui commence par « De: », « Sujet: » ou « Date: »:

egrep "^(De|Sujet|Date):" test.txt

Recherche et affiche chaque ligne du fichier test.txt qui contient l’occurence bonjour ou Bonjour, les numéros de ligne sont également affichés (option -n):

egrep -n "[bB]onjour" test.txt

Liste toute les lignes du fichier test.txt commençant avec le caractère $:

egrep "^\\$" test.txt

Liste tous les fichiers et répertoires dans le répertoire courant qui ne se terminent pas avec .txt:

ls -l | egrep "[^.txt]$"

Liste tous les fichiers et répertoires dans le répertoire courant qui se terminent avec .txt:

ls -l | egrep "[.txt]$"

Affiche uniquement les lignes dont le numéro de téléphone commence par un 1:

egrep "^1" test.txt

Recherche les lignes avec un 2 à la seconde position et n’importe quel caractère en première position:

egrep "^.2" test.txt

Recherche les lignes dont le premier caractère est différent de 1:

egrep "^[^1]" test.txt

19 octobre 2016 /

Voici méthode qui consiste à démarrer non pas init comme premier processus, mais un shell.

Tout d’abord, au démarrage, quand le menu de grub apparaît (appuyez sur echap si il n’apparaît pas), sélectionnez la ligne de boot sur lequel le système démarre habituellement:

screenshot_centos7-0_starmate_2016-10-15_191840

On va maintenant modifier la ligne de démarrage du système en appuyant sur la touche « e« :

screenshot_centos7-0_starmate_2016-10-15_192623

Sur la ligne commençant par « linux16 /vmlinux….. », nous allons ajouter à la fin « init=/bin/sh » et supprimer « rhgb quiet » :

screenshot_centos7-0_starmate_2016-10-15_194047

On valide les paramètres et on boot en appuyant sur les touches « Ctrl-x » ou bien avec la touche F10.

On arrive très vite dans un shell simple sans mot de passe et avec les droits root:

screenshot_centos7-0_starmate_2016-10-15_193200

On va tout d’abord charger la politique SELinux existante avec cette commande (le -i correspond à « initial policy load ») :

/usr/sbin/load_policy -i

Ensuite, on va remonter « / » en lecture-écriture car il est monté en lecture seule :

mount -o remount,rw /

On peut maintenant passer à la modification du mot de passe root :

passwd root

On ré-étiquette le système (SELinux) pour le prochain redémarrage :

touch /.autorelabel

Il ne reste plus qu’a redémarrer votre CentOS7/RedHat7 pour avoir vous connecter avec le nouveau mot de passe:

exec /sbin/init

12 octobre 2016 /

Un processus zombie est un processus qui a été lancé par un processus parent et qui s’est terminé sans que le processus père ne soit mis au courant.

Le système a donc vidé la mémoire et les ressources utilisées par le processus zombie.
La table des processus garde cependant une trace de celui-ci, (attendant simplement le moment où le processus parent demandera au système d’exploitation l’état de son processus fils) cela crée un processus zombie.

Trop de processus zombies provoque un gaspillage énorme de ressources et peut aussi amener à ne plus pouvoir lancer de nouveaux programmes si le nombre de processus max est atteint au sein du système.

Vous pouvez identifier le nombre maximal de processus:

cat /proc/sys/kernel/pid_max

32768

Généralement, c’est la valeur 32768 qui apparaît.

Pour éviter ce genre de situation, tout processus bien écrit ne devrait pas créer de zombie et par extension, il n’est donc pas normal d’en trouver.
Pour supprimer un zombie, vous devez tuer le processus père.

Attention tout de même, le fait de tuer un processus parent peut rendre votre système instable et vous obliger à redémarrer.

Pour vérifier l’état des processus, on va utiliser la commande ps:

ps aux | grep Z

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
starmate 7294 0.0 0.0 0 0 pts/9 Z 20:47 0:00 [08_zombie]
starmate 7282 0.0 0.0 11812 2316 pts/9 S+ 20:48 0:00 grep --colour=auto Z

La colonne STAT (en gras) affiche un Z si le processus est dans l’état zombie.
C’est le cas du processus qui a le PID 7294.

Pour connaître le processus père, il suffit d’utiliser la commande pstree:

pstree -p -s 7294

init(1)───mdm(1354)───mdm(1381)───init(2525)───entropia(3509)───bash(3682)───08_zombie(7293)───08_zombie(7294)

On peut voir que le processus père est le programme 08_zombie dont le PID est 7293.
Pour tuer ce programme, on utilise la commande kill:

kill -9 7293

Bravo, vous avez tué votre premier zombie.

17 mai 2016 /

Pour mettre Vi/Vim par défaut, plusieurs solution au choix.

Par les Alternatives:

sudo update-alternatives --config editor

Par un export de la variable EDITOR:

vi ~/.profile

Et on y mets cette ligne:

export EDITOR=vim

En modifiant le fichier /etc/sudoers (avec visudo):

sudo visudo

Et on y ajoute cette ligne:

Defaults editor=/usr/bin/vi

10 mai 2016 /

SSHGate est un proxy qui redirige de manière transparente les paquets à travers des tunnels chiffrés SSH, en dissimulant les éléments d’authentification aux utilisateurs.

Reposant entièrement sur le projet OpenSSH, communautaire et non modifié, cet outil propose une CLI d’administration, la gestion d’ACL, gestion de groupe, ainsi que l’enregistrement des sessions utilisateurs, qui peuvent être rejouées ultérieurement à des fins d’analyse.

Un petit mémo des commandes SSHGate

Se connecter:

sshgate-cli -u <login>

 

1 – Gestion des utilisateurs

Lister tous les utilisateurs:

user list

Ajouter un nouvel utilisateur:

user add <user> mail <email>

Supprimer un utilisateur:

user del <user>

Reconstruire le fichier authorized_keys

user build auth_keys

Afficher de la configuration d’un utilisateur:

user <user> display conf

Définir une variables/valeur dans la configuration de l’utilisateur:

user <user> set conf <variable>

Supprimer une variables/valeur dans la configuration de l’utilisateur:

user <user> del conf <variable>

Lister les machines auquels l’utilisateur a accès:

user <user> list targets

Lister les groupes d’utilisateurs de l’utilisateur:

user <user> list usergroups

Lister les groupes de machines auquel l’utilisateur a accès:

user <user> list targetgroups

Savoir si un utilisateur a accès à une machine:

user <user> has access [<login>@]<target>

Lister tous les accès de l’utilisateur, et comment les accès lui sont accordés:

user <user> access info

Envoyer un mail à l’utilisateur pour l’informer de ses accès:

user <user> access notify

Modifier la clef ssh publique d’un utilisateur:

user <user> edit sshkey

Afficher la clef ssh publique d’un utilisateur:

user <user> display sshkey

Mettre à jour la clef ssh Publique d’un utilisateur dans le fichier authorized_keys:

user <user> update auth_keys

 

2 – Gestion des groupes d’utilisateurs

Liste de tous les groupes d’utilisateurs:

usergroup list

Créer un groupe d’utilisateurs:                                             

usergroup add <group>

Supprimer un groupe d’utilisateurs:

usergroup del <group>

Liste des utilisateurs d’un groupe:

usergroup <user-group> list users

Liste les groupes machines qui sont accessible par  un groupe d’utilisateurs:

usergroup <user-group> list targetgroups

Ajouter un utilisateur dans un groupe:

usergroup <user-group> add user <user>

Supprimer un utilisateur d’un groupe:

usergroup <user-group> del user <user>

Liste les cibles qui sont accessibles par un groupe d’utilisateurs:

usergroup <user-group> list targets

Liste toutes les machines accessibles par un groupe d’utilisateurs:

usergroup <user-group> access info

 

3 – Gestion des machines

Liste toutes la machines enregistrées dans SSHgate:

target list

Ajoute une machine:

target add [<login>@]<target>

Ajoute une machine derriere un proxy:

target add [<login>@]<target> with proxy [<login>@]<target>

Ajoute une machine en passant par un rebond:

target add [<login>@]<target> via [<login>@]<target>

Supprime une machine:

target del <target>

Liste tous les alias:

target alias list

liste les alias d’une machine:

target <target> list alias

Obtenez le vrai nom d’une machine:

target <target> realname

Ajouter un nom d’alias pour la machine:

target <target> add alias <alias>

Supprime un nom d’alias pour la machine:

target <target> del alias <alias>

Renommer une machine:

target <target> rename <new-name>

 Afficher le fichier de configuration de la machine:

target <target> display conf

Définir une variables/valeur dans le fichier de configuration de la machine:

target <target> set conf <variable> <value>

Supprimer une variables/valeur dans le fichier de configuration de la machine:

target <target> del conf <variable>

Liste de tous les utilisateurs ayant accès à la machine , et comment:

target [<login>@]<target> access info

Liste des utilisateurs qui ont accès à la machine:

target [<login>@]<target> access list users

Permet à l’utilisateur d’accéder à la machine:

target [<login>@]<target> access add user <user>

Supprime à l’utilisateur l’accès à la machine:

target [<login>@]<target> access del user <user>

Liste tous les groupes qui ont accès à la machine:

target [<login>@]<target> access list usergroups

Permet au groupe d’utilisateur d’accéder à la machine:

target [<login>@]<target> access add usergroup <group>

Supprime au groupe d’utilisateur l’accès à la machine:

target [<login>@]<target> access del usergroup <group>

 

4 – Gestion des clef SSH

Edite le fichier de configuration SSH d’une machine ou d’un login:

target <target> ssh edit config

Afficher le fichier de configuration de SSH d’une machine:

target <target> ssh display config

Affiche entièrement le fichier de configuration SSH d’un login sur une machine:

target [<login>@]<target> ssh display full config

Mise à jour du fichier « known_hosts » pour toutes les machines:

target ssh update known_hosts

Test pour se connecter sur une machine:

target <target> ssh test

Test pour se connecter à toutes les machines:

target <target> ssh test all

Liste tous les logins SSH valident sur une machine:

target <target> ssh list logins

Ajoute un login SSH sur une machine:

target <target> ssh add login <login>

Enleve un login SSH sur une machine:

target <target> ssh del login <login>

Affiche la clef publique de la machine:

target <target> ssh display key

Edite la clef privée de la machine:

target <target> ssh edit key

Tente d’installer la clef publique sur une machine:

target <target> ssh install key

Installe toute les clef SSH publique sur la cible:

target <target> ssh install all key

Mets une clef SSH par défaut pour une machine:

target <target> ssh use default key

 

5 – Gestion des groupe de machines

Liste de tous les groupes de machines:

targetgroup list

Création d’un groupe de machines:

targetgroup add <target-group>

Suppression d’un groupe de machines:

targetgroup del <target-group>

Liste les utilisateurs qui ont accès au groupe de machines:

targetgroup <target-group> list targets

Ajoute une machine dans un  groupe de machine:

targetgroup <target-group> add target [<login>@]<target>

Supprime une machine d’un groupe de machines:

targetgroup <target-group> del target [<login>@]<target>

Liste les utilisateurs ayant accès au groupe de machines:

targetgroup <target-group> access list users

Donne à l’utilisateur l’accès à toutes les machines du groupe de machines:

targetgroup <target-group> access add user <user>

Révoquer l’accès des utilisateurs à cibler l’hôte du groupe de machines:

targetgroup <target-group> access del user <user>

Liste les machines du groupe de machines accessible par le groupe d’utilisateur:

targetgroup <target-group> access list usergroups

Donne au groupe d’utilisateurs l’accès au groupe de machines:

targetgroup <target-group> access add usergroup <user-group>

Enlève au groupe d’utilisateurs l’accès au groupe de machines:

targetgroup <target-group> access del usergroup <user-group>

 

6 – Gestion des sessions

Liste les sessions en cours:

session list current

Liste les dernières sessions connectées:

session list last

Liste les sessions en cours sur une machine:

session target <target> list

Liste les sessions en cours d’un utilisateur:

session user <user> list

Tue une session SSHGate:

session kill <pid>

Debug de SSHgate (équivalent « set -x » en bash):

debug

Plus d’information ici.