Archives de catégorie : Bash

Raspberry et Kubernetes : tuto de montage et installation

Avant toute chose je tiens à remercier toute la communauté de xavki qui a participée à ce projet par le biais de dons.

Pour récapituler voici le matériel utilisé :

  • 3 Raspberry Pi 3 Modèle B
  • 3 Raspberry Pi 4 4G ram
  • 6 dissipateurs
  • Plaque cluster 6
  • Transfo USB
  • Swith 8 ports
  • 10 Cable RJ45
  • 6 Cables USB

Remarques :

  • les raspberry 4 s’alimente à partir d’usb c à la différence des Pi3
  • les pi 4 utilisent des connectiques micro-hdmi

1ère étape : le montage

L’étape la plus fun surement avec un petit jeu de lego. Dans cette vidéo, je vous explique les astuces et la manière d’assembler le tout.

2ème étape : l’installation de l’OS

Pour l’OS, j’ai choisi de faire simple avec un raspbian. Concernant la version j’ai préféré partir vers une stretch. En effet, lors de l’installation de docker celle-ci est la 18.09 avec la stretch et cette version est la maximum acceptée pour le moment par kubernetes.

Autre élément à retenir, la possibilité d’activé le ssh sans écrant et de configurer l’ip statique. Pour cela je vous explique tout dans la vidéo.

3ème étape : l’installation automatisée de kubernetes

Ansible est reconnu. J’ai pu confectionner un rôle à partir des informations recueillies à droite et à gauche. Vous pouvez trouver ce playbook dans ce dépôt.

Et voilà l’installation est terminée. Finalement elle est plutôt simple et relativement accessible.

 

Netcat – envoyer des fichiers entre 2 machines

Avant de commencer, il faut le rappeler la meilleure manière et la plus sécurisée pour envoyer des fichiers entre 2 serveurs c’est scp. SCP s’appuie sur SSH on peut donc lui faire largement confiance.

Mais il faut savoir que parfois on peut utiliser netcat pour envoyer et recevoir des fichiers.

Premier cas, on veut récupérer le fichier via un curl :

# envoi d'un fichier
netcat -l -p 81 < toto.txt

# interrogation
# curl 172.17.0.2:81

Autre méthode avec un netcat à l’écoute qui écrit dans un fichier. Puis un envoi via netcat.

#réception
netcat -l -p 6666 >x.file

#envoi
netcat -w 3 172.17.0.1 6666 <toto.txt

Netcat – Comment réaliser une connexion HTTP ?

Netcat est un outil méconnu, il est souvent utiliser pour tester l’ouverture d’un port et c’est presque tout. Mais pourtant netcat permet de faire bien plus.

Certains black hat l’utilisent pour disposer d’une backdoor le temps de faire quleques opérations par exemple. Sans aller aussi loin je vous propose en quelques articles de découvrir comment en faire plus avec ce vrai couteau suisse du système linux.

Aujourd’hui nous allons commencer très simplement avec une simple connexion HTTP avec un serveur comme apache ou nginx par exemple.

Vous pouvez décourir cela dans cette vidéo :

Pour résumer très simplement :

netcat -v 172.17.0.2 80

Puis pour tester notre connexion, nous pouvons passer :

GET / HTTP/1.0

Avec celle-ci on demande au serveur web de nous fournir la page d’accueil « / ».

Iptables – première règle : dropper les ping

Dans les précédents articles, nous avons découvert l’intérêt d’utiliser iptables et ses principales options. Aujourd’hui je vous propose d’utiliser iptables pour créer une première règle.

C’est souvent un cas d’école, nous allons chercher à empêcher les ping. Pour cela nous allons créer une règle de DROP :

iptables -I INPUT -p icmp --icmp-type 8 -j DROP

Pour lister les règles :

iptables -L

 

Je vous propose de découvrir cela en vidéo

Iptables – principales options

Iptables comme tout bon outil linux permet de recevoir de nombreuses options. Balayons ensemble les principales options. Ces options nombreuses peuvent se combiner. Bien souvent il peut être utile d’avoir recours à un fichier pour créer ces règles iptables. Cela permet d’organiser les règles et de les commenter surtout (les gitter également).

Découvrons ces options en vidéo :

  • -L : liste les règles (–line-numbers : numéros de règles) * -t : type (NAT…)
    -> Type d’actions chaines/règles Actions sur les chaines : INPUT / OUTPUT / FORWARD en majuscules
  • -A : ajout de règle à une chaine (-A INPUT)

  • -D : suppression de règle (-D INPUT 1 – numéro de la règle dans la chaine INPUT )

  • -R : remplace la règle (-R INPUT)

  • -I : insertion d’une règle (sans chiffre au début de la chaine (ex: INPUT 1)

  • -F : flush les règles pour une chaine (-F INPUT)

  • -N : création de chaîne

  • -X : drop de chaine

  • -P : définition de la policy d’une chaine (par défaut – ex: -P INPUT DROP)


-> Caractéristiques <-

  • -p : protocole (-p tcp)

  • -s : la source (ip, réseau)

  • -j : action à faire (DROP/ACCEPT)

  • -d : la destination (ip, réseau)

  • -i : interface d’entrée (eth0…)

  • -o : interface de sortie

  • –sport 80 : un port

  • -m multiport –sport 80,443 : plusieurs ports

  • -t : type (NAT…)

Linux – chercher puis archiver des fichiers avec cpio

Personnellement, j’aime bien me faire des backups facile à utiliser qui regroupent des type de fichiers. Par exemple cela peut être des photos, des scripts, des logs… Généralement pour archiver des masses de fichiers on a tendance à utiliser la commande tar mais dans ce cas de figure ce n’est pas forcément adapté. Effet tar fonctionne par répertoire.

CPIO est une très bonne alternative dans ce cas. En effet, cpio accepte que l’on lui fournisse des fichiers et s’occupe de les ajouter dans un fichier d’archives. On peut l’utiliser avec un pipe à la suite d’un ls mais le plus sympa c’est avec un find.

Par exemple, comment lister les fichiers « .sh » et les archiver ?

find . -name "*.sh" | cpio -o --format=tar > compil.tar

Le pipe facilite donc grandement les choses.

Si vous le souhaitez, vous pouvez retrouver cette article en vidéo.

Shell : commandes internes vs externes ?

Hello les xavkistes !  Dans cet article nous allons revenir sur une vidéo que j’ai publié sur la chaine youtube. Il s’agit de découvrir les deux types de fonctions de shell :

  • les commandes internes
  • les commandes externes

Les premières ont pour caractéristiques d’être présente dans le shell de manière implicite sans avoir besoin de préciser leur localisation à travers le $PATH. On peut lister ses celles-ci si on tape dans la ligne de commandes : help. On y retrouve des commandes comme echo, time, fg…

Les secondes sont donc différentes car il est nécessaire que le PATH soit chargé pour pouvoir les utiliser sinon votre shell ne saura pas où les trouver.

Mais qu’est-ce que cela change ? tout simplement la rapidité pour les appeler. Dans la vidéo ci-dessous je fais un test pour comparer deux calculs similaires mais avec des binaires internes ou externes.

Le résultat semble sans appel. Quand on ne passe par le PATH cela va beaucoup plus vite. Néanmoins il faut modéré ces propos par le fait que nous n’utilisons pas le même binaire et de fait ces derniers ne sont pas faits pour faire la même chose. Donc des performance différentes.

 

[Linux] : pdftk pour fusionner des pdf et d’autres actions

J’aime beaucoup les petits outils linux qui une fois installés permettent en une ligne de faire pas mal de trucs. Souvent on peut ensuite les enchainer avec d’autres outils et le tout fait des trucs sur-puissants sur quelque sligne ou même une seule.

pdftk fait partie de ces outils pratiques. Il permet de faire des actions sur des fichiers pdf, notamment la fusion de pdf.

Ainsi avec :

pdftk fichier1.pdf fichier2.pdf fichier3.pdf cat output fusion.pdf

Donc on merge 3 fichiers pdf en un seul.

On peut aussi supprimer des pages :

pdftk fichier1.pdf cat 1-4 6-end output fusion.pdf

avec cela on supprime la page 5.

Pratiquer une rotation de 90 degrés :

pdftk fichier1.pdf cat 1east 2-end output fusion.pdf

Extraire les metadata d’un fichier pdf :

pdftk fichier1.pdf dump_data output metadata.txt

[Bash] : le bloc note de Wget

Un article pour retenir l’essentiel dans la commande wget. C’est une commande que l’on utilise souvent mais trop rarement on s’y intéresse en détails.

Quelques essentiels :

  • Télécharger simplement un fichier
wget http://google.fr
  • Pour savoir où vous en êtes en cas de crash lors du téléchargement
wget -c http://google.fr
  • Télécharger en arrière plan
wget -b http://google.fr
  • Limiter la vitesse de téléchargement
wget --limit-rate=200k http://google.fr
  • Télécharger à partir d’un fichier contenant une liste d’url
wget -i liste.txt
  • Aspirer la totalité d’un site
wget --mirror -p --convert-links -P ./madestination/ https://xavki.blog
  • Aspirer un ftp avec user/password
wget --ftp-user=user --ftp-password=motdepasse ftp://url

[Bash] : comment remettre en place le bashrc ou le bash_profile par défaut ?

Un article très court aujourd’hui pour revenir sur une situation qui m’est déjà arrivée. Tout heureux d’avoir trouvé une nouvelle fonction à mettre en place dans mon bahsrc, je décide de modifier celui-ci. Donc je faic un vim sur mon fichier favori et je le source.

Et là paff le chien. Mon bashrc ne fonctionne plus donc je reste bloqué sur mon terminal. Et là ce cas est assez facile pour revenir dessus car je sais quelles modifications j’ai fait. Mais cela peut arriver avec des comptes d’exploitation que l’on pousse sur un parc de serveur. Et alors imaginez cela sur un bastion c’est un peu balot.

Parfois on peut avoir besoin de restaurer un bashrc fonctionnel très rapidement. Dans ce cas la solution est de restaurer le bashrc par défaut à partir des squelettes à votre disposition dans /etc/skel :

20:33:33 - oki @ doki /etc/skel
└─ $ ▶ ls -larth
total 28K
-rw-r--r-- 1 root root 3,7K sept. 1 2015 .bashrc
-rw-r--r-- 1 root root 220 sept. 1 2015 .bash_logout
-rw-r--r-- 1 root root 655 mai 16 2017 .profile
cp /etc/skel/.bashrc ~/

Une fois ce copier/coller réalisé, vous devez sourcer le fichier si vous volez :

source ~/.bashrc
board game business challenge chess

Photo by Pixabay on Pexels.com

[Bash] : couper un fichier en plusieurs avec split

Fichier trop gros ou besoin de découper votre fichier en parts égales ou splitter toutes les X lignes, c’est possible. Split est un binaire que j’utilise peu mais qui peu s’avérer très efficace. Voyons un peu comment celui-ci fonctionne avec quelques exemples.

Créons tout d’abord un fichier de test :

└─ $ ▶ for i in {0..100000};do echo "ligne ${i}">>texte.txt; done

Avec ceci nous avons donc un fichier texte de 100 000 lignes.

Lançons un split sans option :

split texte.txt

Nous obtenons de nombreux fichiers de 1000 lignes chacun.

└─ $ ▶ wc -l x*
   1000 xaa
   1000 xab
   1000 xac

Remarquez que tous commence par un x.

Utilisons l’option -l pour définir le nombre de ligne par fichier :

└─ $ ▶ split -l50000 texte.txt 


└─ $ ▶ wc -l x*
50000 xaa
50000 xab

De la me manière nous aurions pu découper par taille de fichier en bytes avec l’option -b.

La nomenclature imposé dans le nommage du fichier est pas très fun mais on peut la retoucher en définissant un suffix numérique par exemple avec l’option -d. On a alors des fichiers nomé x01, x02…

Mais ce qui est le plus intéressant c’est de combiner l’utilisation d’un suffix et d’une numérotation numérique. Pour cela utilisons :

└─ $ ▶ split -d -l50000 texte.txt suffix-
└─ $ ▶ wc -l suffix*
50000 suffix-00
50000 suffix-01

Jusqu’ici je dirais que ce qui est embêtant c’est de se poser la questionde quel pas pour splitter les fichiers et combien vais-je en obtenir ? et bien au lieu de définir une taille ou un nombre de ligne, on peut définir le nombre de fichiers à la sortie avec l’option -n.

└─ $ ▶ split -d -n4 texte.txt suffix-
└─ $ ▶ wc -l suffix*
25694 suffix-00
24769 suffix-01
24769 suffix-02
24769 suffix-03

Comment fusionner tous les fichiers à l’arrivée si on a besoin du fichier d’origine ?

└─ $ ▶ md5sum texte.txt 
d4da8315d007541dfdcf61e2ea2fbecd texte.txt
└─ $ ▶ cat suffix-* | md5sum
d4da8315d007541dfdcf61e2ea2fbecd -

Un cat suffit et vous le voyez vous pouvez faire des vérifications sur le contenu avec le fameux md5sum.

Top commandes linux #10 : apg, tar.gz, mariadb galera, comm, rpm, vim

Nouvelle semaine, nouveau tour de quelques binaires et informations que j’ai découvert au cours de la semaine. Je vous rappelle que vous pouvez les retrouver sur cette page. Par ailleurs, si vous ne voulez pas manquer les prochains articles, inscrivez-vous aux publications (zéro spam, pas de ebook et autres perturbations).

# rpm

Lister les 100 plus gros paquets installés sur une redhat sauf kernel, glib…

rpm -qa --queryformat "%10{SIZE} %{NAME}\n" | grep -Ev "(kernel|glibc|perl$|python-libs$|coreutils|hwdata$|glib2|grub2$|yum$|binutils$)" | sort -rn | head -100

# vim

Ajout du nom du fichier en cours d’édition

:%p

# apg

Petit binaire pour générer un mot de passe simplement.

21:48:52 - oki @ doki ~ 
└─ $ ▶ apg

Please enter some random data (only first 16 are significant)
(eg. your old password):>
anFiwiorj6 (an-Fi-wi-orj-SIX)
leffIttOlv7 (leff-Itt-Olv-SEVEN)
Piewgeeb0 (Piewg-eeb-ZE
fegBetEv4 (feg-Bet-Ev-FOUR)

# tar.gz

Comment conserver les propriétaires et les permissions ?

tar -zcvf /destination.monfichier.tar.gz
--same-owner --same-permissions /repertoire/source/

# comm

Comparer deux répertoires sur 2 colonnes

comm -3 <(ls olddir) <(ls newdir)

Article de  la semaine :

Vidéo de la semaine :