Gestion des comptes utilisateurs

De Analyse Développement Hacking
Sauter à la navigation Sauter à la recherche

Glider.png

Le wiki : Accueil - Administrateur - Bureautique - Développeur - Intégrateur - Marketing - Multimédia - Objets numériques - Jeux - We make Hack

Le site : Accueil du site - Annuaire - Blog - Forum - Outils - Utilisateur
Le FTP : Accueil du FTP - Le privatebin : Accueil du privatebin
Le Redmine : Accueil du Redmine

Sommaire

Gestion des comptes utilisateurs

Définition d'un utilisateur sous Linux

Les utilisateurs systèmes servent aux tâches spécifiques régulières qui souvent portent le même nom que l’utilisateur. Exécution de logiciels ou de commandes.
Les utilisateurs réels sont associés à des personnes qui se connectent sur la machine via une interface graphique ou un accès en ligne de commande.

Vérifier si un utilisateur existe

Méthode 1 :
getent passwd UTILISATEUR || { echo "L'utilisateur n'existe pas."; }
Méthode 2 :
grep "^$user:" /etc/passwd > /dev/null && echo "ok" || echo "ko"
if grep "^$user:" /etc/passwd > /dev/null; then
    echo "ok"
else
    echo "ko"
fi
Noter les : après le nom d'utilisateur, qui permet de retourner ok en cas de correspondance sur plusieurs noms.
Par exemple, on recherche Alex: et le résultat ok est retourné si Alexandre existe.

Lister tous les utilisateurs

# Consulter /etc/shadow pour le mot de passe et /etc/passwd pour le shell.
# Lister tous les utilisateurs en affichant le contenu du fichier /etc/passwd :
cat /etc/passwd

Lister tous les utilisateurs existants par défaut sur une distribution VPS Debian de OVH

# Lister tous les utilisateurs existants par défaut sur une distribution VPS Debian de OVH :
cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
systemd-timesync:x:101:102:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin
systemd-network:x:102:103:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin
systemd-resolve:x:103:104:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin
messagebus:x:104:105::/nonexistent:/usr/sbin/nologin
unscd:x:105:109::/var/lib/unscd:/usr/sbin/nologin
ntp:x:106:112::/nonexistent:/usr/sbin/nologin
sshd:x:107:65534::/run/sshd:/usr/sbin/nologin
systemd-coredump:x:999:999:systemd Core Dumper:/:/sbin/nologin
debian:x:1000:1000:Debian:/home/debian:/bin/bash
# Consulter le fichier /usr/share/base-passwd/passwd.master fourni par le paquet base-passwd :
cat /usr/share/base-passwd/passwd.master
root:*:0:0:root:/root:/bin/bash
daemon:*:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:*:2:2:bin:/bin:/usr/sbin/nologin
sys:*:3:3:sys:/dev:/usr/sbin/nologin
sync:*:4:65534:sync:/bin:/bin/sync
games:*:5:60:games:/usr/games:/usr/sbin/nologin
man:*:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:*:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:*:8:8:mail:/var/mail:/usr/sbin/nologin
news:*:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:*:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:*:13:13:proxy:/bin:/usr/sbin/nologin
www-data:*:33:33:www-data:/var/www:/usr/sbin/nologin
backup:*:34:34:backup:/var/backups:/usr/sbin/nologin
list:*:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:*:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:*:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:*:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
Ok-ko.png Les comptes - Sécuriser un système : http://www.linux-france.org/~nquiniou/module_sr2/secure_system/ch35s03.html

Utilisateur debian créé par défaut sur une distribution VPS Debian de OVH

# Par défaut l'utilisateur sudoers "debian" est configuré pour ne pas nécessiter l'utilisation du mot de passe, ce qui n'est pas sécuritaire.

Impossible de créer un utilisateur backup car il existe déjà par défaut sur le système

# Impossible de créer un utilisateur backup car il existe déjà par défaut sur le système :
sudo useradd backup
useradd: user 'backup' already exists
# On retrouve l'utilisateur backup dans la liste des utilisateurs existants sur Debian et Ubuntu :
backup:*:34:34:backup:/var/backups:/usr/sbin/nologin
# Debian ne semble pas avoir de politique concernant le dossier /var/backups indiqué dans la ligne de cet utilisateur backup :
Source : bugs.debian.org/cgi-bin/bugreport.cgi?bug=122038
# Les paquets peuvent l'utiliser pour enregistrer des données importantes comme inetd.conf, des fichiers passwd/group/shadow :
Source : https://lists.debian.org/debian-devel/2002/08/msg00151.html
# Les éléments suivants peuvent également y être enregistrés, /etc/cron.daily/standard, /etc/{passwd, group, shadow, gshadow} :
Source : https://lists.debian.org/debian-devel/2002/08/msg00161.html
# Copie de sauvegarde de la liste "/var/lib/dpkg/status".
# Deux listes de paquets installés sont disponibles sur Debian.
# Le fichier d'origine à partir duquel ces listes sont créées est "/var/lib/dpkg/status".
# Ce fichier ne doit pas être corrompu, il s'agit de la base de données principale du gestionnaire de packages dpkg.
# Le système de paquets Debian conserve une copie plus ancienne du dernier mais un seul dpkg exécuté dans /var/lib/dpkg/status-old.
# Pour préserver le système de dommages plus importants lors d'une panne ou d'un système de fichiers corrompu, une sauvegarde quotidienne est créée dans /var/backups quand le fichier diffère de la dernière copie.
# Le code de sauvegarde se trouve dans /etc/cron.daily/standard.
# Est-ce possible d'utiliser l'utilisateur backup pour gérer ses propres sauvegardes de données ?

Ajouter un utilisateur

# Ajouter un nouvel utilisateur :
adduser toto
# Renseigner un mot de passe, et, le confirmer.
# Des questions facultatives sont alors demandées par le système.
# Les options par défaut lors de la création d'un utilisateur sont définies dans le fichier de configuration /etc/adduser.conf
# Modifier par exemple le répertoire utilisateur par défaut ou les groupes auxquels les utilisateurs seront affiliés.
# Par défaut le répertoire utilisateur sera /home/toto
# L'utilisateur toto qui a été créé possède maintenant les privilèges de compte régulier.
# Il est parfois nécessaire de faire des tâches administratives qui nécessitent des privilèges supplémentaires de sudoers.
# Afficher les informations qui auront été renseignées lors de la création de l'utilisateur avec la commande adduser :
cat /etc/passwd |grep zer00cool | awk -F ":" '{ $2 = "" ; print $5 }' | awk -F "," '{print "Nom : " $1 "\nN° bureau : " $2 "\n" $3 "\nTEL :" $4 "\nOther :" $5}'

Autoriser un simple utilisateur a redémarrer certains services

# Depuis Debian, en mode console :
sudo nano /etc/sudoers
# Alternatives pour changer d'éditeur de texte :
En mode console : sudo EDITOR=/usr/bin/nano visudo
En mode console : sudo EDITOR=/usr/bin/vim visudo
Dans Ubuntu : sudo VISUAL=/usr/bin/gedit visudo
Dans Kubuntu : sudo VISUAL=/usr/bin/kate visudo
Dans Xubuntu : sudo VISUAL=/usr/bin/mousepad visudo
Dans Lubuntu : sudo VISUAL=/usr/bin/leafpad visudo
# Pour apache :
utilisateur ALL=/usr/sbin/service apache2 restart,/usr/sbin/service mysql restart,/usr/sbin/service php7.3-fpm restart
# Pour nginx :
utilisateur ALL=/usr/sbin/service apache2 restart,/usr/sbin/service mysql restart,/usr/sbin/service php7.3-fpm restart

Être insulté par sudo

# Depuis Debian, en mode console :
sudo nano /etc/sudoers
# Remplacer :
Defaults env_reset
# Par :
Defaults env_reset,insults
# Vérifier si insults est bien ajouté :
sudo -l | grep insult
# Les insultes ne semblent que être disponibles en anglais.
# Pour éditer la liste des insultes, éditer la source et recompiler.
# Ajouter des commandes à la dernière ligne du fichier de configuration /etc/sudoers :
sudo su
echo "Alman ALL=(ALL) ALL" >> /etc/sudoers

Supprimer un utilisateur du système

Désactiver un compte utilisateur

# Avant de supprimer un utilisateur, il est important de désactiver son compte.
# La commande suivante désactive le mot de passe, donc, permet de bloquer le compte :
sudo passwd -l <username>
# La commande suivante réactive le mot de passe, donc, permet de débloquer le compte :
sudo passwd -u <username>
# On ne peut pas supprimer un compte de quelqu'un qui est connecté sur la machine.
# Fermer l'ensemble des programmes lancés par cet utilisateur ainsi que sa connexion.
# Lister les pid des programmes utilisés par toto, si aucun nombre n'est retourné c'est que l'utilisateur n'est pas connecté et n'a lancé aucun programme :
sudo pgrep -u toto
# Voir les programmes lancés par l'utilisateur :
sudo ps -u toto
# Si l'utilisateur a des tâches CRON dans son fichier crontab, les supprimer avec la commande :
sudo crontab -r -u toto
# Sinon, il faut tuer les connexions existantes avec :
killall -KILL -u toto
# Une autre façon de tuer tous les processus d'un utilisateur.
# Fonctionne très bien pour une connexion SSH, ou plusieurs utilisateurs serraient connectés plusieurs fois, suite à un plantage du terminal, et, une nouvelle connexion.
pkill -u user
# Supprimer l'utilisateur toto et son répertoire "home" ainsi que sa boîte email avec l'option -r et la commande userdel :
sudo userdel -r toto
# Commenter les élévations de droits de l'utilisateur sudoers par défaut dans les deux fichiers suivants :
sudo bash
cd /etc/sudoers.d/
nano 90-cloud-init-users
nano debian-cloud-init

Le fichier .bashrc

Le fichier .bashrc.

Ajouter un utilisateur à un groupe

Créer un nouveau groupe

sudo groupadd groupname

Créer un utilisateur et l'ajouter à un groupe

sudo adduser non_utilisateur nom_du_groupe

Ajouter un utilisateur existant à un groupe

sudo usermod -a -G www-data username
Exemple pour créer un groupe pour apache et ajouter le service apache2 et l'utilisateur dans le groupe : https://zestedesavoir.com/forums/sujet/12684/probleme-chown-et-chmod/

Changer le groupe primaire d'un utilisateur

sudo usermod -g groupname username

Voir les assignations d'un groupe d’utilisateurs

# Utiliser la commande « id » pour vérifier à quel groupe l'utilisateur est assigné:
id username
# Cela affichera quelque chose comme ça :
uid=500(username) gid=500(username) groups=500(username), 1093(admins)
# Utiliser la commande « groups » au lieu de id :
id -Gn username
groups username

Lister tous les groupes sur le système

groups

Lister les utilisateurs d'un groupe

cat /etc/group | grep www-data
# Afficher l'utilisateur sudoers par défaut sur un serveur VPS Debian chez OVH.
# Par défaut l'utilisateur sudoers "debian" est configuré pour ne pas nécessiter l'utilisation du mot de passe, ce qui n'est pas sécuritaire.
cat /etc/group | grep sudo
sudo:x:27:debian

Ajouter un nouvel utilisateur et le placer dans un groupe

sudo useradd -G ftp username
# Assigner un mot de passe à l'utilisateur :
sudo passwd username

Ajouter un utilisateur à plusieurs groupes

# Ajouter un utilisateur à plusieurs groupes en l'incluant dans une liste délimitée par des virgules :
sudo usermod -a -G ftp,admins,othergroup username

Modifier le propriétaire et le groupe d'un dossier

sudo find . -exec chown username:www-data {} +

Ajouter un utilisateur système

# La commande adduser accepte les options suivantes :
# Ajoute un utilisateur système.
# Par défaut, les utilisateurs du système sont placés dans le groupe "nogroup".
# Les utilisateurs du système seront créés sans informations de vieillissement dans /etc/shadow.
# Pour placer le nouvel utilisateur du système dans un nouveau groupe avec le même ID, utiliser l'option --group.
# Pour placer le nouvel utilisateur du système dans un groupe déjà existant, utiliser les options --gid ou --ingroup.
# Un répertoire de base est créé selon les mêmes règles que pour les utilisateurs normaux. (vs) (useradd ne créera pas de répertoire de base pour un utilisateur système) (vérifier)
# Le nouvel utilisateur du système aura le shell /bin/false par défaut.
# Les fichiers de configuration "squelettiques" ne sont pas copiés.
# Les connexions seront désactivées.
--system
# Lorsqu'il est associé à --system, un groupe portant le même nom et le même ID que l'utilisateur système est créé.
# Si il n'est pas combiné avec --system, un groupe portant le nom donné est créé. C'est l'action par défaut si le programme est appelé en tant que addgroup.
# Permet de placer l'utilisateur dans un groupe avec le même ID.
--group
# Ajouter le nouvel utilisateur à un groupe existant au lieu d'un groupe d'utilisateurs ou du groupe par défaut défini par USERS_GID dans le fichier de configuration.
# Cela affecte le groupe principal des utilisateurs.
# Voir l’option add_extra_groups pour ajouter des groupes supplémentaires.
--ingroup
# Lors de la création d'un groupe, cette option oblige le nouvel identifiant de groupe à correspondre au numéro indiqué.
# Lors de la création d'un utilisateur, cette option le placera dans ce groupe.
--gid
# Ajouter un utilisateur à plusieurs groupes.
--add_extra_groups
# Permet de spécifier l'emplacement du répertoire utilisateur.
--home /home/utilisateur
# Ne pas créer de répertoire utilisateur.
--no-create-home
# La valeur par défaut est de laisser ce champ vide.
# Vérifier la configuration présente dans useradd ou adduser.
# Le système sélectionne le shell de connexion par défaut spécifié par la variable SHELL du fichier de configuration /etc/default/useradd (SHELL=/bin/sh)
# Le système sélectionne le shell de connexion par défaut spécifié par la variable DSHELL du fichier de configuration /etc/adduser.conf (DSHELL=/bin/bash)
# Si laissé vide, la valeur par défaut renseignée par la commande adduser est "/bin/bash".
--shell /bin/bash
# Bloquer le shell si nécessaire.
--shell /bin/false
###
### L'utilisation de false tant que shell est probablement une simple convention héritée des débuts d'UNIX.
### La page de manuel de nologin indique qu’elle a été créée dans la version 4.4 BSD (début des années 1990); elle est donc arrivée longtemps après la création de false.
### Lorsque /sbin/nologin est défini en tant que shell, si un utilisateur connecté à celui-ci se connecte, il recevra un message indiquant: "Ce compte n'est pas disponible pour le moment".
### Ce message peut être modifié depuis le fichier /etc/nologin.txt
###
### /bin/false est juste un binaire qui se ferme immédiatement, renvoyant false quand il est appelé.
### Ainsi, lorsqu'un utilisateur ayant false comme shell se connecte, il est immédiatement déconnecté "lorsque false ferme" (?).
### Définir le shell sur /bin/true a le même effet que de refuser la connexion à un utilisateur.
### false est probablement utilisé comme convention plutôt que true car il est bien plus efficace pour véhiculer le concept selon lequel une personne n'a pas de shell.
### /bin/false est une commande système utilisée chaque fois que vous devez passer une commande à un programme qui ne devrait rien faire d'autre que de quitter avec une erreur.
### C'est le compagnon de /bin/true et les deux sont des utilitaires POSIX très anciens et standard qui ne produisent aucun résultat par définition.
###
### nologin est l'option la plus conviviale, avec un message personnalisable donné à l'utilisateur qui tente de se connecter.
### nologin et false auront le même résultat final: si quelqu'un n'a pas de shell, il ne peut pas entrer sur le serveur.
###
### Voir à utiliser /usr/sbin/nologin pour les distributions basées sur Debian.
### Certains serveurs FTP ne vous autoriseront l'accès FTP que si vous avez un shell valide.
### /sbin/nologin est considéré comme un shell valide, alors que /bin/false n'est pas considéré comme tel.
### Cela fait probablement partie du programme FTP utilisant pam et pam utilisant pam_shells qui vérifie /etc/shells.
###
### /usr/sbin/nologin est spécialement conçu pour remplacer un shell et produit une sortie en se plaignant que vous ne pouvez pas vous connecter.
### Avant cela, il était courant d'utiliser /bin/false pour les utilisateurs factices, mais cela pouvait prêter à confusion, car l'utilisateur ne savait pas pourquoi il était renvoyé.
###
### nologin est préférable s’il est utilisé pour le compte d’une personne réelle qui parle anglais. Du point de vue de la sécurité, il n'y a pas de différence.
### /bin/false serait a utiliser pour les comptes système n'ayant pas d'utilisateur réel, et nologin serait a utiliser pour un compte utilisateur désactivé.
###
### Sur linux /sbin/nologin provient du projet util-linux alors que /bin/false fait partie de GNU Coreutils.
### Les commandes linux proviennent de BSD, où elles semblent être différentes depuis longtemps.
### FreeBSD false renvoie simplement 1 tandis que nologin vérifie son exécution sur un téléscripteur et envoie un message à syslog lors des tentatives de connexion.
###
### Le nom du programme dit tout.
### /bin/false est destiné à renvoyer une valeur false. Il est exécuté comme programme. Il est utile pour les utilisateurs non privilégiés.
### /bin/nologin est destiné à indiquer à l'utilisateur qu'aucune connexion n'est autorisée pour un compte. Il est exécuté comme un shell de connexion. Il est utile pour les utilisateurs privilégiés.
###
### Ok.png Source : https://unix.stackexchange.com/questions/10852/whats-the-difference-between-sbin-nologin-and-bin-false
###
# Ne pas définir le mot de passe avec passwd.
# L'utilisateur ne pourra pas utiliser son compte tant que le mot de passe n'aura pas été défini.
# Les connexions ne sont plus possibles.
--disabled-login
# Les connexions sont toujours possibles à l'aide de clés SSH RSA mais sans authentification par mot de passe.
--disabled-password
# Informations générales sur l'utilisateur, comme le téléphone ou autres indications.
--gecos 'Informations'
# Affiche la version et les informations de copyright.
--version
# Exemples de création d'utilisateur système.
sudo adduser --system --no-create-home --group utilisateur
sudo adduser --system --no-create-home --ingroup utilisateur --disabled-password utilisateur
# Exemple avancé pour la création d'un utilisateur système ayant un répertoire home, qui fera tourner un service web.
sudo adduser \
  --system \
  --shell /bin/bash \
  --gecos 'Utilisateur' \
  --group \
  --disabled-password \
  --home /home/utilisateur \
  utilisateur
# Afficher l'ID de l'utilisateur et du groupe.
id utilisateur
Ok.png Manuel pour la commande adduser : https://www.computerhope.com/unix/adduser.htm
Ok.png Manuel pour la commande adduser : https://linux.die.net/man/8/adduser

Groupe utilisateur

Vérifier si un groupe existe

Méthode 1 :
getent group GROUPE || { echo "Le groupe n'existe pas"; }
Méthode 2 :
grep "^$groupe:" /etc/group > /dev/null && echo "ok" || echo "ko"
if grep "^$groupe:" /etc/group > /dev/null; then
    echo "ok"
else
    echo "ko"
fi
Noter les : après le nom du groupe, qui permet de retourner ok en cas de correspondance sur plusieurs noms.
Par exemple, on recherche Alex: et le résultat ok est retourné si Alexandre existe.
# Voir les groupes existants
nano /etc/group

Voir les groupes d'un utilisateur

# Savoir si l'utilisateur est dans un groups :
groups nomutilisateur
nomutilisateur : nomutilisateur adm cdrom sudo dip plugdev lpadmin vboxsf sambashare vboxusers
# Obtenir l'id du groupe en plus :
id nomutilisateur
Ok-ko.png Complément : https://wiki.debian-fr.xyz/Commandes_utilisateurs_et_groupes

Supprimer un groupe utilisateur

sudo groupdel nom_du_groupe

Changer d'utilisateur

su autre_utilisateur
Revenir à l’utilisateur précédent avec la commande exit.

Changer le mot de passe d'un utilisateur

Pour changer le mot de passe d'un utilisateur, se connecter avec l'utilisateur puis utiliser la commande suivante :
sudo passwd utilisateur

Tester la complexité des mots de passe utilisateurs

Les mots de passes des utilisateurs sont stockés dans le fichier /etc/shadow.
Seul l'utilisateur root peut lire ce fichier.
Installer en tant que root le programme john et le lancer sur le fichier /etc/shadow :
apt install john
john /etc/shadow
Quand john a trouvé un mot de passe, il l'affiche avec le login associé.
Attention, john utilisera le processeur à 100 % !

Sécuriser l'utilisateur root

Activer - Désactiver le compte root

Activer le compte root

Il est nécessaire de changer le mot de passe d'un utilisateur root surtout si celui-ci a été attribué par défaut.
Cette procédure n'est pas à faire sur toutes les distributions, par exemple, une distribution préinstallée mise à disposition par un prestataire comme par exemple OVH.
Webmin et peut être d'autres services utilisent le mot de passe root.
Changer le mot de passe root pourrait alors créer un dysfonctionnement du serveur.
# Activer le compte root en changeant son mot de passe :
passwd root
# Activer le compte root est rarement nécessaire !
La bonne pratique est d'utiliser un utilisateur sudoers pour effectuer les tâches d'administration.
##########################################################################
# Faut t'il activer initialement le compte root sur sa machine, ou non ? #
##########################################################################
Changer le mot de passe du compte root avec passwd n'est pas forcément recommandé, car cela peut activer le compte root qui n'était pas initialement autorisé.
Est contradictoire avec l'information suivante :
Il est conseillé de donner un mot de passe à l'utilisateur root, car, si le mode de récupération est chargé, la saisie du mot de passe du super-utilisateur sera demandé.

Désactivation du compte root

Si pour une raison quelconque vous avez activé votre compte root et souhaitez le désactiver à nouveau, utilisez la commande suivante dans le terminal :
sudo passwd -dl root
# Se connecter avec un utilisateur sudoers et désactiver le compte root avec la commande suivante :
sudo passwd --lock root
Hypothèse :
Si aucune configuration particulière n'avait été apporté à la configuration de sudoers, un utilisateur sudo qui pouvait se connecter sans avoir à saisir de mot de passe utilisateur devrait à nouveau voir apparaître la demande de mot de passe, suite à la saisie d'une commande avec sudo.

Aucun compte non-root ne doit avoir un UID défini sur 0

Seul le compte root a un UID 0 avec des autorisations complètes pour accéder au système.
La commande suivante affiche tous les comptes dont l'UID est défini sur 0 :
sudo awk -F: '($3 == "0") {print}' /etc/passwd
Une seule ligne devrait être affichée :
root:x:0:0:root:/root:/bin/bash
Si d'autres lignes sont présentes, les supprimer ou s'assurer que les autres comptes sont autorisés par vous à utiliser l'UID 0.

Verrouiller des comptes utilisateurs suite a des échecs de connexion

# Identifier des tentatives de connexion infructueuses.
# Je n'ai aucun retour pour cette commande sur un système Linux Mint.
faillog
faillog -r -u userName
# Bloquer ou débloquer un compte suite à des échecs de connexion.
# On peut utiliser la commande passwd pour verrouiller et déverrouiller des comptes utilisateurs :
# Bloquer un compte :
passwd -l userName
# Débloquer un compte :
passwd -u userName

Utiliser un service d'authentification centralisé

Sans un système d'authentification centralisé, les données d'authentification de l'utilisateur deviennent incohérentes.
Cela peut entraîner des informations d'identification obsolètes et des comptes oubliés qui auraient dû être supprimés en premier lieu.
Un service d'authentification centralisé vous permet de maintenir un contrôle centralisé sur le compte Linux / UNIX et les données d'authentification.
Vous pouvez garder les données d'authentification synchronisées entre les serveurs.
Ne pas utiliser le service NIS pour l'authentification centralisée.
Utiliser OpenLDAP pour les clients et les serveurs.

Kerberos

Kerberos effectue l'authentification en tant que service d'authentification tiers de confiance en utilisant un secret cryptographique partagé.
Kerberos s'appuie sur la cryptographie à clé symétrique et nécessite un centre de distribution de clé.
Vous pouvez rendre la connexion à distance, la copie à distance, la copie de fichiers intersystème sécurisée et d'autres tâches à haut risque plus sûres et plus contrôlables à l'aide de Kerberos.
En utilisant Kerberos, les utilisateurs non autorisés qui tentent de collecter des mots de passe en surveillant le trafic réseau sont contrecarrés.

Envoyer un mail à l'administrateur suite à une connexion SSH réussie

Alerte mail lors du login root ou d'un utilisateur.

Déplacer le répertoire root dans le répertoire home

sudo bash
cp -a /root /home/
echo "" >> /etc/fstab
echo "/home/root /root none defaults,bind 0 0" >> /etc/fstab
cd / ; mv /root /root.old; mkdir /root; mount -a

Ajouter un utilisateur sudoers

Ajouter le droit sudoers pour un utilisateur

Un utilisateur ayant les privilèges de sudoers possède le droit d'accès à la racine du système.
Un utilisateur ayant les privilèges de sudoers possède autant de droits que l'utilisateur root.
Permet d'éviter l'accès avec l'utilisateur root et complique le travail d'un pirate informatique qui devra connaître le nom d'utilisateur toto.
Cela permettra à un utilisateur normal d'exécuter des commandes avec des privilèges administratifs en plaçant le mot sudo avant chaque commande.
Debian 8 n'est pas installé avec sudo par défaut.
# Installer le paquet sudo pour utiliser les commandes sudo et visudo.
apt update
apt install sudo

Ajouter le droit sudoers avec le mode graphique

Placer l'utilisateur dans le groupe sudo afin qu'il puisse faire partie de la liste des sudoers et soit en mesure d'effectuer des tâches d'administration.

Ajouter le droit sudoers depuis le terminal

Par défaut, sur Debian 8, les utilisateurs qui appartiennent au groupe "sudo" sont autorisés à utiliser la commande sudo.
Pour ajouter le nouvel utilisateur au groupe "sudo", utiliser root et la commande suivante :
usermod -a -G sudo toto
Quitter totalement le système, redémarrer, pour que les changements de droits soient appliqués.
Plus d'informations sur les commandes usermod : https://www.computerhope.com/unix/usermod.htm

Céder ses droits de super utilisateur avec su ou sudo

# Il est possible de céder ses droits de super utilisateur, avec su ou sudo depuis un crontab appartenant à root, en se rabaissant aux droits d'un utilisateur normal, par exemple au hasard nobody :
su - nobody -c 'wget https://example.org/index.html -P /tmp'
sudo -u nobody wget https://example.org/index.html -P /tmp

Retirer le droit sudoers pour un utilisateur

deluser utilisateur sudo

Adapter les droits sudoers d'un utilisateur

# Utiliser sudo nécessite l'utilisation du mot de passe utilisateur.
# Le mot de passe est mémorisé par défaut pour une durée de 15 minutes.
# Pendant ce laps de temps, on peut toujours saisir des commandes avec sudo mais le mot de passe ne sera pas demandé.
sudo -i revient au même que la commande su - en terme de droits.
sudo -i est donc plus élégant que sudo su
Avec su -, le mot de passe root est demandé.
Avec sudo -i, le mot de passe utilisateur est demandé.
# Oublier le mot de passe sudo après avoir saisi le mot de passe :
sudo -k
# Consulter le fichier de configuration de sudo :
sudo visudo
# Affiche par défaut :
...
# User privilege specification
root    ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
...
# Ajouter manuellement un utilisateur aux mêmes droits que root depuis le fichier sudoers
# Éditer le fichier "/etc/sudoers" et copier la ligne avec les "ALL" et changer "root" par le nom "utilisateur".
# Préférer l'utilisation des utilisateurs sudoers.
(user) : Désigne l'utilisateur dont on prend les droits (ALL pour tous, y compris root)
%groupe indique le nom du groupe auquel le droit sudo s'appliquera. Le nom du groupe doit donc être précédé d'un %.
ALL : Désigne la ou les systèmes dans lesquels le droit sudo s'appliquera
commande : Représente des commandes pouvant être exécutées par l'utilisateur ou le groupe désigné en début de ligne. (si plusieurs commandes, les séparer par une virgule (ALL pour toutes). Utiliser le chemin complet de la commande. (Si on ne connaît pas le chemin de la commande, utiliser which : which ls). Il est possible de mettre un point d'exclamation (!) devant la commande pour interdire à l'utilisateur de l'exécuter avec sudo.
Préférer une approche plus fine pour paramétrer des commandes spécifiques autorisées pour un utilisateur.
La méthode a privilégier pour accorder des autorisations individuelles (ou de groupe) consiste à ajouter des fichiers sous /etc/sudoers.d
Cela permet de séparer les modifications locales de la stratégie par défaut et fait gagner du temps en cas de modification du fichier sudoers de la distribution.
Par exemple, ajouter cette commande qui permet d'utiliser sudo sans avoir à saisir de mot de passe pour utilisateur1. Cela constitue un risque de sécurité en cas de piratage du système.
sudo echo "utilisateur1 ALL=(ALL:ALL) NOPASSWD: ALL" > /etc/sudoers.d/utilisateur1
# Il est également possible d'autoriser certaines commandes sans mot de passe :
user ALL = commande1, NOPASSWD: commande2
Consulter /etc/sudoers.d/README pour plus d'informations.

Autoriser un service a redémarrer sans mot de passe

# Autoriser Apache2 au redémarrage sans mot de passe :
utilisateur ALL=(ALL) NOPASSWD: /usr/sbin/apachectl restart

Utiliser sudo sans mot de passe

Ajouter la ligne suivante au bas du fichier pour permettre à un utilisateur sudoers de pouvoir travailler sans demande de mot de passe.
Les prochaines commandes depuis la fenêtre du terminal lancées avec sudo <Commande> ne demanderont plus a entrer le mot de passe de l'utilisateur.
Il n'est pas forcément judicieux de paramétrer ainsi les droits de l'utilisateur sudoers, cela constitue un risque de sécurité en cas de piratage du système.
utilisateur1 ALL=(ALL) NOPASSWD: ALL
Autre exemple plus adapté. La commande 1 est autorisée via sudo avec un mot de passe, la commande2 est autorisée via sudo sans demande de mot de passe.
user ALL = commande1, NOPASSWD: commande2
Autoriser apache à lancer la commande service avec sudo sans demande de mot de passe :
apache ALL=(ALL) NOPASSWD: /usr/sbin/service
Autoriser l'utilisateur à exécuter toutes les commandes via sudo, avec un mot de passe :
utilisateur1  ALL=(ALL)       ALL
Autoriser utilisateur1 à exécuter toutes les commandes via sudo mais que sudo reboot ne demande pas le mot de passe :
utilisateur1 ALL=(ALL) ALL
utilisateur1 ALL=(ALL) NOPASSWD: /usr/sbin/reboot

Solutions de contournement non conseillées pour utiliser sudo sans mot de passe

Pour exécuter un script qui réclame une authentification par mot de passe, on peut utiliser le commutateur -S qui lit le mot de passe de STDIN.
Malgré tout la encore, entrer le mot de passe directement dans un script n'est pas recommandé.
echo <password> | sudo -S <command>

Afficher les droits autorisés pour un utilisateur

sudo -l

Gestion des mots de passe

Changer le mot de passe d'un utilisateur

0)
Avec la commande "passwd".
1)
Une fois le nom de l'utilisateur trouvé dans /etc/passwd, supprimer le mot de passe correspondant dans /etc/shadow.
Redémarrer la machine sur son disque dur et se connecter sans mot de passe, puis, en créer un nouveau avec la commande "passwd".
Durant un moment la machine fonctionnera sans que le compte en question ne soit protégé par un mot de passe.
Il faut donc couper toute connexion réseau a ce moment la en débranchant la connexion par cable. Pour la wifi c'est moins évident.
2)
Quand tu a trouvé le nom de l'utilisateur dans /etc/passwd, tu peux éditer /etc/shadow et remplacer l'empreinte du mot de passe correspondant a ce compte par l'empreinte de ton mot de passe.
Ça demande de connaître l'empreinte de ton mot de passe, donc de l'avoir préparée au préalable a un endroit que tu pourra accéder quand tu fera la manip.
3)
A revoir :
Quand tu a trouvé le nom de l'utilisateur dans /etc/passwd, tu peux utiliser un chroot pour lancer la commande passwd du système dont tu veux modifier le mot de passe.
Par exemple si tu a monté la partition système que tu veux modifier sur /mnt/root et tu vois que l'utilisateur s'appelle "bob" :
mount -o bind /proc /mnt/root/proc
mount -o bind /sys /mnt/root/sys
mount -o bind /dev /mnt/root/dev
chroot /mnt/root /bin/bash
passwd bob
exit
umount /mnt/root/dev
umount /mnt/root/sys
umount /mnt/root/proc
umount /mnt/root

Configurer la gestion de l'âge des mots de passe

La commande chage change le nombre de jours entre les changements de mot de passe et la date du dernier changement de mot de passe.
Le système utilise ces informations pour déterminer quand un utilisateur doit changer son mot de passe.
Le fichier /etc/login.defs définit la configuration pour la suite de mots de passe shadow, y compris pour la configuration de l'âge des mots de passe.
Pour désactiver le vieillissement du mot de passe :
sudo chage -M 99999 userName
# Obtenir des informations sur l'expiration du mot de passe :
sudo chage -l userName
# Activer un mot de passe comme était valable 60 jours, avertir 7 jours avant la fin de validité, expirer le mot de passe ce qui rend le compte inactif 7 jours après la fin de validité.
sudo chage -M 60 -m 7 -W 7 userName

Interdire la réutilisation d'un même mot de passe

Source : https://www.cyberciti.biz/tips/how-to-linux-prevent-the-reuse-of-old-passwords.html

Vérifier qu'aucun compte n'a pas un mot de passe vide

sudo awk -F: '($2 == "") {print}' /etc/shadow

Vérifier l'intégrité des fichiers de mots de passe

Utiliser la commande pwck pour vérifier l’intégrité des utilisateurs et des informations d’authentification.
Il vérifie que les entrées dans /etc/passwd et /etc/shadow ont le format approprié et contiennent des données valides.
L'utilisateur est invité à supprimer les entrées mal formatées ou comportant d'autres erreurs impossibles à corriger.
pwck -r /etc/passwd
pwck -r /etc/shadow

Bibliographie

Ok-ko.png Les utilisateurs et les droits : https://openclassrooms.com/fr/courses/43538-reprenez-le-controle-a-laide-de-linux/39044-les-utilisateurs-et-les-droits
Ok-ko.png Gestion des utilisateurs sous Ubuntu : http://guide.ubuntu-fr.org/server/user-management.html

Informations complémentaires sur sudo et sudoers

Ok.png Sudo : Utiliser et paramétrer (sudoers) : https://www.linuxtricks.fr/wiki/sudo-utiliser-et-parametrer-sudoers
Ok-ko.png Plus d'informations sur sudoers : https://www.digitalocean.com/community/tutorials/how-to-edit-the-sudoers-file-on-ubuntu-and-centos
Ok-ko.png Utiliser sudoers sans mot de passe : https://www.linuxtricks.fr/wiki/sudo-utiliser-et-parametrer#paragraph_utiliser-sudo
Ok-ko.png Documentation Ubuntu : https://doc.ubuntu-fr.org/sudoers

NAVIGATION

PARTICIPER ET PARTAGER

Bienvenue sur le wiki de Vision du Web.
De nombreuses pages sont partagées sur ce wiki.
Créer un compte utilisateur pour participer sur le wiki.
Les pages présentées sur le wiki évoluent tous les jours.
Certaines recherches sont peu abouties et incluent des erreurs.
Utiliser la recherche interne du wiki pour trouver votre contenu.
La page de discussion de Visionduweb vous permet de poser une question.
Utiliser la recherche interne du site pour chercher dans tout le contenu.
Améliorer le contenu des pages avec vos retours depuis l'onglet discussion.
Ce contenu ne doit pas servir à nuire à autrui ou à un système informatique.
Protéger votre système Linux ou Windows avec cette page dédiée à la sécurité.

SOUTENIR CE WIKI

Soutenir le wiki avec un don en monnaie numérique :
AEON - Bitcoins - Bitcoins Cash - Bitcoins Gold - Bitcore - Blackcoins - Basic Attention Token - Bytecoins - Clams - Dash - Monero - Dogecoins - Ğ1 - Ethereum - Ethereum Classique - Litecoins - Potcoins - Solarcoins - Zcash

OBTENIR DE LA MONNAIE NUMERIQUE

Obtenir gratuitement de la monnaie numérique :
Gagner des Altcoins - Miner des Altcoins.