Linux

PREMIÈRES CHOSES À FAIRE AVEC UN LINUX

D

Vendredi 7 juillet 2017

Mis à jour le lundi 18 décembre 2017

Premières choses à faire avec un Linux

Voici les premières choses à faire quand vous arrivez sur un Linux ou quand vous venez de vous en faire livrer un (Serveur dédié ou VPS).

Connaitre sa distribution et la version de sa distribution

Utiliser la commande lsb_release -a
Exemple avec Debian :

root@ma_machine:~# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 8.8 (jessie)
Release:        8.8
Codename:       jessie
Si la commande lsb_release n'existe pas, vous pouvez toujours utiliser ces commandes en fonction de votre distribution :
Pour Debian : cat /etc/issue
Pour Ubuntu : cat /etc/lsb-release
Pour Redhat, Fedora ou Centos : cat /etc/redhat-release
Pour OpenSusSE : cat /etc/SuSE-release
Pour Slackware : cat /etc/slackware-version

Sécuriser l'accès au serveur

Créer un utilisateur

Par défaut, vous serez connecté avec le super utilisateur "root" qui a tous les droits. Il faut vous créer un utilisateur :
root@ma_machine:/home# adduser david
Ajout de l'utilisateur « david » ...
Ajout du nouveau groupe « david » (1000) ...
Ajout du nouvel utilisateur « david » (1000) avec le groupe « david » ...
Création du répertoire personnel « /home/david »...
Copie des fichiers depuis « /etc/skel »...
Entrez le nouveau mot de passe UNIX :
Retapez le nouveau mot de passe UNIX :
passwd : le mot de passe a été mis à jour avec succès
Modification des informations relatives à l'utilisateur david
Entrez la nouvelle valeur ou « Entrée » pour conserver la valeur proposée
        Nom complet : David
        N° de bureau :
        Téléphone professionnel :
        Téléphone personnel :
        Autre :
Cette information est-elle correcte ? [O/n]o
root@ma_machine:/home# 


Autoriser un utilisateur à lancer des commandes root

Par défaut, avec votre nouvel utilisateur, si vous tapez sudo su ou sudo n'importe quelle commande, vous aurez ce message :
MyUser is not in the sudoers file.  This incident will be reported.

Beaucoup d'article sur internet préconise d'éditer le fichier /etc/sudoers, il ne faut PAS FAIRE CELA. Si vous écrivez vos instructions dans ce fichier, elles seront prises en compte et vous obtiendrez l'effet escompté : autoriser votre utilisateur à exécuter des commandes root. Par contre, si vous mettez à jour votre système, ce fichier peut aussi être mis à jour, et vous perdrez vos configurations.

Pour autoriser un utilisateur a exécuter des commandes root proprement, il faut se connecter avec l'utilisateur root et éditer un fichier se trouvant /etc/sudoers.d/ avec la commande visudo -f /etc/sudoers.d/MyUser :
Pour se connecter en root :
su -

Pour éditer le fichier /etc/sudoers :
visudo -f /etc/sudoers.d/MyUser

Ajoutez ces lignes au fichier pour autoriser l'utilisateur MyUser a exécuter des commandes root :
# User privilege specification
MyUser    ALL=(ALL:ALL) ALL

Puis CTRL + O pour écrire les modifications,  Entrée pour valider et  CTRL + X pour quitter l'éditeur.
Et enfin, tapez :
exit

Pour vous déconnecter de l'utilisateur root.
Maintenant, si vous tapez sudo su ou sudo n'importe quelle commande, vous exécutez bien la commande en mode root.

Changer le mot de passe de "root"

Pour changer le mot de passe de root :
sudo passwd root

Si vous êtes déjà connecté en root :
passwd

Et on vous demandera votre nouveau mot de passe.

Interdire la connexion de l'utilisateur "root" en SSH

nano /etc/ssh/sshd_config

Chercher la ligne :
PermitRootLogin yes
Et modifier la en :
PermitRootLogin no
Pour que les modifications soient prises en comptes, il faut redémarrer SSH :
sudo /etc/init.d/ssh restart
Bien entendu, vous pourrez toujours passer en mode "root" en vous connectant avec un utilisateur simple et en utilisant "su" ou "sudo".

Autoriser quelques utilisateurs seulement à se connecter

nano /etc/ssh/sshd_config
Chercher la ligne qui commence par AllowUsers, ou créez la si elle n'existe pas :
AllowUsers david utilisateur2 alfred jeanmi
Ici les utilisateurs david, utilisateur2, alfred et jeanmi sont autorisés à se connecter, pas les autres.
Redémarrez SSH pour que les modifications soient prises en compte :
sudo /etc/init.d/ssh restart


Désactiver les connexions SFTP

Par défaut, quand on autorise un utilise à se connecter en SSH, on l'autorise aussi à se connecter en SFTP. Pour désactiver les connexions en SFTP, il faut éditer le fichier /etc/ssh/sshd_config :
sudo vi /etc/ssh/sshd_config
Trouvez la ligne Subsystem sftp /usr/lib/openssh/sftp-server et modifier la comme ceci :
Subsystem   sftp  /bin/false

Activer la connexion par clé publique

...

Message "unable to resolve host 123.example.com" lors de commandes sudo

Pour résoudre ce petit message qui apparait à chaque fois qu'on lance une commande avec sudo, il suffit d'appliquer les modifications prescrites sur ce lien : https://askubuntu.com/questions/59458/error-message-when-i-run-sudo-unable-to-resolve-host-none

Installer screen

Quand on se connecte en SSH, on a une seule fenêtre, et dés qu'on la quitte, la commande en cours s'arrête. Si une commande prend du temps à s'exécuter, nous ne pouvons que prendre notre mal en patience.
Screen permet d'avoir une console améliorer avec des onglets, et les commandes exécutées ne s'arrêtent pas quand on quitte screen. On peut reprendre notre session la prochaine qu'on se connecte au serveur.

Installer Screen :
sudo apt-get install screen

Rappel des commandes Screen :
screen : Démarrer une session Screen.
screen -ls : Voir la liste des sessions Screen existantes.
screen -r : Se connecte à la session Screen s'il y en a qu'une seule d'existante.
screen -r 1234 : Se connecte à la session Screen dont l'identifiant commence par "1234".

Rappel des raccourcis une fois dans screen : (La casse doit être respectée)
CTRL + a suivi de c : "c" pour "create", créer un nouvel onglet Screen.
CTRL + a suivi de d : "d" pour "detach", déconnecte la session screen, elle continue d'exister.
CTRL + a suivi de k : "k" pour "kill", ferme l'onglet actuel, si c'est le dernier onglet, ferme la session Screen, elle n'existera plus.
CTRL + a suivi de A : Renommer l'onglet actuel.
CTRL + a suivi de 0-9 : Affiche l'onglet 0-9.

Changer le design de Screen :
Utiliser le fichier .screenrc suivant à placer dans votre répertoire home :
cd /home/david
wget https://www.wadzaa.com/tutorials/premieres-choses-a-faire-avec-un-linux/uploads/.screenrc
screen
Vous aurez un design plus sympa, vous verrez vos onglets, le nom de la machine et sa charge de travail.

Installer un serveur FTP

Pour pouvoir transférer des fichiers tranquillement, il vous faut un serveur FTP.
Je propose d'installer le paquet Vsftpd :
sudo apt-get install vsftpd

Et de le configurer :
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.old
sudo vi /etc/vsftpd.conf
Appuyer sur :, $, Entrée, puis sur d, g, g pour tout effacer.
Puis copier/coller la configuration suivante :
# Nous voulons que le serveur fonctionne en mode standalone
listen=YES
#
# Ce paramètre désactive les connexions anonymes
anonymous_enable=NO
#
# Ce paramètre autorise les utilisateurs locaux à se connecter au FTP
local_enable=YES
#
# Ce paramètre autorise à remonter les fichiers sur le serveur
write_enable=YES
#
# On fixe le masque local a 022 (les fichiers remontés auront des droits en 755)
local_umask=022
#
# On interdit l’upload anonyme
anon_upload_enable=NO
#
# On interdit la création de répertoires
anon_mkdir_write_enable=NO
#
# Ce paramètre permet de logguer les actions
xferlog_enable=YES
#
# On vérifie que la commande PORT provient bien du port 20
connect_from_port_20=YES
#
# Emplacement du fichier de logs
xferlog_file=/var/log/vsftpd.log
#
# Ci-dessous, on paramètre des valeurs de TIMEOUT
idle_session_timeout=300
data_connection_timeout=120
connect_timeout=60
accept_timeout=60
#
# On interdit la commande ABOR
async_abor_enable=NO
#
# Interdiction des transferts en ASCII
ascii_upload_enable=NO
ascii_download_enable=NO
#
# Configuration de la bannière (message d'accueil) de votre FTP
ftpd_banner=Vous êtes sur le serveur de David
#
# Ce paramètre bloque les utilisateurs à leur répertoire
chroot_local_user=YES
chroot_list_enable=NO
#
# Ci-dessous, pour que les heures d’enregistrement des fichiers et dossiers soient à l'heure du serveur et non du client
use_localtime=YES
#
allow_writeable_chroot=YES

Pour que les modifications soient prises en compte, il faut relancer le service VSFTPD :
sudo /etc/init.d/vsftpd restart

Vous pourrez vos connecter avec les comptes utilisateurs de la machine en FTP, et chaque compte ne pourra voir que son propre répertoire home/MyUser.
[ A faire plus tard : https://www.google.fr/search?q=vsftpd+sftp+only&ie=utf-8&oe=utf-8&client=firefox-b-ab&gfe_rd=cr&ei=92FjWamhDfPU8ge3_KHgCQ#q=vsftpd+ftps+only https://stackoverflow.com/questions/11523904/how-to-force-accept-only-ssl-connections-in-vsftpd ]

Installer Node.js/NPM

Pour installer Node.js et NPM, IL NE FAUT PAS FAIRE :
sudo apt-get install nodejs npm
Installer nodejs via la commande apt-get install npm nodejs installe des versions très vieilles, les versions 0.x alors qu'aujourd'hui en mai 2017, nous sommes à la versions 6.10 de Node.JS et 4.5 de NPM
Pour installer les dernières versions de Node.js et NPM, exécutez cette commande :
curl -sL https://deb.nodesource.com/setup_6.x | sudo bash -
Puis :
sudo apt-get install nodejs
Pour vérifier que Node.js et NPM sont bien installés, vous pouvez exécuter :
david@ma_machine:~$ node -v
v6.11.0
david@ma_machine:~$ npm -v
3.10.10


Si vous obtenez l'erreur :
bash: curl : commande introuvable
C'est que vous n'avez pas curl d'installé. Il vous suffit de l'installer :
sudo apt-get install curl


Installer MongoDB

Suivre les indications du site officiel : https://docs.mongodb.com/manual/tutorial/install-mongodb-on-debian/
Ne pas oublier de démarrer MongoDB après l'avoir lancé :
sudo service mongod start
Pour voir les 20 derniers logs de MongoDB, vous pouvez exécuter (si vous n'avez pas changer le chemin du fichier de log par défaut) :
sudo tail -20 /var/log/mongodb/mongod.log
Pour vérifier si MongoDB s'est bien installé, vous pouvez exécuter :
david@ma_machine:~$ mongo --version
MongoDB shell version v3.4.6
...

Installer PHP

Tutoriel pour installer PHP 7 : http://f4b1.com/linux/installer-php-7-avec-dotdeb-et-nginx-sous-debian-8-jessie

Installer MySQL

Tutoriel pour installer MySQL 5.7 : http://www.debiantutorials.com/install-mysql-server-5-6-debian-7-8/
Pour vérifier si MySQL s'est bien installé, vous pouvez exécuter :
david@ma_machine:~$ mysql -V
mysql  Ver 14.14 Distrib 5.7.20, for Linux (x86_64) using  EditLine wrapper
(Attention, la commande est mysql -V avec un "V" majuscule)
Source

Installer PHPMyAdmin

Installer PhpMyAdmin :
sudo apt-get update
sudo apt-get install phpmyadmin

L'installeur vous demandera pour quel serveur web vous souhaitez la configuration automatique, mais Nginx n'apparait pas dans la liste. Appuyez sur Tab pour ne sélectionner aucune option, puis Entrée.
L'installeur vous demandera ensuite si vous souhaitez que dbconfig-common la base de données pour l'utiliser avec PhpMyAdmin, Sélectionner "oui".
Pour effectuer cette configuration, l'installeur vous demandera le mot de passe de MySQL, que vous avez configuré lors de l'installation de MySQL, entrez le.
Ensuite, l'installeur vous demandera le mot de passe de la base de données de PhpMyAdmin, entrez en un, puis confirmez le.

PhpMyAdmin est maintenant installé, il reste à configurer Nginx pour y accéder :
Dans /etc/nginx/conf.d, créer un fichier nommé phpmyadmin.conf :
cd /etc/nginx/conf.d
vi phpmyadmin.conf
Et insérez-y :
server {
    server_name 151.236.56.119;
	listen       80; # Ecoute le port 80 sur IPv4
	listen       [::]:80; # Ecoute le port 80 sur IPv6
	
	##############################################
	############     PHPMyAdmin     ##############
	##############################################

	location /phpmyadmin { 
		root /usr/share/;
		index index.php index.html index.htm; 
		location ~ ^/phpmyadmin/(.+\.php)$ {
			try_files $uri =404; root /usr/share/; 
			fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
			fastcgi_index index.php; 
			fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
			include fastcgi_params; 
		} 
		
		location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
			root /usr/share/; 
		} 
	}

	location /phpMyAdmin { 
		rewrite ^/* /phpmyadmin last; 
	}

	################################################
	##########     End of PHPMyAdmin     ###########
	################################################

}

Ensuite, exécutez :
nginx -t
Afin de vérifier que les fichiers de configuration ne comportent pas d'erreurs de syntaxe, puis redémarrez Nginx :
sudo /etc/init.d/nginx restart

Dans votre navigateur, en allant sur l'adresse 151.236.56.119/phpmyadmin, vous pourrez vous connecter avec l'utilisateur root et le mot de passe que vous avez indiqué lors de l'installation de MySQL.

Installer Nginx

Pour installer Nginx, exécuter :
sudo apt-get install nginx
Et c'est tout, tapez l'adresse ip de votre serveur dans votre navigateur et vous devriez retrouver la page d'acceuil de Nginx.
Voir les 20 dernières erreurs (si vous n'avez pas changer le chemin du fichier de log d'erreur par défaut) :
sudo tail -20 /var/log/nginx/error.log
Voir les 20 derniers logs (si vous n'avez pas changer le chemin du fichier de log par défaut) :
sudo tail -20 /var/log/nginx/access.log

La configuration de Nginx se passe dans /etc/nginx/conf.d/ :
sudo cp /etc/nginx/nginx.conf /etc/nginx/conf.d/votresite.conf
sudo vi /etc/nginx/conf.d/votresite.conf
Appuyer sur :, $, Entrée, puis sur d, g, g pour tout effacer.
Vous pouvez prendre ce fichier de configuration d'exemple :
server {
    # Ecoute le port 80 sur IPv4 et IPv6
    listen       80;
    listen       [::]:80;

    ### Ecoute les appels à ce site
    server_name  monsite.com;

    # Chemin de vos fichiers PHP
    root /var/www/html;

    # Fichier appelé par défaut
    index index.html index.php;
  
   # Les pages d'erreurs
    error_page 403 /error/403.html;
    error_page 404 /error/404.html;
   # ...

location / {
try_files $uri $uri/ =404;
}

    # Rediriger toutes les requêtes vers une autre adresse
    #return 301 http://www.monautresite.com$request_uri;
}

Pour utiliser une application Node.js derrière Nginx, vous pouvez utiliser cette configuration :
server {
    listen 80;
    listen [::]:80;
    server_name monsite.com;

    location / {
        proxy_pass http://localhost:8001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # Cette ligne permettra de renvoyer l'adresse IP du vrai client à Node.js
        proxy_cache_bypass $http_upgrade;
    }
}

Après chaque modification, pour les prendre en compte, exécuter :
sudo systemctl reload nginx

Installer Apache

[A venir]

Installer Let's Encrypt

Vous n'avez pas envie d'acheter un certificat HTTPS pour l'instant ? Let's Encrypt est une bonne alternative gratuite.
[A venir]

Installer Git

Comme tous les packets sur Linux, vous pouvez installer Git via deux méthodes.
La première méthode est très simple, mais elle n'installera pas la dernière version de Git car les dépôts Linux ne sont rarement mis à jour. Pour installer quand même la version de Git présente sur les dépôts Linux, exécutez :
apt-get install git
Aujourd'hui, en juillet 2017, si j'exécute cette commande sur mon Debian 8.8, cela m'installe Git 2.1.4 qui date de décembre 2014.

La deuxième méthode un poil plus compliquée, mais conseillée et qui vous installera la dernière version de Git consiste à suivre la documentation Git :
Suivant si vous utilisez yum ou apt-get :
yum install curl-devel expat-devel gettext-devel \ openssl-devel zlib-devel
apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \ libz-dev libssl-dev
Puis téléchargez la dernière version de Git :
Lisez le numéro de version dans l'écran à droite (Latest source Release x.xx.x), puis cliquez sur "Older releases" et téléchargez le fichier compressé de même nom que le numéro de version vu précédemment (git-x.xx.x.tar.gz ). Vous pouvez aussi télécharger les sources directement sur le dépôt Github.
wget https://www.kernel.org/pub/software/scm/git/git-x.xx.x.tar.gz
(La dernière version fin septembre 2017 était sous ce lien : https://www.kernel.org/pub/software/scm/git/git-2.14.1.tar.gz)
Puis exécutez les commandes qui permettent de compiler et d'installer Git :
tar -zxf git-x.xx.x.tar.gz
cd git-x.xx.x
make prefix=/usr/local all
sudo make prefix=/usr/local install
Si vous obtenez une erreur semblant à make: command not found, vous devrez installer make avec cette commande :
sudo apt-get install make

Si vous obtenez une erreur semblant à /bin/sh: cc : command not found, vous devrez exécuter cette commande :
sudo apt-get install build-essential
Pour vérifier que Git s'est bien installé, vous pouvez exécuter :
david@ma_machine:~$ git --version
git version 2.13.2
Voila, vous pouvez utiliser Git.


Sources

http://www.tux-planet.fr/connaitre-la-version-de-linux-installe/
https://memo-linux.com/comment-connaitre-sa-version-de-linux-en-ligne-de-commande/
https://technique.arscenic.org/setting-up-a-new-server/article/juste-apres-l-installation
https://technique.arscenic.org/setting-up-a-new-server/premieres-securisations/
Fichiers /etc/sudoers.d/ : https://superuser.com/questions/869144/why-does-the-system-have-etc-sudoers-d-how-should-i-edit-it/869145#869145
Syntaxe des fichiers /etc/sudoers : http://www.demongeot.biz/tutos/Sudo.html
Configuration défaut du fichiers /etc/sudoers : https://unix.stackexchange.com/questions/288480/how-to-fix-empty-etc-sudoers-as-root
Désactiver les connexions SFTP par défaut : https://fatmin.com/2013/11/25/disable-ssh-for-sftp-users-in-unix-and-linux/
Fichier de configuration VSFTPD : http://www.canalgeek.fr/tuto-installer-un-serveur-ftp-vsftpd/
Installation de Node.js/NPM : https://doc.ubuntu-fr.org/nodejs (Chapitre 2.3)

Erreur "command make not found" : https://www.google.fr/search?q=jessie+make+command+not+found&ie=utf-8&oe=utf-8&client=firefox-b-ab&gfe_rd=cr&dcr=0&ei=nIbDWbHDOuL-8AeC6LeACQ
https://www.linuxquestions.org/questions/linux-newbie-8/make-command-not-found-235483/

Erreur "/bin/sh: cc : command not found" : https://www.google.fr/search?q=%2Fbin%2Fsh%3A+cc+%3A+commande+introuvable&ie=utf-8&oe=utf-8&client=firefox-b-ab&gfe_rd=cr&dcr=0&ei=EonDWZ3vKa7UXuyBmpgO
https://openclassrooms.com/forum/sujet/compiler-sous-linux-46397
Configuration Nginx pour Node.js :
Recherche "express ip is false with nginx"
http://expressjs.com/fr/guide/behind-proxies.html
Recherche "express ip is false with nginx"
https://stackoverflow.com/questions/30943112/get-ip-user-with-nginx-and-node
Recherche "config nginx express"
http://blog.danyll.com/setting-up-express-with-nginx-and-pm2/
Recherche "nginx express get client ip"
https://rlaanemets.com/post/show/client-ip-in-express-behind-nginx
Recherche "nginx get ip"
https://easyengine.io/tutorials/nginx/forwarding-visitors-real-ip/


Une erreur ? une question ? une critique ? une faute ? un conseil ? ou tout simplement un merci ?

Lâche ton commentaire