Post

Serveur Debian10

PC2 (Carte mère ASRock QC5000M Quad-Core APU)

Serveur Debian10

ASRock QC5000M Quad-Core APU

ASRock QC5000M (pdf)

ASRock QC5000M

  • Platform
    • Micro ATX Form Factor
    • Solid Capacitor design
    • High Density Glass Fabric PCB
  • CPU
    • AMD FT3 Kabini A4-5050/5000 Quad-Core APU
  • Memory
    • 2 x DDR3 DIMM Slots
    • Supports DDR3 1600/1333/1066 non-ECC, un-buffered memory
    • Max. capacity of system memory: 32GB (see CAUTION1)
  • Expansion Slot
    • 1 x PCI Express 2.0 x16 Slot (PCIE2: x4 mode)
    • 2 x PCI Express 2.0 x1 Slot
  • Graphics
    • Integrated AMD RadeonTM HD 8330 Graphics
    • DirectX 11.1, Pixel Shader 5.0
    • Max. shared memory 2GB
    • Dual graphics output: support D-Sub and HDMI ports by independent display controllers (see CAUTION2)
    • Supports HDMI with max. resolution up to 4K × 2K (4096x2160) @ 24Hz or 4K × 2K (3840x2160) @ 30Hz
    • Supports D-Sub with max. resolution up to 2048x1536 @ 60Hz
    • Supports Auto Lip Sync, Deep Color (12bpc), xvYCC and HBR (High Bit Rate Audio) with HDMI Port (Compliant HDMI monitor is required)
    • Supports HDCP with HDMI Port
    • Supports Full HD 1080p Blu-ray (BD) playback with HDMI Port
  • Audio
    • 7.1 CH HD Audio (Realtek ALC887 Audio Codec) * To configure 7.1 CH HD Audio, it is required to use an HD front panel audio module and enable the multi-channel audio feature through the audio driver.
    • Supports Surge Protection (ASRock Full Spike Protection)
    • ELNA Audio Caps
  • LAN
    • PCIE x1 Gigabit LAN 10/100/1000 Mb/s
    • Rea ltek RTL 8111GR
    • S u p p o r t s Wa k e - O n -WA N
    • Suppor t s Wa ke- On-L A N
    • Supports Lightning/ESD Protection (ASRock Full Spike Protection)
    • Supports LAN Cable Detection
    • Supports Energy Efficient Ethernet 802.3az
    • Supports PXE
  • Rear Panel I/O
    • 1 x PS/2 Mouse/Keyboard Port
    • 1 x Serial Port: COM1
    • 1 x D-Sub Port
    • 1 x HDMI Port
    • 4 x USB 2.0 Ports (Supports ESD Protection (ASRock Full Spike Protection))
    • 2 x USB 3.0 Ports (Supports ESD Protection (ASRock Full Spike Protection))
    • 1 x RJ-45 LAN Port with LED (ACT/LINK LED and SPEED LED)
    • HD Audio Jacks: Line in / Front Speaker / Microphone
  • Storage
    • 2 x SATA3 6.0 Gb/s Connectors, support NCQ, AHCI and Hot Plug
  • Connector
    • 1 x TPM Header
    • 1 x CPU Fan Connector (3-pin)
    • 2 x Chassis Fan Connectors (1 x 4-pin, 1 x 3-pin)
    • 1 x 24 pin ATX Power Connector
    • 1 x Front Panel Audio Connector
    • 2 x USB 2.0 Headers (Support 4 USB 2.0 ports) (Supports ESD Protection (ASRock Full Spike Protection))
  • BIOS Feature
    • 32Mb AMI UEFI Legal BIOS with multilingual GUI support
    • Supports “Plug and Play”
    • ACPI 1.1 compliance wake up events
    • SMBIOS 2.3.1 support
    • DRAM Voltage multi-adjustment
  • HardwareMonitor
    • CPU/Chassis temperature sensing
    • CPU/Chassis Fan Tachometer
    • CPU/Chassis Quiet Fan
    • CPU/Chassis Fan multi-speed control
    • Voltage monitoring: +12V, +5V, +3.3V, Vcore
  • OS
    • Microsoft® Windows® 10 64-bit / 8.1 32-bit / 8.1 64-bit / 8 32-bit / 8 64-bit / 7 32-bit / 7 64-bit / XP 32-bit / XP 64-bit*
    • USB 3.0 is not supported by Windows® XP* For the updated Windows® 10 driver, please visit ASRock’s website for details: http://www.asrock.com
  • Certifica-tions
    • FCC, CE, WHQL
    • ErP/EuP ready (ErP/EuP ready power supply is required)

Boot sur USB “partedmagic”

Partitionnement du disque

  • 2MB, type EF02 (BIOS partition). Utilisé par GRUB2/BIOS-GPT. (/dev/sda1)
  • 512MB, type 8300 (Linux). Pour le boot linux /boot (/dev/sda2)
  • 4GB, type 8200 (swap). Partition swap (en dehors de lvm). (/dev/sda3)
  • Espace restant, type 8E00 (LVM). Pour le root / + /home et autres. (/dev/sda4).

Partitionnement du reste du disque SSD 120G GPT + LVM

1
gdisk /dev/sda

On passe en mode expert : x
On efface tout : z
On relance gdisk

1
gdisk /dev/sda
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
GPT fdisk (gdisk) version 0.8.6
 
Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present
 
Creating new GPT entries.
 
Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y

Command (? for help): n
Partition number (1-128, default 1): 
First sector (34-937703054, default = 2048) or {+-}size{KMGTP}: 
Last sector (2048-937703054, default = 937703054) or {+-}size{KMGTP}: +2M
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): ef02
Changed type of partition to 'BIOS boot partition'

Command (? for help): n
Partition number (2-128, default 2): 
First sector (34-937703054, default = 6144) or {+-}size{KMGTP}: 
Last sector (6144-937703054, default = 937703054) or {+-}size{KMGTP}: +512M
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 
Changed type of partition to 'Linux filesystem'

Command (? for help): n
Partition number (3-128, default 3): 
First sector (34-937703054, default = 1054720) or {+-}size{KMGTP}: 
Last sector (1054720-937703054, default = 937703054) or {+-}size{KMGTP}: +4G
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 8200
Changed type of partition to 'Linux swap'

Command (? for help): n
Partition number (4-128, default 4): 
First sector (34-937703054, default = 9443328) or {+-}size{KMGTP}: 
Last sector (9443328-937703054, default = 937703054) or {+-}size{KMGTP}: 
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300): 8e00
Changed type of partition to 'Linux LVM'
 
Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
 
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sda.
The operation has completed successfully.

CT480M

Installation debian 10

  • Installation effectuée à partir d’une clé USB bootable , fichier debian+firmware ISO : firmware-10.4.0-amd64-netinst.iso
  • Choix “partitionnement manuel”

Debian 10

  • Serveur virtuel 64 bits VirtualBox : Debian Buster
  • machine : srvct
  • domaine :
  • root : ytreu49
  • Utilisateur : ctuser
  • Mot de passe : ctuser49
  • Adresse IP : 192.168.0.45
  • Accès
    • SSH : ssh bust@192.168.0.45
    • SSH + clé : **ssh -i ~/.ssh/vbox-vmbust-ed25519 bust@192.168.0.49** (facultatif)
    • Transfert de fichier : **scp -P 55022 -i ~/.ssh/vbox-vmbust-ed25519 fichiera fichierb bust@192.168.0.49:/home/bust** (facultatif)

Partitionnement

Partition Taille _ Type Commentaire _
n°1 2.1 MB K biosgrub Bios BIOS boot partition  
n°2 536.9 MB   ext2 Linux filesys /boot
n°3 4.3 GB F swap Linux swap swap

Créer un volume de groupe vg-ct480 sur /dev/sda4
Créer un volume logique lv-root de 35Go
Créer la partition “root” avec le volume logique “lv-root”

Sélection des logiciels

  • serveur SSH
  • utilitaires usuels du système

Oter la clé après installation

Connexion SSH

1
ssh ctuser@192.168.0.45

Passer en root

1
su 

Mise à jour

1
apt update && apt upgrade -y

Installer les outils et sudo

1
apt install rsync curl tmux jq figlet tree git -y

Installer sudo

1
apt install sudo

Visudo pour les accès root via utilisateur bust

1
echo "ctuser     ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

Historique de la ligne de commande

Ajoutez la recherche d’historique de la ligne de commande au terminal. Tapez un début de commande précédent, puis utilisez shift + up (flèche haut) pour rechercher l’historique filtré avec le début de la commande.

1
2
3
# Global, tout utilisateur
echo '"\e[1;2A": history-search-backward' | sudo tee -a /etc/inputrc
echo '"\e[1;2B": history-search-forward' | sudo tee -a /etc/inputrc

OpenSSH, clé et script

OpenSSH

connexion avec clé
sur l'ordinateur de bureau Générer une paire de clé curve25519-sha256 (ECDH avec Curve25519 et SHA2) nommé srvct-ed25519 pour une liaison SSH avec le serveur KVM.

1
ssh-keygen -t ed25519 -o -a 100 -f ~/.ssh/srvct-ed25519

Envoyer la clé publique sur le serveur KVM

1
scp ~/.ssh/srvct-ed25519.pub ctuser@192.168.0.45:/home/ctuser/

sur le serveur KVM On se connecte

1
ssh ctuser@192.168.0.45

Copier le contenu de la clé publique dans /home/$USER/.ssh/authorized_keys

1
cd ~

Sur le KVM ,créer un dossier .ssh

1
2
mkdir .ssh
cat $HOME/srvct-ed25519.pub >> $HOME/.ssh/authorized_keys

et donner les droits

1
chmod 600 $HOME/.ssh/authorized_keys

effacer le fichier de la clé

1
rm $HOME/srvct-ed25519.pub

Modifier la configuration serveur SSH

Port = 55035 # changement numéro port , facultatif
PasswordAuthentication no # Utilise la clé comme authentification

Exécuter les commande ci-dessous

1
2
sudo sed -i 's/#Port 22/Port 55035/g' /etc/ssh/sshd_config
sudo sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/g' /etc/ssh/sshd_config

Modifier

session SSH ne se termine pas correctement lors d'un "reboot" à distance
Si vous tentez de redémarrer/éteindre une machine distance par ssh, vous pourriez constater que votre session ne se termine pas correctement, vous laissant avec un terminal inactif jusqu’à l’expiration d’un long délai d’inactivité. Il existe un bogue 751636 à ce sujet. Pour l’instant, la solution de contournement à ce problème est d’installer :

1
sudo apt-get install libpam-systemd  # Installé par défaut sur debian buster

cela terminera la session ssh avant que le réseau ne tombe.
Veuillez noter qu’il est nécessaire que PAM soit activé dans sshd.

Relancer openSSH

1
sudo systemctl restart sshd

Accès depuis le poste distant avec la clé privée

1
ssh -p 55035 -i ~/.ssh/srvct-ed25519 ctuser@192.168.0.45

Hostname

Vérifier le nom

1
hostnamectl
1
2
3
4
5
6
7
8
   Static hostname: srvct
         Icon name: computer-desktop
           Chassis: desktop
        Machine ID: b65c705c91e04653ad975d9c29f50ed0
           Boot ID: 10aa2c2367a845a3acddb3d72ab7df3f
  Operating System: Debian GNU/Linux 10 (buster)
            Kernel: Linux 4.19.0-10-amd64
      Architecture: x86-64

Journalctl

Ajout utilisateur courant au groupe systemd-journal et adm

1
2
sudo gpasswd -a $USER systemd-journal
sudo gpasswd -a $USER adm

Lignes non tronquées ,ajouter au fichier ~/.bashrc

1
echo "export SYSTEMD_LESS=FRXMK journalctl" >> /home/$USER/.bashrc

Prise en compte après déconnexion/reconnexion


Logo ascii

1
sudo nano /etc/motd
1
2
3
4
5
6
7
8
                                               
  ___ _ _ __ ____ __ ___                       
 (_-<| '_|\ V /\ \ // _ \                      
 /__/|_|   \_/ /_\_\\___/                      
 __ __ ___  _  _ (_) ___ ___    __ __ _  _  ___
 \ \ // _ \| || || ||_ // -_) _ \ \ /| || ||_ /
 /_\_\\___/ \_, ||_|/__|\___|(_)/_\_\ \_, |/__|
            |__/                      |__/     

NFS serveur


NFS (pour Network File System, système de fichiers en réseau) est un protocole qui permet à un ordinateur d’accéder à des fichiers via un réseau.

Installation NFS

on passe en mode su

1
sudo -s

Installation

1
apt install nfs-kernel-server

Vérification serveur

1
rpcinfo -p | grep nfs
1
2
3
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100003    3   udp   2049  nfs

Vérifier que le système supporte effectivement NFS

1
cat /proc/filesystems | grep nfs
1
nodev	nfsd

Si la commande précédente ne renvoie rien, il se peut que le module NFS ne soit pas chargé, auquel cas, il faut le charger modprobe nfs
Enfin, vérifions que portmap attend les instructions sur le port 111

1
rpcinfo -p | grep portmap
1
2
3
4
5
6
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper

Configuration du partage

Passage en su

1
sudo -s

indiquer au serveur les répertoires qui seront partagés, les machines qui y auront accès et les conditions de ce partage.

1
nano /etc/exports

Ajouter en fin de fichier /etc/exports

1
2
/srv/data	192.168.0.0/24(rw,sync,no_subtree_check,no_root_squash)
/srv/nfs	192.168.0.0/24(rw,sync,no_subtree_check,no_root_squash)

Exporter

1
exportfs -ar

Sécurisation NFS

Passage en su

1
sudo -s

Le protocole RPC n’a pas la réputation d’être bien sécurisé, mais la version 4 de NFS entend corriger ce problème, elle est donc à privilégier. Il est déconseillé d’effectuer un partage NFS via internet, ou bien dans ce cas, opter pour un tunnel crypté.

  • S’assurer que les partages sont réservés à certaines IP dans /etc/exports
  • S’appuyer sur rpcbind (/etc/hosts.deny et /etc/hosts.allow) pour sécuriser l’accès au serveur NFS
  • Configurer convenablement iptables

hosts.deny , hosts.allow
Tout le monde est interdit, puis le LAN est autorisé:

1
2
echo "rpcbind mountd nfsd statd lockd rquotad : ALL" >> /etc/hosts.deny
echo "rpcbind mountd nfsd statd lockd rquotad: 192.168.0." >> /etc/hosts.allow

iptables (NFS)
Par défaut, les différents services NFS (lockd, statd, mountd, etc.) demandent des assignations de ports aléatoires à partir du portmapper (portmap/rpcbind), ce qui signifie que la plupart des administrateurs doivent ouvrir une gamme de ports dans leur base de règles de pare-feu pour que NFS fonctionne.

Il va donc falloir fixer les ports de ces services afin de créer les règles iptables.

1
2
3
echo 'STATDOPTS="--port 32765 --outgoing-port 32766"' >> /etc/default/nfs-common
echo 'RPCMOUNTDOPTS="-p 32767"' >> /etc/default/nfs-kernel-server
echo 'RPCRQUOTADOPTS="-p 32769"' >> /etc/default/quota

Relance sysctl

1
sysctl --system
1
2
3
4
5
* Applying /etc/sysctl.d/99-sysctl.conf ...
* Applying /etc/sysctl.d/protect-links.conf ...
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
* Applying /etc/sysctl.conf ...

Relancer le service

1
systemctl restart nfs-kernel-server

Voici les règles à fixer dans le parefeu

1
2
iptables -A INPUT -s 192.168.0.0/24 -p tcp -m multiport --ports 111,2049,32764:32769 -j ACCEPT -m comment --comment "NFS Server"
iptables -A INPUT -s 192.168.0.0/24 -p udp -m multiport --ports 111,2049,32764:32769 -j ACCEPT -m comment --comment "NFS Server"

Configurer le partage NFS avec SetGID

Maintenant que le serveur NFS est configuré avec le point de montage NFS de base /srv/nfs, nous devons configurer SetGID dans ce répertoire, comme indiqué ci-dessous.

1
sudo chmod 2770 /srv/nfs

Cela a également défini les autorisations 770 sur le répertoire, de sorte que l’utilisateur racine et le groupe défini disposent d’autorisations complètes. Le 2 permet setgid.

Ensuite, nous créons un groupe appelé ‘partage’ et modifions le répertoire /srv/nfs afin que le propriétaire du groupe soit ce groupe ‘partage’.
Nous spécifions également manuellement le GID qui sera utilisé pour le groupe en tant que 9999; il doit s’agir d’un numéro libre sur votre client et votre serveur.

Exécuter groupadd sur le client et sur le serveur, et ajouter un utilisateur à ce groupe.

1
2
3
sudo groupadd -g 9999 partage      # sur client et serveur
sudo usermod -a -G partage $USER   # sur client et serveur
sudo chgrp partage /srv/nfs        # serveur uniquement

NE PAS OUBLIER DE SE DECONNECTER/CONNECTER

Nous pouvons confirmer que setgid est en place, comme indiqué ci-dessous, où le bit d’exécution pour les autorisations de groupe est une minuscule. Cela passera à une majuscule S si le groupe ne dispose pas de l’autorisation d’exécution et que seul setgid est en place.

1
ls -la /srv/nfs/

drwxrws— 5 root partage 4096 mars 16 07:57 .

Désormais, tous les fichiers ou répertoires créés dans /srv/nfs se verront automatiquement attribuer le propriétaire du groupe ‘partage’, ce qui permettra essentiellement la collaboration de groupe, car tout utilisateur appartenant au groupe ‘partage’ pourra désormais accéder aux fichiers créés par d’autres utilisateurs du groupe. même groupe dans le répertoire /srv/nfs.

Samba client

Configuration du client SAMBA

Cela devrait fonctionner sans problème si vous installez cifs-utils

1
sudo apt install cifs-utils smbclient

Utilsation

1
smbclient -L <nom-de-l'ordinateur> (nécessite le paquet smbclient)

Parefeu (iptables)

/sbin/iptables-firewall.sh

On utilise un service systemd
Créer le fichier le script /sbin/iptables-firewall.sh

1
sudo nano /sbin/iptables-firewall.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/bin/bash
# Configure iptables firewall

# Limit PATH
PATH="/sbin:/usr/sbin:/bin:/usr/bin"

# iptables configuration
firewall_start() {
###################
#      IPv4       #
###################

# refuser input et forward par défaut, accepter output
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT ACCEPT

# interface lo (loop) accessible
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# maintenir les connexions établies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# accepter en entrée le ping (icmp), et les
# connexions sur les ports nécessaires.
iptables -A INPUT -p icmp --icmp-type echo-request -m conntrack --ctstate NEW -m limit --limit 1/s --limit-burst 1 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 55035 -j ACCEPT

# NFSV4
iptables -A INPUT -s 192.168.0.0/24 -p tcp -m multiport --ports 111,2049,32764:32769 -j ACCEPT -m comment --comment "NFS Server"
iptables -A INPUT -s 192.168.0.0/24 -p udp -m multiport --ports 111,2049,32764:32769 -j ACCEPT -m comment --comment "NFS Server"

# accepter en sortie le ping, les requêtes HTTP(S), DNS,
# et les connexions sur les ports nécessaires.
iptables -A OUTPUT -p icmp --icmp-type echo-request -m conntrack --ctstate NEW -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT


###################
#      IPv6       #
###################

# refuser input et forward par défaut, accepter output
ip6tables -t filter -P INPUT DROP
ip6tables -t filter -P FORWARD DROP
ip6tables -t filter -P OUTPUT ACCEPT

# interface lo (loop) accessible
ip6tables -A INPUT -i lo -j ACCEPT
ip6tables -A OUTPUT -o lo -j ACCEPT

# maintenir les connexions établies
ip6tables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
ip6tables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# NDP pour toute interface de type broadcast
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbour-solicitation -m hl --hl-eq 255 -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type neighbour-advertisement -m hl --hl-eq 255 -j ACCEPT
ip6tables -A INPUT -p icmpv6 --icmpv6-type router-advertisement -m hl --hl-eq 255 -j ACCEPT

ip6tables -A OUTPUT -p icmpv6 --icmpv6-type neighbour-solicitation -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type neighbour-advertisement -j ACCEPT
ip6tables -A OUTPUT -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT

# accepter en entrée le ping (icmpv6), les
# connexions entrantes déjà établies et les connexions sur les ports nécessaires.
ip6tables -A INPUT -p icmpv6 --icmpv6-type echo-request -m conntrack --ctstate NEW -m limit --limit 1/s --limit-burst 1 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 55035 -j ACCEPT
ip6tables -A INPUT -p udp --dport 55035 -j ACCEPT

# accepter en sortie le ping, les requêtes HTTP(S), DNS,
# et les connexions sur les ports nécessaires.
ip6tables -t filter -A OUTPUT -p icmpv6 --icmpv6-type echo-request -j ACCEPT
ip6tables -A OUTPUT -p tcp --dport 80 -j ACCEPT
ip6tables -A OUTPUT -p tcp --dport 443 -j ACCEPT
ip6tables -A OUTPUT -p udp --dport 53 -j ACCEPT
ip6tables -A OUTPUT -p tcp --dport 53 -j ACCEPT
}

# clear iptables configuration
firewall_stop() {
  iptables -F
  iptables -X
  iptables -P INPUT   ACCEPT
  iptables -P FORWARD ACCEPT
  iptables -P OUTPUT  ACCEPT
  ip6tables -F
  ip6tables -X
  ip6tables -P INPUT   ACCEPT
  ip6tables -P FORWARD ACCEPT
  ip6tables -P OUTPUT  ACCEPT
}

# execute action
case "$1" in
  start|restart)
    echo "Starting firewall"
    firewall_stop
    firewall_start
    ;;
  stop)
    echo "Stopping firewall"
    firewall_stop
    ;;
esac

Les droits et exécutable

1
2
sudo chown root:root /sbin/iptables-firewall.sh
sudo chmod 750 /sbin/iptables-firewall.sh 

systemd - iptables-firewall.service

Créer le service systemd iptables-firewall.service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cat << EOF | sudo tee /etc/systemd/system/iptables-firewall.service
[Unit]
Description=iptables firewall service
After=network.target

[Service]
Type=oneshot
ExecStart=/sbin/iptables-firewall.sh start
RemainAfterExit=true
ExecStop=/sbin/iptables-firewall.sh stop
StandardOutput=journal

[Install]
WantedBy=multi-user.target
EOF

Recharger systemd manager

1
sudo systemctl daemon-reload

Lancer le service iptables et l’activer

1
2
sudo systemctl start iptables-firewall
sudo systemctl enable iptables-firewall

Sauvegardes et synchronisation

BorgBackup

Machine qui stocke les sauvegardes → xoyize.xyz - 192.168.0.45

Installation BorgBackup et ajout clé publique sur le serveur de sauvegarde xoyize.xyz
On se connecte sur la machine et on passe en mode su

1
sudo -s

Installer borgbackup

1
apt install borgbackup

Créer un utilisateur borg dédié aux sauvegardes par BorgBackup :

1
useradd borg --create-home --home-dir /srv/data/borg-backups/

Vérifier le propriétaire des dossiers “borg” , sinon modifier

1
chown borg.borg -R  /srv/data/borg-backups/

Cet utilisateur n’a pas de mot de passe, nous nous y connecterons uniquement avec une clef SSH ,ajout de la clé publique

1
2
mkdir -p /srv/data/borg-backups/.ssh
cat >> /srv/data/borg-backups/.ssh/authorized_keys

Copier/coller le contenu du fichier du fichier de clef publique (fichier /root/.ssh/yanspm_ed25519.pub de la machine à sauvegarder ) dans ce terminal, et presser [Ctrl]+[D] pour valider.

Autoriser utilisateur borg à exécuter /usr/bin/borg uniquement

1
echo "borg ALL=NOPASSWD: /usr/bin/borg" >> /etc/sudoers

Machines autorisés à effectuer leur backup

Le dossier de base pour les sauvegardes sur le serveur xoyize.xyz : /srv/data/borg-backups/
Pour info les machines autorisés à effectuer leur backup sur cette machine :
yannick-pc e6230

Rsync

Type Source Destination Commentaire
rsync usernl@xoyaz.xyz:/srv/data/borg-backups/* /srv/data/borg-backups/ (xoyize.xyz) (rsync over ssh)
rsync /srv/data/music/* (xoyize.xyz) usernl@xoyaz.xyz:/home/usernl/backup/musique/ (rsync over ssh)
rsync /srv/data/CalibreTechnique/* (xoyize.xyz) usernl@xoyaz.xyz:/home/usernl/backup/CalibreTechnique/ (rsync over ssh)

Synchronisation dossier de sauvegarde borg entre ‘xoyaz.xyz’ et ‘xoyize.xyz’

Pour les serveurs yanspm.com yanfi.net et cinay.xyz ,les sauvegardes sont effectuées en utilisant le logiciel borg ,vers le serveur de backup xoyaz.xyz et on utilise rsync pour les transférer localement

connexion avec clé
sur le serveur appelant srvxo (xoyize.xyz - 192.168.0.45) Générer une paire de clé curve25519-sha256 (ECDH avec Curve25519 et SHA2) nommé xoyaz_ed25519 pour une liaison SSH avec le serveur KVM.

1
ssh-keygen -t ed25519 -o -a 100 -f ~/.ssh/xoyaz_ed25519

Ajouter la clé publique au fichier ~/.ssh/authorized_keys du serveur de backup xoyaz.xyz

Test connexion

1
ssh -p 55036 -i /home/xoyi/.ssh/xoyaz_ed25519 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null usernl@xoyaz.xyz

Créer la commande rsync avec son fichier d’exclusion

1
nano .ssh/exclude-list.txt
1
2
3
4
.bash_logout
.bashrc
.profile
.ssh

Lancer la commande rsync dans une fenêtre terminal tmux en mode su

1
2
3
tmux
sudo -s
rsync -avz --progress --stats --human-readable --exclude-from '/home/xoyi/.ssh/exclude-list.txt' --rsync-path="sudo rsync" -e "ssh -p 55036 -i /home/xoyi/.ssh/xoyaz_ed25519 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"  usernl@xoyaz.xyz:/srv/data/borg-backups/* /srv/data/borg-backups/

Paramétrer pour une exécution chaque jour à 2h30

1
sudo crontab -e
1
2
3
# Synchro Backup entre serveur distant xoyaz.xyz (contient les backup des serveurs VPS) et le serveur local xoyize.xyz 
30 02 * * * rsync -avz --progress --stats --delete --human-readable --exclude-from '/home/xoyi/.ssh/exclude-list.txt' --rsync-path="sudo rsync" -e "ssh -p 55036 -i /home/xoyi/.ssh/xoyaz_ed25519 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"  usernl@xoyaz.xyz:/srv/data/borg-backups/* /srv/data/borg-backups/ ; if [ $? -eq 0 ]; then echo "Rsync usernl@xoyaz.xyz:/srv/data/borg-backups/* /srv/data/borg-backups/ : Synchronisation OK" | systemd-cat -t rsync-cron -p info ; else echo "Rsync usernl@xoyaz.xyz:/srv/data/borg-backups/* /srv/data/borg-backups/ : Synchronisation ERREUR" | systemd-cat -t rsync-cron -p emerg ; fi

Explications sur la commande
On redirige le résultat de la commande ($?) vers le journal avec systemd-cat
if [ $? -eq 0 ]; then echo "Rsync usernl@xoyaz.xyz:/srv/data/borg-backups/* /srv/data/borg-backups/ : Synchronisation OK" | systemd-cat -t rsync-cron -p info ; else echo "Rsync usernl@xoyaz.xyz:/srv/data/borg-backups/* /srv/data/borg-backups/ : Synchronisation ERREUR" | systemd-cat -t rsync-cron -p emerg ; fi

la ligne de commande décortiquée:

1
2
3
4
5
6
if [ $? -eq 0 ]
 then
  echo "Rsync usernl@xoyaz.xyz:/srv/data/borg-backups/* /srv/data/borg-backups/ : Synchronisation OK" | systemd-cat -t rsync-cron -p info
 else
  echo "Rsync usernl@xoyaz.xyz:/srv/data/borg-backups/* /srv/data/borg-backups/ :Erreur Synchronisation" | systemd-cat -t rsync-cron -p emerg
fi

On peut lire le journal avec l’identifiant rsync-cron

1
journalctl -t rsync-cron
1
2
-- Logs begin at Thu 2019-08-29 11:07:55 CEST, end at Tue 2019-09-17 17:50:32 CEST. --
sept. 17 17:50:32 srvxo rsync-cron[11728]: Rsync usernl@xoyaz.xyz:/srv/data/borg-backups/* /srv/data/borg-backups/ : Synchronisation OK

Synchronisation dossiers music Calibre entre ‘xoyize.xyz’ et ‘xoyaz.xyz’

Ajouter au lanceur de tâches programmées

1
sudo crontab -e
1
2
3
4
5
6
7
# Sauvegarde de dossiers /srv/data/{music,CalibreTechnique} sur serveur distant backup (nl) xoyaz.xyz
# Synchro music avec Backup
00 02 * * * rsync -avz --progress --stats --human-readable --delete --exclude-from '/home/xoyi/.ssh/exclude-list.txt' --rsync-path="sudo rsync" -e "ssh -p 55036 -i /home/xoyi/.ssh/xoyaz_ed25519 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"  /srv/data/music/* usernl@xoyaz.xyz:/home/usernl/backup/musique/ ; if [ $? -eq 0 ]; then echo "Rsync /srv/data/music/* usernl@xoyaz.xyz:/home/usernl/backup/musique/ : Synchronisation OK" | systemd-cat -t rsync-cron -p info ; else echo "Rsync /srv/data/music/* usernl@xoyaz.xyz:/home/usernl/backup/musique/ : Synchronisation ERREUR" | systemd-cat -t rsync-cron -p emerg ; fi

# Synchro CalibreTechnique avec Backup
10 02 * * * rsync -avz --progress --stats --human-readable --exclude-from '/home/xoyi/.ssh/exclude-list.txt' --rsync-path="sudo rsync" -e "ssh -p 55036 -i /home/xoyi/.ssh/xoyaz_ed25519 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"  /srv/data/CalibreTechnique/* usernl@xoyaz.xyz:/home/usernl/backup/CalibreTechnique/ ; if [ $? -eq 0 ]; then echo "Rsync /srv/data/CalibreTechnique/* usernl@xoyaz.xyz:/home/usernl/backup/CalibreTechnique/ : Synchronisation OK" | systemd-cat -t rsync-cron -p info ; else echo "Rsync /srv/data/CalibreTechnique/* usernl@xoyaz.xyz:/home/usernl/backup/CalibreTechnique/ : Synchronisation ERREUR" | systemd-cat -t rsync-cron -p emerg ; fi

Synchronisation dossier osm-new avec map.cinay.xyz

Tâche programmée

1
sudo crontab -e
1
10 02 * * * rsync -avz --progress --stats --human-readable --rsync-path="sudo rsync" -e "ssh -p 55031 -i /home/xoyi/.ssh/kvm-vps591606 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"  /srv/data/devel/ouestline/osm-new/* debadm@cinay.xyz:/srv/osm-new/ ; if [ $? -eq 0 ]; then echo "Rsync /srv/data/devel/ouestline/osm-new/* debadm@cinay.xyz:/srv/osm-new/ : Synchronisation OK" | systemd-cat -t rsync-osm -p info ; else echo "Rsync /srv/data/devel/ouestline/osm-new/* debadm@cinay.xyz:/srv/osm-new/ : Synchronisation ERREUR" | systemd-cat -t rsync-osm -p emerg ; fi

Unbound - DNS

Unbound est un résolveur DNS validateur, cache, récursif développé par NLnet Labs, VeriSign Inc., Nominet, et Kirei. Le logiciel est distribué sous licence BSD.

Installer et configurer Unbound

Installer resolvconf

1
2
3
sudo -s
apt install resolvconf -y
echo "nameserver 127.0.0.1" >> /etc/resolvconf/resolv.conf.d/head

Une fois le paquet « resolvconf » installé, il ne faut plus modifier le fichier « /etc/resolv.conf », car le contenu de celui-ci sera automatiquement géré et remplacé par « resolvconf ».

Blocage des DMP avec Unbound (NON IMPLANTE)

Configuration nécessaire pour Unbound afin de bloquer certaines « Data Management Platforms » (DMP) utilisées par de plus en plus de sites (liberation.fr, oui.scnf, lemonde.fr, fnac.com…) et qui échappent – pour l’instant aux bloqueurs de traqueurs traditionnels (uBlock Origin ou uMatrix par exemple)https://gitea.cinay.eu/yann/blocage-dmp-unbound

Le cœur du problème
Dernièrement, une conjoncture d’éléments est venue semer le trouble chez nos aspirateurs :

  • L’entrée en vigueur du RGPD en Europe
  • La part de plus en plus grande d’internautes utilisant des bloqueurs de publicités
  • La volonté des éditeurs de navigateurs web (Chrome et Firefox – et donc leurs dérivés) de bloquer par défaut les traqueurs ou les cookies tiers.

Un mouchard est dit tiers – ou 3rd-party quand on est disruptif – quand il n’est pas chargé depuis le domaine (ou un de ses sous domaines) que vous visitez. Par exemple quand on visite https://liberation.fr/, le script chargé depuis www.google-analytics.com est tiers. Si le même mouchard est chargé depuis un sous-domaine de liberation.fr, il est dit 1st-party (primaire a priori en bon français). Le hic, pour nos amis start-uppers est que les mouchards/cookies tiers sont triviaux à bloquer. Ne pas charger les cookies tiers est d’ailleurs une option répandue dans les navigateurs depuis des années.

La fourberie
La technique développée par les marketeux pour ne pas voir les juteuses données personnelles leur échapper est à la fois techniquement très simple et redoutable. Il suffit de transformer les crasses 3rd-party en 1st-party afin de les cacher sous le cyber-tapis pour reprendre l’expression de Reflets. Et pour se faire passer par le DNS et ses possiblités.

Bloquer les indésirables avec Unbound
On entre dans la partie technique, pour faire court, on va décréter à Unbound que nous contrôlons les domaines indésirables (eulerian.net par exemple) afin de faire échouer la résolution DNS. La technique est développée plus en détail sur un blog.

Pour mémoire :

  • On crée un fichier de zone (blocked.zone) où l’on met un enregistrement SOA.
  • On l’associe à chaque domaine à bloquer dans la configuration d’Unbound (adblock-war.conf)

Cette technique sera valable, pour les versions d’Unbound supérieures à 1.7.0.

1
/var/lib/unbound/blocked.zone
1
2
3
4
5
6
7
8
$TTL 10800
@	IN SOA localhost. nobody.invalid. (
	1
	3600
	1200
	604800
	10800
	)
1
/etc/unbound/unbound.conf.d/adblock-war.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# À n'utiliser qu'avec une version d'Unbound supérieure à la 1.7.0
auth-zone:
	name: "eulerian.net."
	zonefile: "/var/lib/unbound/blocked.zone"
auth-zone:
	name: "eulerian.fr."
	zonefile: "/var/lib/unbound/blocked.zone"
auth-zone:
	name: "eulerian.com."
	zonefile: "/var/lib/unbound/blocked.zone"
auth-zone:
	name: "dnsdelegation.io."
	zonefile: "/var/lib/unbound/blocked.zone"
auth-zone:
	name: "a.20mn.fr."
	zonefile: "/var/lib/unbound/blocked.zone"
auth-zone:
	name: "at-o.net."
	zonefile: "/var/lib/unbound/blocked.zone"
auth-zone:
	name: "keyade.com."
	zonefile: "/var/lib/unbound/blocked.zone"
auth-zone:
	name: "storetail.io."
	zonefile: "/var/lib/unbound/blocked.zone"
auth-zone:
	name: "omtrdc.net."
	zonefile: "/var/lib/unbound/blocked.zone"

Redémarrer unbound

1
systemctl restart unbound

Vérifier

1
dig v.oui.sncf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
; <<>> DiG 9.11.5-P4-5.1-Debian <<>> v.oui.sncf
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 23289
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;v.oui.sncf.			IN	A

;; ANSWER SECTION:
v.oui.sncf.		2822	IN	CNAME	voyages-sncf.eulerian.net.

;; AUTHORITY SECTION:
eulerian.net.		10021	IN	SOA	localhost. nobody.invalid. 1 3600 1200 604800 10800

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: ven. nov. 15 16:07:19 CET 2019
;; MSG SIZE  rcvd: 137

La requête n’est pas servie (NXDOMAIN)

Autorité de certification + Certificats clients

Création d’une autorité de certification

Autorité de certification et authentification par certificat client (OpenSSL,nginx)

On cherche le fichier CA.pl sudo find / -type f -name "CA.pl"
/usr/lib/ssl/misc/CA.pl

Créer une autorité de certification basée sur un certificat ayant une durée de validité de 10 ans dont la racine est « /etc/ssl/CertificateAuthority » , modifier les variables » CADAYS » et « CATOP » dans le fichier du script /usr/lib/ssl/misc/CA.pl

1
2
my $CADAYS = "-days 3650";	# 10 years
my $CATOP = "/etc/ssl/CertificateAuthority";

ainsi que la valeur de « dir » dans « /etc/ssl/openssl.cnf »

1
2
3
[ CA_default ]

dir		= /etc/ssl/CertificateAuthority		# Where everything is kept

Création

1
/usr/lib/ssl/misc/CA.pl -newca # Répondre aux différentes questions ,une "passphrase" sera demandée pour le fichier cakey.pem (conserver la "passphrase")

A la fin ,la structure

1
tree /etc/ssl/CertificateAuthority/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/etc/ssl/CertificateAuthority/
├── cacert.pem
├── careq.pem
├── certs
├── crl
├── crlnumber
├── index.txt
├── index.txt.attr
├── index.txt.old
├── newcerts
│   └── 0DDDBF9FF301DFEC10C1E57CEBB38DAD6E7A6251.pem
├── private
│   └── cakey.pem
└── serial

Le « hash » du certificat cacert.pem (hachage du DN) est retourné par :

1
2
openssl x509 -hash -noout -in /etc/ssl/CertificateAuthority/cacert.pem 
    ecd697ae

Créer le lien “/etc/ssl/CertificateAuthority/certs/ecd697ae.0” (.0, premier index) pointant vers “/etc/ssl/CertificateAuthority/cacert.pem”

1
ln -s /etc/ssl/CertificateAuthority/cacert.pem /etc/ssl/CertificateAuthority/certs/ecd697ae.0

Création certificat client

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# Certificat client Yannick
sudo -s
cd /etc/ssl/CertificateAuthority/
openssl ecparam -out yannick.key -name prime256v1 -genkey
openssl req -new -key yannick.key -out yannick.csr -sha256    # Renseigner Common Name obligatoirement (Yannick)
openssl req -x509 -in yannick.csr -key yannick.key > admin-linux.crt
openssl ca -policy policy_anything -out yannick.crt -infiles yannick.csr # signature et valable 365 jours , mp cakey.pem demandé
openssl pkcs12 -export -out yannick.pfx -inkey yannick.key -in yannick.crt -certfile cacert.pem # il faut saisir un mot de passe d'exportation pour le certificat client (mp yannick)
cp yannick.pfx /srv/nfs/
chmod 775 /srv/nfs/yannick.pfx

# Certificat client Yann
sudo -s
cd /etc/ssl/CertificateAuthority/
openssl ecparam -out yann.key -name prime256v1 -genkey
openssl req -new -key yann.key -out yann.csr -sha256    # Renseigner Common Name obligatoirement (Yann)
openssl req -x509 -in yann.csr -key yann.key > admin-linux.crt
openssl ca -policy policy_anything -out yann.crt -infiles yann.csr # signature et valable 365 jours , mp cakey.pem demandé
openssl pkcs12 -export -out yann.pfx -inkey yann.key -in yann.crt -certfile cacert.pem # il faut saisir un mot de passe d'exportation pour le certificat client (mp yann)
cp yann.pfx /srv/nfs/
chmod 775 /srv/nfs/yann.pfx

Nginx + PHP7.4 + MariaDB + SSL/TLS1.3

lemp

Installation Nginx + PHP7.4 + MariaDB + SSL/TLS1.3

Ce script bash compile et installe nginx ,le service nginx (systemd) pour le démarrage, PHP7.4 et mariadb.
Exécuter les instructions suivantes pour lancer la compilation

1
2
3
4
5
sudo -s             # Passer en mode super utilisateur (su ou sudo)  
wget -O compil.sh "https://yann.cinay.eu/files/debian10-compilation-nginx-tls1.3-php7.4-MariaDB.sh" # Télécharger le script
chmod +x compil.sh  # Rendre le script exécutable  
./compil.sh     # Exécuter le script
#******** Patienter **********

Patienter de 5 à 10 minutes…
Résultat

1
2
3
4
5
6
7
8
9
Versions Nginx OpenSSL MariaDB et PHP
nginx version: nginx/1.16.1
OpenSSL 1.1.1d  10 Sep 2019
mysql  Ver 15.1 Distrib 10.3.22-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
Mot de passe MySql/MariaDB : /etc/mysql/mdp
PHP 7.4.3 (cli) (built: Feb 24 2020 18:39:14) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

Les paramètres de compilation

1
sudo nginx -V
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
nginx version: nginx/1.16.1
built by gcc 8.3.0 (Debian 8.3.0-6) 
built with OpenSSL 1.1.1d  10 Sep 2019
TLS SNI support enabled
configure arguments: \
 --with-cc-opt='-g -O2 -fdebug-prefix-map=/usr/src/nginx-custom/$stable_nginx=. -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' \
 --with-ld-opt='-Wl,-z,relro -Wl,-z,now,-rpath,/usr/local/lib' \
 --prefix=/usr/share/nginx \
 --user=nginx \
 --group=nginx \
 --sbin-path=/usr/sbin/nginx \
 --conf-path=/etc/nginx/nginx.conf \
 --http-log-path=/var/log/nginx/access.log \
 --error-log-path=/var/log/nginx/error.log \
 --lock-path=/var/lock/nginx.lock \
 --pid-path=/run/nginx.pid \
 --modules-path=/usr/lib/nginx/modules \
 --http-client-body-temp-path=/var/lib/nginx/body \
 --http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
 --http-proxy-temp-path=/var/lib/nginx/proxy \
 --http-scgi-temp-path=/var/lib/nginx/scgi \
 --http-uwsgi-temp-path=/var/lib/nginx/uwsgi \
 --with-debug \
 --with-pcre-jit \
 --with-http_ssl_module \
 --with-http_stub_status_module \
 --with-http_realip_module \
 --with-http_auth_request_module \
 --with-http_v2_module \
 --with-http_dav_module \
 --with-http_slice_module \
 --with-threads \
 --with-http_addition_module \
 --with-http_flv_module \
 --with-http_geoip_module=dynamic \
 --with-http_gunzip_module \
 --with-http_gzip_static_module \
 --with-http_image_filter_module=dynamic \
 --with-http_mp4_module \
 --with-http_perl_module=dynamic \
 --with-http_random_index_module \
 --with-http_secure_link_module \
 --with-http_sub_module \
 --with-http_xslt_module=dynamic \
 --with-mail=dynamic \
 --with-mail_ssl_module \
 --with-stream \
 --with-stream_ssl_module \
 --with-stream_ssl_preread_module \
 --with-http_ssl_module \
 --add-dynamic-module=../modules/nginx-auth-pam \
 --add-dynamic-module=../modules/ngx-fancyindex

On change le dossier racine

1
2
sudo mkdir -p /var/www/default-www
sudo mv /var/www/{index/,info.php} /var/www/default-www/

Configuration nginx

/etc/nginx/nginx.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
	worker_connections 768;
}

http {
  server_names_hash_bucket_size 64;
		upstream php-handler {
	  		server unix:/run/php/php7.4-fpm.sock;
		}

	
	##
	# Basic Settings
	##

	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 65;
	types_hash_max_size 2048;
	# server_tokens off;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;


	##
	# Logging Settings
	##

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	##
	# Gzip Settings
	##

	gzip on;
	gzip_disable "msie6";

        ##
        # Authentification par certificat client
        # limité à certains utilisateurs
        ##

        map $ssl_client_s_dn $ssl_access {
            default 0;
            "~CN=Yannick" 1;
	    "~CN=Yann" 1;
            "~CN=Jean Dupondt Stagiaire" 1;
            # etc.
        }

	##
	# Virtual Host Configs
	##

	include /etc/nginx/conf.d/*.conf;
}

Diffie-Hellman, ssl (tls1.2 tls1.3) Headers OCSP, certificats clients

Diffie-Hellman

1
openssl dhparam -out /etc/ssl/private/dh2048.pem -outform PEM -2 2048

Regroupement dans le fichier /etc/nginx/ssl_dh_header_ocsp → ssl (tls1.2 tls1.3) , Headers et OCSP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    ##
    # SSL Settings
    ##
    ssl_certificate /etc/ssl/private/xoyize.xyz-fullchain.pem;
    ssl_certificate_key /etc/ssl/private/xoyize.xyz-key.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
    ssl_session_tickets off;

    ssl_dhparam /etc/ssl/private/dh2048.pem;

    # intermediate configuration
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    # Add headers to serve security related headers
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;
    add_header X-Frame-Options "SAMEORIGIN"; 
    add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;';
    add_header Referrer-Policy "no-referrer" always;


    # OCSP settings
    ssl_stapling on;
    ssl_stapling_verify on;
    #ssl_trusted_certificate /etc/ssl/private/xoyize.xyz-fullchain.pem;
    ssl_trusted_certificate /etc/ssl/private/ocsp-certs.pem;
    resolver 127.0.0.1;

Accès par certificats clients

1
/etc/nginx/auth_certificat_client
1
2
3
4
5
6
7
8
9
# Certificat client 
ssl_client_certificate /etc/ssl/CertificateAuthority/cacert.pem; 
# rendre la vérification optionnelle
# afin de pouvoir afficher un message 403 
# à ceux qui échouent à l'authentification
ssl_verify_client optional;
    if ( $ssl_access = 0 ) {
        return 403 "<h2>Zone Interdite, absence de certificat client !!!</h2>" ; # => forbidden
    }

Pour activer le certificat client dans l’accès d’unsite ,il faut ajouter la directive include auth_certificat_client; dans le fichier de configuration .conf du vhost

xoyize.xyz

Configuration de base

Configuration de base avec SSL et sécurité + letsencrypt (renouvellement)

1
sudo nano /etc/nginx/conf.d/xoyize.xyz.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
server {
    listen 80;
    listen [::]:80;

    ## redirect http to https ##
    server_name xoyize.xyz;
    return  301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name xoyize.xyz;

    ####    Locations
    # On cache les fichiers statiques
    location ~* \./|css|js|png|jpg|jpeg|gif|ico|svg|eot|woff|ttf)$ { expires max; }
    # On interdit les dotfiles
    location ~ /\. { deny all; }

    

    root /var/www/default-www ;
    index index.php index/ index.htm;
        location ~ \.php$ {
           fastcgi_split_path_info ^(.+\.php)(/.+)$;
           fastcgi_pass unix:/run/php/php7.4-fpm.sock;   # PHP7.4
           fastcgi_index index.php;
           include fastcgi_params;
	   fastcgi_param SCRIPT_FILENAME $request_filename;
        }

    # if folder xoyize.xyz.d , uncomment the following directive
    #include conf.d/xoyize.xyz.d/*.conf;

    access_log /var/log/nginx/xoyize.xyz-access.log;
    error_log /var/log/nginx/xoyize.xyz-error.log;
}

Effacer ancien fichier de config

1
sudo rm /etc/nginx/conf.d/default.conf

Vérifier

1
sudo nginx -t
1
2
nginx: the configuration file /usr/local/openresty/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/openresty/nginx/conf/nginx.conf test is successful

relancer nginx

1
sudo systemctl restart nginx

Vérifier le lien https://xoyize.xyz , le tls 1.3

Dévelopment - devel.xoyize.xyz

1
2
3
4
5
6
 ____                 _                                  _   
|  _ \  _____   _____| | ___  _ __  _ __ ___   ___ _ __ | |_ 
| | | |/ _ \ \ / / _ \ |/ _ \| '_ \| '_ ` _ \ / _ \ '_ \| __|
| |_| |  __/\ V /  __/ | (_) | |_) | | | | | |  __/ | | | |_ 
|____/ \___| \_/ \___|_|\___/| .__/|_| |_| |_|\___|_| |_|\__|
                             |_|                             

Accès dossier “développement” /srv/data/devel/ouestline partagé avec PC1
Fichier de configuration nginx /etc/nginx/conf.d/devel.xoyize.xyz.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# /etc/nginx/conf.d/devel.xoyize.xyz.conf	
	##
	# Virtual Host devel.xoyize.xyz
	##

	server {
	    listen 80;
	    listen [::]:80;
	
	    ## redirect http to https ##
	    server_name devel.xoyize.xyz;
	    return  301 https://$server_name$request_uri;
	}
	
	server {
	    listen 443 ssl http2;
	    listen [::]:443 ssl http2;
	    server_name devel.xoyize.xyz;
	
	    ####    Locations
	    # On cache les fichiers statiques
	    location ~* \./|css|js|png|jpg|jpeg|gif|ico|svg|eot|woff|ttf)$ { expires max; }
	    # On interdit les dotfiles
	    location ~ /\. { deny all; }

	    include ssl_dh_header_ocsp;
	
	    include auth_certificat_client;	   
	
	    #autoindex on;
	    fancyindex on;              # Enable fancy indexes.
	    fancyindex_exact_size off;  # Output human-readable file sizes.
	
	    root /srv/data/devel/ouestline/ ;
	    index index.php index/ index.htm;
	        location ~ \.php$ {
	           fastcgi_split_path_info ^(.+\.php)(/.+)$;
	           fastcgi_pass unix:/run/php/php7.4-fpm.sock;   # php7.4
	           fastcgi_index index.php;
	           include fastcgi_params;
		   fastcgi_param SCRIPT_FILENAME $request_filename;
	        }
	
	    # if folder devel.xoyize.xyz.d , uncomment the following directive
	    #include conf.d/devel.xoyize.xyz.d/*.conf;
	
	    access_log /var/log/nginx/develop-access.log;
	    error_log /var/log/nginx/develop-error.log;
	}

Vérifier et relancer nginx

1
2
sudo nginx -t
sudo systemctl reload nginx

Problème de compilation du module --add-dynamic-module=../modules/lua-nginx-module
NGINX as an OpenID Connect RP with WSO2 Identity Server — Part 2

Airsonic (streaming audio) - sub.xoyize.xyz

Airsonic, a Free and Open Source community driven media server, providing ubiquitous access to your music.

On utilise systemd
Pour aller un peu plus loin que le simple pilotage manuel de airsonic, on peut mettre en place une intégration avec Systemd. Systemd est un système init pour la plupart des systèmes linux. Il permet d’exécuter l’airsonic au démarrage. Les étapes ci-dessous ont été réalisées sur un hôte Fedora, mais les étapes devraient être similaires pour les autres distributions Linux.

En suivant ces instructions de configuration de Systemd, Airsonic sera disponible sur http://localhost:4040/airsonic.

Configuration de l’utilisateur dédié à Airsonic :

1
sudo useradd airsonic

Création des dossiers

1
2
sudo mkdir /var/airsonic
sudo chown airsonic /var/airsonic

Télécharger le “war”

1
2
sudo -s
wget -4 https://github.com/airsonic/airsonic/releases/download/v10.5.0/airsonic.war  --output-document=/var/airsonic/airsonic.war

Créer le service systemd

1
2
wget -4 https://raw.githubusercontent.com/airsonic/airsonic/master/contrib/airsonic.service -O /etc/systemd/system/airsonic.service
wget -4 https://raw.githubusercontent.com/airsonic/airsonic/master/contrib/airsonic-systemd-env -O /etc/default/airsonic

Modifier le service

1
nano /etc/systemd/system/airsonic.service
1
2
3
4
[...]
Environment="PORT=4040"
Environment="CONTEXT_PATH=/"
[...]

Lancer et activer

1
2
3
systemctl daemon-reload
systemctl start airsonic.service
systemctl enable airsonic.service

Fichier de configuration nginx /etc/nginx/conf.d/sub.xoyize.xyz.conf

1
sudo nano /etc/nginx/conf.d/sub.xoyize.xyz.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# /etc/nginx/conf.d/sub.xoyize.xyz.conf	
##
# Virtual Host sub.xoyize.xyz (Subsonic)
##

server {
    listen 80;
    listen [::]:80;
	
    ## redirect http to https ##
    server_name sub.xoyize.xyz;
    return  301 https://$server_name$request_uri;
}
	
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name sub.xoyize.xyz;

    include ssl_dh_header_ocsp;

    # Proxy to the Airsonic server
    location / {
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Host  $http_host;
        proxy_set_header Host              $http_host;
        proxy_max_temp_file_size           0;
        proxy_pass                         http://127.0.0.1:4040;
        proxy_redirect                     http:// https://;
    }
	
}

Redémarrer nginx , sudo systemctl restart nginx
Accès https://sub.xoyize.xyz ,admin/admin

  • Changer le mot de passe administrateur
  • Définir le répertoire media : /srv/data/Musique
  • Changer le thème (facultatif)
  • Valider l’option accès au dossier media par admin
  • Scanner le dossier media

DESINSTALLER

1
2
3
4
5
6
7
8
9
10
11
12
13
14
sudo -s
systemctl stop airsonic
systemctl disable airsonic
rm /etc/systemd/system/airsonic.service
systemctl daemon-reload
rm /var/airsonic/airsonic.war
mv /etc/nginx/conf.d/sub.xoyize.xyz.conf /etc/nginx/conf.d/sub.xoyize.xyz.conf.sav
systemctl restart nginx
ocsp_cache
apt remove adoptopenjdk-8-hotspot
apt autoremove
# Ouvrir le fichier /etc/apt/sources.list 
# supprimer les 2 lignes qui contiennent 'https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/'
apt update

PhpMyadmin - sql.xoyize.xyz

phpMyAdmin (PMA) est une application Web de gestion pour les systèmes de gestion de base de données MySQL réalisée principalement en PHP et distribuée sous licence GNU GPL.Wikipedia

Installation
Prérequis : PHP mbstring zip et gd installés

1
2
3
4
5
6
7
8
9
sudo -s
# la dernière version en cours https://files.phpmyadmin.net/phpMyAdmin/
wget -4 https://files.phpmyadmin.net/phpMyAdmin/5.0.1/phpMyAdmin-5.0.1-all-languages.zip
unzip  phpMyAdmin-5.0.1-all-languages.zip
mv phpMyAdmin-5.0.1-all-languages /usr/share/phpmyadmin
#
mkdir -p /var/lib/phpmyadmin/tmp
chown -R www-data:www-data /var/lib/phpmyadmin
cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php

Configurer /usr/share/phpmyadmin/config.inc.php
La base mysql

1
2
3
4
mysql -uroot -p$(cat /etc/mysql/mdp) < /usr/share/phpmyadmin/sql/create_tables.sql
mysql -uroot -p$(cat /etc/mysql/mdp) -e "GRANT SELECT, INSERT, UPDATE, DELETE ON phpmyadmin.* TO 'pma'@'localhost' IDENTIFIED BY 'qzbXEHio0lwq';"
mysql -uroot -p$(cat /etc/mysql/mdp) -e "GRANT ALL PRIVILEGES ON *.* TO 'yanspm'@'localhost' IDENTIFIED BY 'DxShMzcc4v' WITH GRANT OPTION;" 
ln -s /usr/share/phpmyadmin /var/www/default-www/rienavoir

Ajouter à /usr/share/phpmyadmin/config.inc.php

1
2
3
<?php
[...]
$cfg['Servers'][$i]['AllowRoot'] = false;

passerelle d’authentification
Prérequis, le module nginx

1
2
3
sudo sh -c "echo -n 'yanspm:' >> /etc/nginx/.pma_pass"
sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.pma_pass"  # même mot de passe yanspm
mkdir -p /etc/nginx/conf.d/xoyize.xyz.d/ # créer le dossier si inexistant

Créer le fichier passerelle /etc/nginx/conf.d//xoyize.xyz.d/phpadmin.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
location /rienavoir {
    auth_basic "Admin Login";
    auth_basic_user_file /etc/nginx/.pma_pass;

    location ~ \.php$ {
           fastcgi_split_path_info ^(.+\.php)(/.+)$;
           fastcgi_pass unix:/run/php/php7.3-fpm.sock;   # PHP7.3
           fastcgi_index index.php;
           include fastcgi_params;
	   fastcgi_param SCRIPT_FILENAME $request_filename;
        }

}

Vérifier et recharger nginx

1
2
sudo nginx -t
sudo systemctl reload nginx

Tester https://xoyize.xyz/rienavoir

Fichier de configuration nginx /etc/nginx/conf.d/sql.xoyize.xyz.conf avec accès clients autorisés

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# /etc/nginx/conf.d/sql.xoyize.xyz.conf	
	##
	# Virtual Host sql.xoyize.xyz (PhpMyAdmin)
	##

	server {
	    listen 80;
	    listen [::]:80;
	
	    ## redirect http to https ##
	    server_name sql.xoyize.xyz;
	    return  301 https://$server_name$request_uri;
	}
	
	server {
	    listen 443 ssl http2;
	    listen [::]:443 ssl http2;
	    server_name sql.xoyize.xyz;
	
	    include ssl_dh_header_ocsp;
            # Authentification par certificat client
            include auth_certificat_client;

	    root /var/www/default-www/rienavoir/;
	    index index.php;

	
	        location ~ \.php$ {
	           fastcgi_split_path_info ^(.+\.php)(/.+)$;
	           fastcgi_pass unix:/run/php/php7.4-fpm.sock;   # PHP7.4
                   fastcgi_param SCRIPT_FILENAME $request_filename;
	           fastcgi_index index.php;
	           include fastcgi_params;
	        }
	
	
	    access_log /var/log/nginx/sql-access.log;
	    error_log /var/log/nginx/sql-error.log;
	}

Accès par https://sql.xoyize.xyz
Refuser l’accès par https://xoyize.xyz/phpmyadmin

1
sudo nano /etc/nginx/conf.d/xoyize.xyz.d/phpmyadmin.conf
1
2
3
location /phpmyadmin {
  return 403; # => forbidden
}

msmtp - envoi de message en ligne de commande

GPG - Chiffrer/Déchiffrer

On a notre paire de clés avec identifiant 900D4EF9 (les 8 derniers caractères) et une adresse de messagerie ** xoyize-xyz@cinay.xyz**,on peut chiffrer et déchiffrer des documents

CHIFFRER
fichier de message chiffré avec la méthode suivante (aucune trace dans l’historique)

1
gpg --encrypt -o .msmtp-xoyize-xyz.gpg -r xoyize-xyz@cinay.xyz - 

Saisir le mot de passe que l’on veut chiffrer puis tapez et enfin au clavier

Vérifier la présence du fichier

1
ls .msmtp-xoyize-xyz.gpg
1
.msmtp-xoyize-xyz.gpg

DECHIFFRER
Il faut saisir la phrase secrète de xoyize une fois

1
gpg --no-tty -q -d .msmtp-xoyize-xyz.gpg

Une resaisie de la phrase secrètetous les 12 heures (gpg-agent)

msmtp - configuration utilisateur ~/.msmtprc

Serveur smtp = cinay.xyz
Compte = yannick

On récupère l’empreinte du serveur smtp que l’on va utiliser

1
msmtp --serverinfo --tls --tls-certcheck=off --host=cinay.xyz  
1
2
3
4
...
    Empreintes:
        SHA256: 20:D3:6B:CD:B5:DA:90:06:B2:FF:B8:9D:C1:57:2D:1B:B8:FC:5E:6B:DF:C9:41:0A:CC:2C:C5:61:D0:02:F9:61
...
1
nano ~/.msmtprc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# fichier de configuration utilisateur ~/.msmtprc

# Définissez les valeurs par défaut pour tous les comptes suivants.
defaults

# Utilisez le port de soumission du courrier 587 au lieu du port SMTP 25.
port 587

# Utilisez toujours le TLS.
tls on

# Un service de courrier électronique gratuit
account cinay-xyz

# Nom d'hôte du serveur SMTP
host cinay.xyz

# Comme alternative au tls_trust_file/tls_crl_file, vous pouvez utiliser tls_fingerprint
# pour épingler un seul certificat. Vous devez mettre à jour l'empreinte digitale lorsque le
# le certificat du serveur change, mais un attaquant ne peut pas vous piéger pour que vous acceptiez
# un certificat frauduleux. Obtenez l'empreinte digitale avec
# msmtp --serverinfo --tls --tls-certcheck=off --host=smtp.freemail.example
tls_fingerprint 20:D3:6B:CD:B5:DA:90:06:B2:FF:B8:9D:C1:57:2D:1B:B8:FC:5E:6B:DF:C9:41:0A:CC:2C:C5:61:D0:02:F9:61

# Enveloppe - à partir de l'adresse
from yannick@cinay.xyz

# Authentification. 
auth on
user yannick

# le mot de passe est dans un fichier crypté, indiquer à msmtp la commande à utiliser pour le décrypter.
# Cette commande est généralement utilisée avec GnuPG
# Habituellement, gpg-agent demande une fois le mot de passe de décryptage.
passwordeval gpg --no-tty -q -d ~/.msmtp-cinay-xyz.gpg

# Définir un compte par défaut
account default : cinay-xyz

Test envoi message

L’option de compte ( --account=,-a ) indique quel compte utiliser comme expéditeur:

1
echo "hello there username." | msmtp -a default username@domain.com

Ou, avec les adresses dans un fichier test.mail:

1
2
3
4
5
To: username@domain.com
From: user12@gmail.com
Subject: A test

Hello there.
1
cat test.mail | msmtp -a default username@domain.com

INFORMATION sur la structure

Opérations effectuées sur serveur srvxo avec une clé bootable “Pmagic”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# Transfert du home
mkdir -p /mnt/{home,homeOld}
mount /dev/ssd-vg/home /mnt/home
mount /dev/hdd-2g/home /mnt/homeOld/
rm -r /mnt/homeOld/lost+found/
rm -r /mnt/home/lost+found/
rsync -av /mnt/homeOld/*
umount /mnt/{home,homeOld} 
lvremove /dev/hdd-2g/home 
# Transfert data nfs su /srv
mkdir /mnt/srv 
mount /dev/mapper/hdd--2g-lvhdd /mnt/srv/
rm -r /mnt/srv/lost+found/
mkdir -p /mnt/srv/{data,nfs}
mv /mnt/srv/{borg-backups,CalibreTechnique,devel,dplus,Musique,playlists,podcasts,virtuel} /mnt/srv/data/
mkdir /mnt/nfs 
mount /dev/hdd-2g/nfs /mnt/nfs/
rsync -av /mnt/nfs/*
umount /mnt/srv 
umount /mnt/nfs 
# supprime /dev/hdd-2g/nfs
lvremove /dev/hdd-2g/nfs 
# Vérification avant augmentation capacité volume
e2fsck -f /dev/hdd-2g/lvhdd
lvresize -l +100%FREE
resize2fs /dev/hdd-2g/lvhdd 
# Modifier fstab et exports
mkdir /mnt/root 
mount /dev/ssd-vg/rootb /mnt/root
nano /mnt/root/etc/fstab 
nano /mnt/root/etc/exports 

Résultats

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
root@srvxo:/home/xoyi# pvs
  PV         VG     Fmt  Attr PSize    PFree  
  /dev/sda4  ssd-vg lvm2 a--  <107,29g <67,29g
  /dev/sdb1  hdd-2g lvm2 a--    <1,82t      0 

root@srvxo:/home/xoyi# vgs
  VG     #PV #LV #SN Attr   VSize    VFree  
  hdd-2g   1   1   0 wz--n-   <1,82t      0 
  ssd-vg   1   2   0 wz--n- <107,29g <67,29g

root@srvxo:/home/xoyi# lvs
  LV    VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lvhdd hdd-2g -wi-ao---- <1,82t                                                    
  home  ssd-vg -wi-ao---- 20,00g                                                    
  rootb ssd-vg -wi-ao---- 20,00g                                                    

root@srvxo:/home/xoyi# cat /etc/fstab 
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/mapper/ssd--vg-rootb /               ext4    errors=remount-ro 0       1
# /boot was on /dev/sda2 during installation
UUID=6ff909c4-5117-4b17-a571-54bde94fd6b5 /boot           ext2    defaults        0       2
/dev/mapper/ssd--vg-home /home           ext4    defaults        0       2
# swap was on /dev/sda3 during installation
UUID=4afbc634-a79f-47c2-a15f-6ea17e62ceb7 none            swap    sw              0       0

/dev/mapper/hdd--2g-lvhdd     /srv    ext4    defaults        0       2

root@srvxo:/home/xoyi# cat /etc/exports 
# /etc/exports: the access control list for filesystems which may be exported
#		to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#
# exportfs -ar
#/srv/data	192.168.0.0/24(rw,sync,no_subtree_check,no_root_squash)
/srv	192.168.0.0/24(rw,sync,no_subtree_check,no_root_squash)

root@srvxo:/home/xoyi# df -h
Sys. de fichiers          Taille Utilisé Dispo Uti% Monté sur
udev                        3,7G       0  3,7G   0% /dev
tmpfs                       741M    8,7M  733M   2% /run
/dev/mapper/ssd--vg-rootb    20G    2,7G   16G  15% /
tmpfs                       3,7G       0  3,7G   0% /dev/shm
tmpfs                       5,0M       0  5,0M   0% /run/lock
tmpfs                       3,7G       0  3,7G   0% /sys/fs/cgroup
/dev/sda2                   504M     84M  395M  18% /boot
/dev/mapper/ssd--vg-home     20G    2,0G   17G  11% /home
/dev/mapper/hdd--2g-lvhdd   1,8T    324G  1,4T  19% /srv
tmpfs                       741M       0  741M   0% /run/user/1000

Go Node

Go

golang

Go installation (Debian) , installer la dernière version de Go (https://golang.org/dl/)

1
2
3
4
cd ~
wget https://dl.google.com/go/go1.14.2.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.14.2.linux-amd64.tar.gz
rm go1.14.2.linux-amd64.tar.gz

Environnement de configuration

Bash: ~/.bashrc

1
2
3
4
mkdir -p $HOME/go
echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> ~/.bashrc
echo "export GOPATH=$HOME/go"  >> ~/.bashrc
source ~/.bashrc

Nodejs

nodejs

Installer la version LTS de nodejs pour le frontend.

1
2
sudo apt install curl software-properties-common -y
curl -sL https://deb.nodesource.com/setup_12.x | sudo bash -
1
2
3
4
5
6
7
## Run `sudo apt-get install -y nodejs` to install Node.js 12.x and npm
## You may also need development tools to build native addons:
     sudo apt-get install gcc g++ make
## To install the Yarn package manager, run:
     curl -sL https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
     echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
     sudo apt-get update && sudo apt-get install yarn

Nodejs

1
sudo apt-get install -y nodejs
Cet article est sous licence CC BY 4.0 par l'auteur.