Utilisateurs et groupes 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.
$ su
$ su -
$ su tintin
$ su - tintin
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.
Pour configurer sudo :
# visudo
qui ouvre le fichier de configuration sudo
avec l’éditeur vi
.
#
# 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
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é
Par exemple :
francois:$6$d/uLirbD$s90XRAj6g14036jIuvYYQaSOSrcJKqiNNywIQplztkTlyIrySZE1o2zjFvSobewvyORXFdZ7bGeF0U1OTPoOm.:16842:0:99999:7:::
6. Générer un mot de passe aléatoire
pwmake
est un outil qui permet de générer des mots de passe (Centos 7) :
# pwmake 128
Ib9AHK3boravZUSuNuffYPExunEn
- 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.
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 : https://gist.github.com/goffinet/83565ebec963fed0c74d
#!/bin/bash
# Centos 7 John the Ripper Installation
yum -y install wget gpgme
yum -y group install "Development Tools"
cd
wget http://www.openwall.com/john/j/john-1.8.0.tar.xz
wget http://www.openwall.com/john/j/john-1.8.0.tar.xz.sign
wget http://www.openwall.com/signatures/openwall-signatures.asc
gpg --import openwall-signatures.asc
gpg --verify john-1.8.0.tar.xz.sign
tar xvfJ john-1.8.0.tar.xz
cd john-1.8.0/src
make clean linux-x86-64
cd ../run/
./john --test
#password dictionnary download
wget -O - http://mirrors.kernel.org/openwall/wordlists/all.gz | gunzip -c > openwall.dico
et puis :
# 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
:
$ id
uid=1000(francois) gid=1000(francois) groupes=1000(francois),10(wheel) contexte=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
$ groups
francois wheel