1. 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

Par exemple, ajouter un utilisateur au système en tant que non-root :

$ sudo useradd zozo

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 :

  1. nom de connexion de l'utilisateur (« login »)
  2. mot de passe chiffré : $1$ (MD5),$2$ (Blowfish), $5$ (SHA-256), $6$ (SHA-512)
  3. date du dernier changement de mot de passe
  4. âge minimum du mot de passe
  5. âge maximum du mot de passe
  6. période d'avertissement d'expiration du mot de passe
  7. période d'inactivité du mot de passe
  8. date de fin de validité du compte
  9. 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 ":".

  1. nom du groupe
  2. mot de passe du groupe (ou x si le fichier gshadow existe)
  3. le GID
  4. 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

Commentaires