Utilisateurs et groupes Linux
Dans ce chapitre sur les utilisateurs et les groupes, nous verrons la différence entre les programmes su et sudo. On identifiera l’emplacement des informations sur les utilisateurs et les groupes. On trouvera aussi des considérations sur le chiffrement et la force des mots de passe sous Linux.
1. Commande su
su
(substitute user ou switch user) est une commande Unix permettant d’exécuter un interpréteur de commandes en changeant d’identifiant de GID et de UID.
Sans argument, la commande utilise les UID 0 et le GID 0, c’est-à-dire ceux du compte utilisateur root.
Cette commande est surtout utilisée pour obtenir les privilèges d’administration à partir d’une session d’utilisateur normal, c’est-à-dire, non privilégiée.
L’option
-
place le shell de l’utilisateur.
Exercice
su
exit
su -
exit
su root
exit
su - root
exit
2. Programme sudo
sudo
(abréviation de substitute user do, en anglais : «exécuter en se substituant à l’utilisateur») est une commande qui permet à l’administrateur système d’accorder à certains utilisateurs (ou groupes d’utilisateurs) la possibilité de lancer une commande en tant qu’administrateur, ou comme autre utilisateur, tout en conservant une trace des commandes saisies et des arguments.
Exercice
Pour configurer sudo, dans une session utilisateur root
:
visudo
Visudo
La commande visudo
ouvre le fichier de configuration sudo
avec l’éditeur vi
. En voici le contenu sous Centos 7 :
# Adding HOME to env_keep may enable a user to run unrestricted
# commands via sudo.
#
# Defaults env_keep += "HOME"
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
## Allows members of the users group to mount and unmount the
## cdrom as root
# %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
## Allows members of the users group to shutdown this system
# %users localhost=/sbin/shutdown -h now
## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d
Un utilisateur devient “sudoer” en modifiant finement ce fichier ou ses fichiers inclus jusqu’à définir les commandes seules autorisées. On peut profiter comme dans cet exemple d’un configuration par défaut qui rend “sudoer” tout membre d’un groupe défini (le groupe wheel
sous Centos et le groupe sudo
sous Debian / Ubuntu).
Par exemple, ajouter un utilisateur au système en tant que non-root :
sudo useradd zozo
Exercice : se configurer en tant qu’utilisateur normal comme “sudoer”.
3. Utilisateurs
Toute entité (personne physique ou programme particulier) devant interagir avec un système UNIX est authentifiée sur cet ordinateur par un utilisateur ou “user”.
Ceci permet d’identifier un acteur sur un système UNIX. Un utilisateur est reconnu par un nom unique et un numéro unique.
Sur tout système UNIX, il y a un super-utilisateur, généralement appelé root, qui a tous les pouvoirs sur le système. Il peut accéder librement à toutes les ressources de l’ordinateur, y compris à la place d’un autre utilisateur, c’est-à-dire sous son identité. En général, du moins sur les systèmes de production, seul l’administrateur système possède le mot de passe root. L’utilisateur root porte le numéro 0.
4. Utilisateurs : fichier /etc/passwd
On peut créer un utilisateur de plusieurs manières mais la finalité est toujours la même : pour chaque utilisateur, une entrée doit être créée dans le fichier /etc/passwd
sous ce format :
account:passwd:UID:GID:GECOS:directory:shell
Illustration
Par exemple, on ajoute un utilisateur “user1” :
echo "user1:x:2000:2000:user1:/home/user1:/bin/bash" >> /etc/passwd
Mais faut-il encore créer le groupe correspondant, vérifier la validité des UID et GID, créer le répertoire utilisateurs, y donner les droits et y placer une structure …
5. Mots de passe : fichier /etc/shadow
Le mot de passe est écrit dans le fichier /etc/shadow
avec ses paramètres :
- nom de connexion de l’utilisateur (« login »)
- mot de passe chiffré :
$1$
(MD5),$2$
(Blowfish),$5$
(SHA-256),$6$
(SHA-512) - date du dernier changement de mot de passe
- âge minimum du mot de passe
- âge maximum du mot de passe
- période d’avertissement d’expiration du mot de passe
- période d’inactivité du mot de passe
- date de fin de validité du compte
- champ réservé
- mot de passe chiffré :
Illustration
francois:$6$d/uLirbD$s90XRAj6g14036jIuvYYQaSOSrcJKqiNNywIQplztkTlyIrySZE1o2zjFvSobewvyORXFdZ7bGeF0U1OTPoOm.:16842:0:99999:7:::
6. Générer un mot de passe aléatoire
Exercice
pwmake
est un outil qui permet de générer des mots de passe (Centos 7) :
pwmake 128
Ib9AHK3boravZUSuNuffYPExunEn
Exercice
Voici un exemple à utiliser dans un exercice de récupération de mot de passe :
pwmake 128 | passwd --stdin root
Changing password for user root.
passwd: all authentication tokens updated successfully.
Exercice
On peut utiliser des outils natifs.
Avec les utilitaires de génération d’empreinte :
date +%s | sha256sum | base64 | head -c 32 ; echo
Avec /dev/urandom
:
< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32};echo;
Avec openssl s’il est installé :
openssl rand -base64 32
Dans les dépôts Debian, on trouve les générateurs de mots de passe:
pwgen
apg
makepasswd
7. Tester la force des mots de passe
On peut tester la force des mots de passe avec John The Ripper.
Si le paquet john
est présent dans le dépôt Debian / Ubuntu, il n’est pas disponible pour les distributions RHEL. On peut alors le compiler soi-même :
#!/bin/bash
# Centos 7/8 John the Ripper Installation
#release=(j 1.8.0)
release=(k 1.9.0)
# Check Centos version
if [ -f /etc/redhat-release ] ; then
source /etc/os-release
if [ $VERSION_ID == "8" ] ; then
packager=dnf
elif [ $VERSION_ID == "7" ] ; then
packager=yum
fi
else exit ; fi
sudo ${packager} -y install wget gpgme
sudo ${packager} -y group install "Development Tools"
cd
wget http://www.openwall.com/john/${release[0]}/john-${release[1]}.tar.xz
wget http://www.openwall.com/john/${release[0]}/john-${release[1]}.tar.xz.sign
wget http://www.openwall.com/signatures/openwall-signatures.asc
gpg --import openwall-signatures.asc
gpg --verify john-${release[1]}.tar.xz.sign
tar xvfJ john-${release[1]}.tar.xz
cd john-${release[1]}/src
make clean linux-x86-64
cd ../run/
./john --test
#password dictionary download
wget -O - http://mirrors.kernel.org/openwall/wordlists/all.gz | gunzip -c > openwall.dico
et puis :
cd john-*/run
./john /etc/shadow
Loaded 4 password hashes with 4 different salts (generic crypt(3) [?/64])
testtest (tintin)
testtest (root)
testtest (francois)
testtest (gustave)
guesses: 4 time: 0:00:02:25 DONE (Tue Feb 3 23:06:29 2015) c/s: 170 trying: spazz - dasha
Use the "--show" option to display all of the cracked passwords reliably
8. Groupes
Un utilisateur UNIX appartient à un ou plusieurs groupes.
Les groupes servent à rassembler des utilisateurs afin de leur attribuer des droits communs.
Le groupe principal est le groupe initial de l’utilisateur.
L’utilisateur peut appartenir à des groupes secondaires.
9. Fichiers /etc/group
et /etc/gshadow
Les fichiers /etc/group
et /etc/gshadow
définissent les groupes.
Le fichier /etc/group
comporte 4 champs séparés par “:” :
- nom du groupe
- mot de passe du groupe (ou
x
si le fichiergshadow
existe) - le GID
- liste des membres séparés par une virgule
10. Appartenance à un groupe
On peut vérifier son identifiant et l’appartenance aux groupes via les commandes id
et groups
:
La commande
id
offre par exemple ce résultat :
uid=1000(francois) gid=1000(francois) groupes=1000(francois),10(wheel) contexte=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
La commande
groups
donne ceci :
francois wheel