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 commandelsb_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 tapezsudo 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 avecsudo
, 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-noneInstaller 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 NPMPour 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-jessieInstaller 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
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
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/
- Connaitre sa distribution et la version de sa distribution
- Sécuriser l'accès au serveur
- Message "unable to resolve host 123.example.com" lors de commandes sudo
- Installer screen
- Installer un serveur FTP
- Installer Node.js/NPM
- Installer MongoDB
- Installer PHP
- Installer MySQL
- Installer PHPMyAdmin
- Installer Nginx
- Installer Apache
- Installer Let's Encrypt
- Installer Git