Tag Archives: linux

Utiliser Screen sous votre Linux RaspBerry Pi

linux screen

Aujourd’hui, nous allons apprendre à utiliser Screen sous notre RaspBerryPi mais ce tutoriel est valable pour tout système linux.

A quoi sert Screen ?

Screen est une application qui permet d’exécuter d’autres applications en tâche de fond, ce qui laisse le terminal disponible pour effectuer d’autres informations.

Comme je prends le contrôle à distance sur mon RaspBerry Pi en utilisant putty et SSH, Screen me permet d’exécuter plusieurs tâches en parallèle sans pour autant devoir ouvrir plusieurs terminaux.

Comment installer Screen ?

Pour installer Screen, il suffit d’exécuter la commande suivante:

apt-get install screen

 Les principales commandes de Screen

Voici la liste des principales commandes de Screen:

  • screen -ls : Affiche les screens ouvert
  • screen -dr : Récupérer un screen ouvert
  • ctrl+a : Commande principale
Et voici la liste des options disponible pour la commande ctrl+a:
  • “ : Affiche la liste des screens
  • w : Nous informe sur quel screen nous sommes
  • d : Détache le screen actuel
  • c : Créer un nouveau Screen
  • shift+A : Renomme le Screen courant

Utiliser Screen

Pour utiliser Screen, c’est tout simple. Ouvrez un terminal et tapez la commande suivante:
screen

Ceci va “ouvrir un terminal” en “screen” (tâche de fond).

Vous pouvez alors exécuter toutes les commandes que vous souhaitez (top, ntop, bw-g, …)

Une fois cette commande tapée, il faut appuyer sur “ctrl+a” puis “d” afin de se détacher de ce screen (de cet écran). Vous aurez alors un message de ce genre:

[detached from 11199.pts-0.jhdserver]

En tapant la commande “screen -ls” dans un terminal, vous obtiendrez la liste de tous les screens en cours d’exécution:

root@jhdserver:/home/jhd# screen -ls
There is a screen on:
        11199.pts-0.jhdserver   (10/12/2012 09:37:30 PM)        (Detached)
1 Socket in /var/run/screen/S-root.

Pour récupérer un screen, il suffit de lancer la commande “screen -dr pid”.

Pour fermer un screen, il suffira alors de lancer la commande “exit”.

 

Eteindre son ordinateur Linux en ligne de commande

shutdown

Mon serveur est sous Ubuntu Server et des fois j'ai besoin de l'arrêter via une ligne de commande.

Veuillez noter qu'il faut être identifié en tant que "root" pour pouvoir exécuter les commandes qui suivent.

La commande ShutDown

La méthode la plus simple pour éteindre votre ordinateur est d'utiliser la commande "shutdown":

shutdown -h time "votre_message"
shutdown -h now "votre_message"

Voici le détail des options:

  • -h: éteindre l'ordinateur
  • time: délai pour éteindre l'ordinateur. Le format utilisé est HH:mm (02:30 par exemple pour un délai de 2 heures 30). Le mot clé "now" permet d'éteindre l'ordinateur immédiatement
  • "votre_message": est le message qui sera envoyé à tous les utilisateurs loggués à la machine.

La commande PowerOff

La commande "poweroff" permet d'éteindre immédiatement votre ordinateur sous Linux. Elle s'utilise en utilisant la commande suivante:

poweroff

Voir la log de l'historique des arrêts et redémarrage du système

Sous linux, il est possible de visualiser la log des reboots et shutdown (redémarrages et arrêts).

Il suffit d'utiliser les commandes suivantes:

last reboot
last shutdown

Ce qui retournera:

reboot   system boot  3.0.0-17-generic Mon Apr 16 12:05 - 12:21  (00:16)
reboot   system boot  3.0.0-17-generic Mon Apr 16 11:59 - 12:04  (00:04)
reboot   system boot  3.0.0-17-generic Mon Apr 16 11:52 - 11:58  (00:06)
reboot   system boot  3.0.0-17-generic Sun Apr 15 13:15 - 11:50  (22:34)
reboot   system boot  3.0.0-17-generic Sun Apr 15 13:12 - 13:14  (00:02)
reboot   system boot  3.0.0-17-generic Sun Apr 15 13:01 - 13:10  (00:09)
reboot   system boot  3.0.0-17-generic Sun Apr 15 10:46 - 13:00  (02:13)
reboot   system boot  3.0.0-17-generic Sun Apr 15 10:44 - 10:45  (00:00)
reboot   system boot  3.0.0-16-generic Fri Apr  6 23:44 - 10:42 (8+10:58)
reboot   system boot  3.0.0-16-generic Fri Apr  6 23:42 - 23:42  (00:00)
reboot   system boot  3.0.0-16-generic Fri Apr  6 23:39 - 23:42  (00:03)
reboot   system boot  3.0.0-16-generic Thu Apr  5 19:04 - 23:42 (1+04:38)
reboot   system boot  3.0.0-16-generic Thu Apr  5 18:57 - 19:00  (00:02)
reboot   system boot  3.0.0-16-generic Wed Apr  4 22:15 - 18:46  (20:30)
reboot   system boot  3.0.0-16-generic Wed Apr  4 22:07 - 22:12  (00:05)
reboot   system boot  3.0.0-16-generic Wed Apr  4 22:03 - 22:05  (00:01)
reboot   system boot  3.0.0-16-generic Wed Apr  4 21:49 - 21:50  (00:00)
reboot   system boot  3.0.0-16-generic Wed Apr  4 21:46 - 21:47  (00:01)
reboot   system boot  3.0.0-16-generic Wed Apr  4 21:08 - 21:44  (00:35)
reboot   system boot  3.0.0-16-generic Wed Apr  4 20:32 - 21:06  (00:33)

Récupérer des informations matérielles via SSH

Memory

Aujourd'hui j'ai été confronté à une intrigue toute simple: comment connaitre le type (DDR, DDR2, DDR3) et la vitesse de la mémoire RAM installée sur mon serveur dédié Linux ?

En effet, lorsque le serveur Linux est dans vos locaux, il suffit de décapoter la machine et de regarder directement sur les barettes mais dans le cas d'un serveur Linux hébergé à distance c'est plus compliqué.

Et bien pas tant que çà puisqu'il est possible de récupérer les informations matérielles de votre serveur Linux via une simple commande SSH.

Récupérer les informations matérielles via SSH

Pour récupérer les informations hardware via SSH, nous allons utiliser l'application "DmiDecode".

Cette application en ligne de commande permet d'extraire des informations relatives à vos composants et à votre matériel (RAM, CPU, Bios, Chassis, Carte mère, Numéros de série,…).

En explorant la page man de l'application "DmiDecode", on peut voir tous les types d'informations hardware que l'on peut récupérer sous Linux:

       Type   Information
       ââââââââââââââââââââââââââââââââââââââââ
          0   BIOS
          1   System
          2   Base Board
          3   Chassis
          4   Processor
          5   Memory Controller
          6   Memory Module
          7   Cache
          8   Port Connector
          9   System Slots
         10   On Board Devices
         11   OEM Strings
         12   System Configuration Options
         13   BIOS Language
         14   Group Associations
         15   System Event Log
         16   Physical Memory Array
         17   Memory Device
         18   32-bit Memory Error
         19   Memory Array Mapped Address
         20   Memory Device Mapped Address
         21   Built-in Pointing Device
         22   Portable Battery
         23   System Reset
         24   Hardware Security
         25   System Power Controls
         26   Voltage Probe
         27   Cooling Device
         28   Temperature Probe
         29   Electrical Current Probe
         30   Out-of-band Remote Access
         31   Boot Integrity Services
         32   System Boot
         33   64-bit Memory Error
         34   Management Device
         35   Management Device Component
         36   Management Device Threshold Data
         37   Memory Channel
         38   IPMI Device
         39   Power Supply

Récupérer les informations hardware de votre RAM

Voici la commande à utiliser:

dmidecode --type 17

Ce qui retournera:

# dmidecode 2.9
SMBIOS 2.5 present.

Handle 0x0032, DMI type 17, 27 bytes
Memory Device
        Array Handle: 0x0031
        Error Information Handle: Not Provided
        Total Width: 64 bits
        Data Width: 64 bits
        Size: 2048 MB
        Form Factor: DIMM
        Set: None
        Locator: DIMM_A1
        Bank Locator: Bank0/1
        Type: DDR2
        Type Detail: None
        Speed: 800 MHz (1.2 ns)
        Manufacturer: None
        Serial Number: None
        Asset Tag: None
        Part Number: None

Handle 0x0033, DMI type 17, 27 bytes
Memory Device
        Array Handle: 0x0031
        Error Information Handle: Not Provided
        Total Width: 64 bits
        Data Width: 64 bits
        Size: 2048 MB
        Form Factor: DIMM
        Set: None
        Locator: DIMM_B1
        Bank Locator: Bank2/3
        Type: DDR2
        Type Detail: None
        Speed: 800 MHz (1.2 ns)
        Manufacturer: None
        Serial Number: None
        Asset Tag: None
        Part Number: None

Handle 0x0034, DMI type 17, 27 bytes
Memory Device
        Array Handle: 0x0031
        Error Information Handle: Not Provided
        Total Width: 64 bits
        Data Width: 64 bits
        Size: No Module Installed
        Form Factor: DIMM
        Set: None
        Locator: DIMM_A2
        Bank Locator: Bank4/5
        Type: Unknown
        Type Detail: None
        Speed: Unknown
        Manufacturer: None
        Serial Number: None
        Asset Tag: None
        Part Number: None

Handle 0x0035, DMI type 17, 27 bytes
Memory Device
        Array Handle: 0x0031
        Error Information Handle: Not Provided
        Total Width: 64 bits
        Data Width: 64 bits
        Size: No Module Installed
        Form Factor: DIMM
        Set: None
        Locator: DIMM_B2
        Bank Locator: Bank6/7
        Type: Unknown
        Type Detail: None
        Speed: Unknown
        Manufacturer: None
        Serial Number: None
        Asset Tag: None
        Part Number: None

On récupère donc toutes les informations disponibles sur nos barettes de mémoire RAM.

Pour récupérer uniquement la vitesse de votre RAM, vous pouvez utiliser:

dmidecode --type 17  | grep -i speed

Ce qui retournera:

        Speed: 800 MHz (1.2 ns)
        Speed: 800 MHz (1.2 ns)
        Speed: Unknown
        Speed: Unknown

Connaitre l’espace disque utilisé par des fichiers

filesize-du

Il est souvent nécessaire de connaitre la taille utilisée par certains fichiers afin de pouvoir faire du ménage par exemple.

Il est d'autant plus intéressant de pouvoir récupérer ces informations dans un format lisible et compréhensible (Human Readable).

Par chance, Linux propose la commande "du" qui permet de savoir l'espace disque utilisé par des fichiers.

Voici comment elle s'utilise:

du -h
du -h /tmp
du -h /home/jhd
du -h /dataz

Ce qui retournera un résultat de ce genre:

$ du -h /tmp/
4.0K    /tmp/ssh-EUpKyOpk2027
4.0K    /tmp/pulse-PKdhtXMmr18n
4.0K    /tmp/keyring-1cbSRP
36K     /tmp/hsperfdata_jhd
4.0K    /tmp/.X11-unix
4.0K    /tmp/.esd-1000
4.0K    /tmp/.webmin
4.0K    /tmp/.ICE-unix
4.0K    /tmp/virtual-jhd.ADDPGK
4.0K    /tmp/aptdaemon-QlljTo
8.0K    /tmp/pulse-EBSG9ADY9z0G
92K     /tmp/

Petite astuce: il est également possible de trier le résultat via la commande suivante:

du -hs /tmp | sort -h

Lire un fichier ligne par ligne sous Linux

shell-scripting

Il peut être pratique lorsque vous êtes en mode Terminal de lire un fichier ligne par ligne.

Pour se faire, vous pouvez utiliser un script Bash ou un script KSH.

Script KSH pour parcourir ligne par ligne un fichier

#!/bin/ksh
file="/home/vivek/data.txt"
while read line
do
        # display $line or do somthing with $line
	echo "$line"
done <"$file"

Script Bash pour parcourir ligne par ligne un fichier

#!/bin/bash
file="/home/vivek/data.txt"
while IFS= read -r line
do
        # display $line or do somthing with $line
	echo "$line"
done <"$file"

Apprenez à utiliser IpTable, le firewall Linux

iptables-firewall

Un firewall est un logiciel indispensable sur un serveur car il permet de gérer et limiter les connexions entrantes et sortantes.

Comme pour Windows, il existe de nombreux parefeux (firewall) sous Linux mais le plus communément utilisé est IpTables.

En effet, IpTables est disponible nativement sur les distributions Linux et il est relativement complet.

Nous allons donc voir les fonctions principales que l'on peut utiliser.

IANA nous explique les ports

IANA (Internet Assigned Numbers Authority) est l'autorité qui définit les ports des applications communes.

Sous Linux, vous pouvez ainsi voir l'ensemble de l'assignation des ports via la commande:

nano /etc/services

Vous verrez alors une liste de ports, leur protocol et le nom de l'application qui les utilisent:

ftp-data        20/tcp
ftp             21/tcp
fsp             21/udp          fspd
ssh             22/tcp                          # SSH Remote Login Protocol
ssh             22/udp
telnet          23/tcp
smtp            25/tcp          mail
time            37/tcp          timserver
time            37/udp          timserver
rlp             39/udp          resource        # resource location
nameserver      42/tcp          name            # IEN 116

Maintenant que vous connaissez les principaux ports, vous pouvez utiliser IpTables pour en bloquer ou en autoriser certains.

Bloquer un port entrant avec IpTables

La syntaxe pour bloquer un port entrant est la suivante:

# bloquer un port entrant
/sbin/iptables -A INPUT -p tcp --destination-port {NUMERO_DE_PORT} -j DROP
 
# bloquer un port entrant sur l'interface eth0
/sbin/iptables -A INPUT -i eth0 -p tcp --destination-port {NUMERO_DE_PORT} -j DROP
 
# bloquer un port entrant sur l'interface eth0 pour une adresse ip ou un réseau
/sbin/iptables -A INPUT -i eth0 -p tcp --destination-port {NUMERO_DE_PORT} -s {ADRESSE_IP} -j DROP
/sbin/iptables -A INPUT -i eth0 -p tcp --destination-port {NUMERO_DE_PORT} -s {IP_OU_RESEAU} -j DROP

Ainsi pour bloquer le port 80 qui correspond au serveur HTTP, il faut utiliser la commande suivante:

/sbin/iptables -A INPUT -p tcp --destination-port 80 -j DROP

Puis il faut sauver les modifications:

/sbin/service iptables save

Petite astuce: pour bloquer le port 80 sauf pour l'ip 10.1.1.1, il faudra utiliser la commande suivante:

/sbin/iptables -A INPUT -p tcp -i eth1 -s ! 10.1.1.1 --dport 80 -j DROP

Bloquer un port sortant

De la même manière, pour bloquer un port sortant on utilisera la synxtaxe:

# bloquer un port sortant
/sbin/iptables -A OUTPUT -p tcp --dport {NUMERO_DE_PORT} -j DROP
 
# bloquer un port sortant sur l'interface eth0
/sbin/iptables -A OUTPUT -i eth0 -p tcp --dport {NUMERO_DE_PORT} -j DROP
 
# bloquer un port sortant sur l'interface eth0 pour une adresse ip ou un réseau
/sbin/iptables -A OUTPUT -i eth0 -p tcp --destination-port {NUMERO_DE_PORT} -s {ADRESSE_IP} -j DROP
/sbin/iptables -A OUTPUT -i eth0 -p tcp --destination-port {NUMERO_DE_PORT} -s {IP_OU_RESEAU} -j DROP

Par exemple, pour bloquer le port sortant 25 qui correspond au port smtp, on fera:

/sbin/iptables -A OUTPUT -p tcp --dport 25 -j DROP
/sbin/service iptables save

Pour bloquer le port 25 pour l'ip 10.1.1.1 uniquement on utilisera:

/sbin/iptables -A OUTPUT -p tcp -d 10.1.1.1 --dport 25 -j DROP
/sbin/service iptables save

Logguer les ports bloqués

Il peut être intéressant de savoir quels ports ont été bloqués et pour quelles adresses ip afin de superviser correctement son réseau:

# Logging #
/sbin/iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "PORT 80 DROP: " --log-level 7
/sbin/iptables -A INPUT -p tcp --destination-port 80 -j DROP

Un exemple concret: bloquer un cracker

Pour terminer, voilà un exemple pratique qui vous servira probablement. Il vous permet de bloquer un hacker qui lance de multiple requêtes UDP sur le port 161 (snmp) de votre serveur. Dans cet exemple, le cracker a l'ip 192.168.1.5

/sbin/iptables -A INPUT -s 192.168.1.5 -i eth1 -p udp -m state --state NEW -m udp --dport 161 -j DROP

Cette initiation à IpTables n'est qu'une entrée en la matière concernant les fonctionnalités offertes par ce firewall. Vous apprendez rapidement à configurer votre parefeu afin de sécuriser au maximum votre réseau.

Information sur une ip sur Linux

ip-lookup

Lorsque l'on utilise Linux, on peut avoir besoin de récupérer des informations concernant une adresse ip publique. C'est ce que l'on appelle communément le LookUp d'une Ip

Plusieurs possibilités s'offrent alors à nous.

Nous allons détailler 3 fonctions utilisables en ligne de commande.

La commande "host"

host www.zem.fr

La commande précédente renvoie:

www.zem.fr is an alias for zem.fr.
zem.fr has address 188.121.58.1
zem.fr mail is handled by 1 redirect.ovh.net.

La commande "Dig"

dig www.zem.fr
La commande précédente renvoie:
; <<>> DiG 9.7.3 <<>> www.zem.fr
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27315
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;www.zem.fr.                    IN      A

;; ANSWER SECTION:
www.zem.fr.             73018   IN      CNAME   zem.fr.
zem.fr.                 86017   IN      A       188.121.58.1

;; Query time: 0 msec
;; SERVER: 192.168.0.254#53(192.168.0.254)
;; WHEN: Mon Apr  2 21:36:11 2012
;; MSG SIZE  rcvd: 64

La commande "nslookup"

nslookup www.zem.fr
La commande précédente retourne:
Server:         192.168.0.254
Address:        192.168.0.254#53

Non-authoritative answer:
www.zem.fr      canonical name = zem.fr.
Name:   zem.fr
Address: 188.121.58.1

Les commandes "host", "dig" et "nslookup" renvoie des résultats plus ou moins complets. A vous donc d'utiliser celle qui conviendra le mieux à vos besoins.

Générateur de mots de passe sous Linux

password generator

Comment générer rapidement et facilement des mots de passe de manière aléatoire ? Tout le monde s'est posé cette question et pourtant il existe un moyen tout simple pour générer vos mots de passe sous Linux.

Pour se faire, il faut éditer le fichier bashrc:

nano ~/.bashrc

Puis ajoutez le code suivant à la fin du fichier:

genpassword() {
	local l=$1
       	[ "$l" == "" ] && l=16
      	tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs
}

Sauvegardez le fichier puis recharger votre configuration via la commande:

source ~/.bashrc

Il ne vous reste plus qu'à exécuter la commande suivante pour générer un mot de passe automatiquement:

genpassword

Vous pouvez également générer un mot de passe contenant 10 caractères via la commande:

genpassword 10

Monter un disque en ligne de commande sous Linux

Hard_Drive

Lorsque l'on travaille sous des serveurs Linux, la seule manière d'effectuer une action est l'utilisation de lignes de commande via la console.

Parmi les opérations les plus fréquemment utilisées on trouve le montage d'un disque ou d'un volume .

Monter un volume

Pour monter un volume, il faut au préalable que le répertoire de destination existe. Si ce n'est pas le cas, il faut le créer:

mkdir /media/cleusb

Pour monter le disque, il suffit alors d'exécuter la commande suivante:

mount /dev/sdb1 /media/cleusb

Pour vérifier que votre volume soit bien monté, il suffit de faire:

df -H

Montage automatique au démarrage

Il peut être pratique de monter automatiquement les volumes ou les disques au démarrage du système. Il suffit d'éditer le fichier "fstab":

nano /etc/fstab
/dev/sdb1    /media/cleusb   ext3    defaults     0        2

Rien de plus simple :)

Exécuter un script sous Linux

shell-scripting

Depuis plusieurs mois, je joue pas mal avec mon serveur Linux et du coup je suis amené à faire pas mal de recherche pour trouver comment réaliser certaines commandes de bases comme:

  • rechercher des fichiers
  • supprimer des répertoires de manière redondante
  • exécuter des scripts
  • installer un serveur MySql
  • etc…

Bien sûr, Linux vous offre le MAN pour vous aider et vous guider mais bien souvent cela ne suffit pas. Toute l'information nécessaire pour mener à bien un projet ou pour effectuer une action est disponible sur Internet. Mais encore faut il pouvoir la trouver.

Je vous propose donc de poster une série de tutoriaux tout simples, des sortes de pense bête afin de répondre aux besoins que je rencontre le plus souvent.

Un des premiers besoins que j'ai eu a été de pouvoir exécuter des scripts de maintenance et de copie de fichiers.

Avant de pouvoir exécuter un script, il faut s'assurer que ce dernier dispose des droits d'exécution.

Pour donner les droits d'exécution à un script, il faut utiliser la commande suivante :

chmod +x monscript.sh

Ensuite vous pourrez exécuter votre script via la commande :

./monscript.sh

Vous pouvez également utiliser la commande "sh"

sh monscript.sh

Pour exécuter un script KSH il faut exécuter la commande:

ksh monscript.ksh

Pour exécuter un script BASH il faut exécuter la commande:

bash monscript.bash

Rien de bien compliqué quoi :)