Dernière mise-à-jour :

LDF201 - Gestion des Utilisateurs

Contenu du Module

LDF201 - Gestion des Utilisateurs

Contenu du Module

Présentation

/etc/nsswitch.conf sous Debian 6

/etc/nsswitch.conf sous Debian 7

/etc/nsswitch.conf sous Debian 8

Interrogation des Bases de Données

Intérrogation de la Base passwd

Intérrogation de la Base group

Consulter le Contenu d'une Base

Les Fichiers /etc/group et /etc/gshadow

La Commande grpck

Les Commandes grpconv et grpunconv

Les Fichiers /etc/passwd et /etc/shadow

La Commande pwck

Les Commandes pwconv et pwunconv

Commandes

Groupes

groupadd

groupdel

groupmod

newgrp

gpasswd

Utilisateurs

useradd

userdel

usermod

passwd

chage

Configuration

L'option -D de la commande useradd

Le Répertoire /etc/skel

La Commande id

La Commande groups

Le Fichier /etc/login.defs

LAB #1 - Gestion des Utilisateurs sous Debian 8

LAB #2 - Forcer l'utilisation des mots de passe complexe avec PAM

Utiliser des Mots de Passe Complexe

Bloquer un Compte après N Echecs de Connexion

Configuration

su et su -

sudo

A faire : Afin de mettre en pratique les exemples dans ce cours, vous devez vous connecter à votre système en tant que root grâce à la commande su - et le mot de passe fenestros.

Présentation

La bonne gestion des utilisateurs passe par une bonne stratégie de groupes. En effet, chaque utilisateur est affecté à un groupe principal mais il peut aussi être membre d'un ou de plusieurs groupes secondaires.

Comme dans d'autres systèmes d'exploitation, sous Linux il est préférable de donner les droits d'accès aux groupes et non aux utilisateurs individuels.

Les bases de données utilisées pour stocker les informations des utilisateurs et des groupes sont stipulées dans le fichier /etc/nsswitch.conf. Dans notre cas les entrées passwd, shadow et group indique le mot clef files ou compat. Ceci indique l'utilisation des fichiers suivants en tant que base de données :

/etc/passwd,

/etc/shadow,

/etc/group.

/etc/nsswitch.conf sous Debian 6

root@debian6:~# cat /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd: compat
group: compat
shadow: compat
...

/etc/nsswitch.conf sous Debian 7

root@debian7:~# cat /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd: compat
group: compat
shadow: compat
...

/etc/nsswitch.conf sous Debian 8

root@debian8:~# cat /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd: compat
group: compat
shadow: compat
gshadow: files
...

Interrogation des Bases de Données

La commande getent est utilisée pour interroger les bases de données. Elle prend la forme suivante :

getent base-de-données clef

Intérrogation de la Base passwd

Par exemple pour rechercher l'utilisateur dans la base de données des utilisateurs, il convient d'utiliser la commande suivante :

Debian 6

root@debian6:~# getent passwd trainee
trainee:x:1000:1000:trainee,,,:/home/trainee:/bin/bash

Debian 7

root@debian7:~# getent passwd trainee
trainee:x:1000:1000:trainee,,,:/home/trainee:/bin/bash

Debian 8

root@debian8:~# getent passwd trainee
trainee:x:1000:1000:trainee,,,:/home/trainee:/bin/bash

Intérrogation de la Base group

Pour rechercher quels utilisateurs appartiennent à quels groupes, il convient d'utiliser la commande suivante :

Debian 6

root@debian6:~# getent group mail
mail:x:8:

Debian 7

root@debian7:~# getent group mail
mail:x:8:

Debian 8

root@debian8:~# getent group mail
mail:x:8:

Consulter le Contenu d'une Base

L'utilisation de la commande getent sans spécifier une clef imprime à l'écran le contenu de toute la base de données :

Debian 6

root@debian6:~# getent passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
messagebus:x:101:103::/var/run/dbus:/bin/false
Debian-exim:x:102:104::/var/spool/exim4:/bin/false
statd:x:103:65534::/var/lib/nfs:/bin/false
avahi:x:104:107:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
usbmux:x:105:46:usbmux daemon,,,:/home/usbmux:/bin/false
Debian-gdm:x:106:114:Gnome Display Manager:/var/lib/gdm3:/bin/false
saned:x:107:116::/home/saned:/bin/false
hplip:x:108:7:HPLIP system user,,,:/var/run/hplip:/bin/false
trainee:x:1000:1000:trainee,,,:/home/trainee:/bin/bash
vboxadd:x:999:1::/var/run/vboxadd:/bin/false

Debian 7

root@debian7:~# getent passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
avahi-autoipd:x:101:104:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
messagebus:x:102:106::/var/run/dbus:/bin/false
colord:x:103:107:colord colour management daemon,,,:/var/lib/colord:/bin/false
usbmux:x:104:46:usbmux daemon,,,:/home/usbmux:/bin/false
Debian-exim:x:105:113::/var/spool/exim4:/bin/false
avahi:x:106:116:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
pulse:x:107:117:PulseAudio daemon,,,:/var/run/pulse:/bin/false
speech-dispatcher:x:108:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/sh
hplip:x:109:7:HPLIP system user,,,:/var/run/hplip:/bin/false
sshd:x:110:65534::/var/run/sshd:/usr/sbin/nologin
rtkit:x:111:119:RealtimeKit,,,:/proc:/bin/false
statd:x:112:65534::/var/lib/nfs:/bin/false
saned:x:113:120::/home/saned:/bin/false
Debian-gdm:x:114:121:Gnome Display Manager:/var/lib/gdm3:/bin/false
trainee:x:1000:1000:trainee,,,:/home/trainee:/bin/bash

Debian 8

root@debian8:~# getent 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
systemd-timesync:x:100:103:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:104:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:105:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:106:systemd Bus Proxy,,,:/run/systemd:/bin/false
messagebus:x:104:111::/var/run/dbus:/bin/false
avahi:x:105:112:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
Debian-exim:x:106:114::/var/spool/exim4:/bin/false
statd:x:107:65534::/var/lib/nfs:/bin/false
avahi-autoipd:x:108:117:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
colord:x:109:119:colord colour management daemon,,,:/var/lib/colord:/bin/false
dnsmasq:x:110:65534:dnsmasq,,,:/var/lib/misc:/bin/false
geoclue:x:111:120::/var/lib/geoclue:/bin/false
pulse:x:112:122:PulseAudio daemon,,,:/var/run/pulse:/bin/false
speech-dispatcher:x:113:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/sh
sshd:x:114:65534::/var/run/sshd:/usr/sbin/nologin
rtkit:x:115:124:RealtimeKit,,,:/proc:/bin/false
saned:x:116:125::/var/lib/saned:/bin/false
usbmux:x:117:46:usbmux daemon,,,:/var/lib/usbmux:/bin/false
hplip:x:118:7:HPLIP system user,,,:/var/run/hplip:/bin/false
Debian-gdm:x:119:126:Gnome Display Manager:/var/lib/gdm3:/bin/false
trainee:x:1000:1000:trainee,,,:/home/trainee:/bin/bash

Les Fichiers /etc/group et /etc/gshadow

/etc/group

Pour lister les groupes existants sur le système, saisissez la commande suivante :

Debian 6

root@debian6:~# cat /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:trainee
floppy:x:25:trainee
tape:x:26:
sudo:x:27:
audio:x:29:trainee
dip:x:30:trainee
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:trainee
sasl:x:45:
plugdev:x:46:trainee
staff:x:50:
games:x:60:
users:x:100:
nogroup:x:65534:
libuuid:x:101:
crontab:x:102:
messagebus:x:103:
Debian-exim:x:104:
mlocate:x:105:
ssh:x:106:
avahi:x:107:
netdev:x:108:trainee
bluetooth:x:109:trainee
lpadmin:x:110:
ssl-cert:x:111:
fuse:x:112:
utempter:x:113:
Debian-gdm:x:114:
scanner:x:115:saned,trainee
saned:x:116:
trainee:x:1000:
vboxsf:x:1001:

Debian 7

root@debian7:~# cat /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:trainee
floppy:x:25:trainee
tape:x:26:
sudo:x:27:
audio:x:29:pulse,trainee
dip:x:30:trainee
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:trainee
sasl:x:45:
plugdev:x:46:trainee
staff:x:50:
games:x:60:
users:x:100:
nogroup:x:65534:
libuuid:x:101:
crontab:x:102:
fuse:x:103:
avahi-autoipd:x:104:
scanner:x:105:saned,trainee
messagebus:x:106:
colord:x:107:
lpadmin:x:108:
ssl-cert:x:109:
bluetooth:x:110:trainee
utempter:x:111:
netdev:x:112:trainee
Debian-exim:x:113:
mlocate:x:114:
ssh:x:115:
avahi:x:116:
pulse:x:117:
pulse-access:x:118:
rtkit:x:119:
saned:x:120:
Debian-gdm:x:121:
vboxsf:x:122:
trainee:x:1000:

Debian 8

root@debian8:~# cat /etc/group
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mail:x:8:
news:x:9:
uucp:x:10:
man:x:12:
proxy:x:13:
kmem:x:15:
dialout:x:20:
fax:x:21:
voice:x:22:
cdrom:x:24:trainee
floppy:x:25:trainee
tape:x:26:
sudo:x:27:
audio:x:29:pulse,trainee
dip:x:30:trainee
www-data:x:33:
backup:x:34:
operator:x:37:
list:x:38:
irc:x:39:
src:x:40:
gnats:x:41:
shadow:x:42:
utmp:x:43:
video:x:44:trainee
sasl:x:45:
plugdev:x:46:trainee
staff:x:50:
games:x:60:
users:x:100:
nogroup:x:65534:
input:x:101:
systemd-journal:x:102:
systemd-timesync:x:103:
systemd-network:x:104:
systemd-resolve:x:105:
systemd-bus-proxy:x:106:
crontab:x:107:
netdev:x:108:trainee
ssl-cert:x:109:
lpadmin:x:110:trainee
messagebus:x:111:
avahi:x:112:
scanner:x:113:saned,trainee
Debian-exim:x:114:
mlocate:x:115:
ssh:x:116:
avahi-autoipd:x:117:
bluetooth:x:118:trainee
colord:x:119:
geoclue:x:120:
utempter:x:121:
pulse:x:122:
pulse-access:x:123:
rtkit:x:124:
saned:x:125:
Debian-gdm:x:126:
trainee:x:1000:

Important : Notez que la valeur du GID du groupe root est toujours de 0. Sous Debian 6, 7 et 8 les GID des utilisateurs normaux commencent à 1000 et les GID des comptes système sont inclus entre 100 et 999 par convention.

Dans ce fichier, chaque ligne est constituée de 4 champs :

Le nom unique du groupe,

Le mot de passe du groupe. Une valeur de x dans ce champs indique que le système utilise le fichier /etc/gshadow pour stocker les mots de passe. Une valeur de ! indique que le groupe n'a pas de mot passe et que l'accès au groupe via la commande newgrp n'est pas possible,

Le GID. Une valeur unique utilisée pour déterminée les droits d'accès aux fichiers et aux répertoires,

La liste des membres ayant le groupe comme groupe secondaire.

/etc/gshadow

Pour consulter le fichier /etc/gshadow, saisissez la commande suivante :

Debian 6

root@debian6:~# cat /etc/gshadow
root:*::
daemon:*::
bin:*::
sys:*::
adm:*::
tty:*::
disk:*::
lp:*::
mail:*::
news:*::
uucp:*::
man:*::
proxy:*::
kmem:*::
dialout:*::
fax:*::
voice:*::
cdrom:*::trainee
floppy:*::trainee
tape:*::
sudo:*::
audio:*::trainee
dip:*::trainee
www-data:*::
backup:*::
operator:*::
list:*::
irc:*::
src:*::
gnats:*::
shadow:*::
utmp:*::
video:*::trainee
sasl:*::
plugdev:*::trainee
staff:*::
games:*::
users:*::
nogroup:*::
libuuid:!::
crontab:!::
messagebus:!::
Debian-exim:!::
mlocate:!::
ssh:!::
avahi:!::
netdev:!::trainee
bluetooth:!::trainee
lpadmin:!::
ssl-cert:!::
fuse:!::
utempter:!::
Debian-gdm:!::
scanner:!::saned,trainee
saned:!::
trainee:!::
vboxsf:!::

Debian 7

root@debian7:~# cat /etc/gshadow
root:*::
daemon:*::
bin:*::
sys:*::
adm:*::
tty:*::
disk:*::
lp:*::
mail:*::
news:*::
uucp:*::
man:*::
proxy:*::
kmem:*::
dialout:*::
fax:*::
voice:*::
cdrom:*::trainee
floppy:*::trainee
tape:*::
sudo:*::
audio:*::pulse,trainee
dip:*::trainee
www-data:*::
backup:*::
operator:*::
list:*::
irc:*::
src:*::
gnats:*::
shadow:*::
utmp:*::
video:*::trainee
sasl:*::
plugdev:*::trainee
staff:*::
games:*::
users:*::
nogroup:*::
libuuid:!::
crontab:!::
fuse:!::
avahi-autoipd:!::
scanner:!::saned,trainee
messagebus:!::
colord:!::
lpadmin:!::
ssl-cert:!::
bluetooth:!::trainee
utempter:!::
netdev:!::trainee
Debian-exim:!::
mlocate:!::
ssh:!::
avahi:!::
pulse:!::
pulse-access:!::
rtkit:!::
saned:!::
Debian-gdm:!::
vboxsf:!::
trainee:!::

Debian 8

root@debian8:~# cat /etc/gshadow
root:*::
daemon:*::
bin:*::
sys:*::
adm:*::
tty:*::
disk:*::
lp:*::
mail:*::
news:*::
uucp:*::
man:*::
proxy:*::
kmem:*::
dialout:*::
fax:*::
voice:*::
cdrom:*::trainee
floppy:*::trainee
tape:*::
sudo:*::
audio:*::pulse,trainee
dip:*::trainee
www-data:*::
backup:*::
operator:*::
list:*::
irc:*::
src:*::
gnats:*::
shadow:*::
utmp:*::
video:*::trainee
sasl:*::
plugdev:*::trainee
staff:*::
games:*::
users:*::
nogroup:*::
input:!::
systemd-journal:!::
systemd-timesync:!::
systemd-network:!::
systemd-resolve:!::
systemd-bus-proxy:!::
crontab:!::
netdev:!::trainee
ssl-cert:!::
lpadmin:!::trainee
messagebus:!::
avahi:!::
scanner:!::saned,trainee
Debian-exim:!::
mlocate:!::
ssh:!::
avahi-autoipd:!::
bluetooth:!::trainee
colord:!::
geoclue:!::
utempter:!::
pulse:!::
pulse-access:!::
rtkit:!::
saned:!::
Debian-gdm:!::
trainee:!::

Chaque ligne est constituée de 4 champs :

Le nom du groupe. Ce champs est utilisé pour faire le lien avec le fichier /etc/group,

Le mot de passe crypté du groupe s'il en existe un. Une valeur vide dans ce champs indique que seuls les membres du groupe peuvent exécuter la commande newgrp. Une valeur de !, de x ou de * indique que personne ne peut exécuter la commande newgrp pour le groupe,

L'administrateur du groupe s'il en existe un,

La liste des membres ayant le groupe comme groupe secondaire.

La Commande grpck

Afin de vérifier les fichiers /etc/group et /etc/gshadow pour des erreurs éventuelles, saisissez la commande suivante :

Debian 6

root@debian6:~# grpck -r

Debian 7

root@debian7:~# grpck -r

Debian 8

root@debian8:~# grpck -r

Dans le cas où vos fichiers ne comportent pas d'erreurs, vous vous retrouverez retourné au prompt.

Important : L'option -r permet la vérification des erreurs sans le modifier.

Les Commandes grpconv et grpunconv

Dans le cas où il est nécessaire de régénérer un des deux fichiers, il convient d'utiliser une des deux commandes suivantes :

grpconv

permet de régénérer le fichier /etc/gshadow à partir du fichier /etc/group et éventuellement du fichier /etc/gshadow existant

grpunconv

permet de régénérer le fichier /etc/group à partir du fichier /etc/gshadow et éventuellement du fichier /etc/group existant puis supprime le fichier /etc/gshadow

Les Fichiers /etc/passwd et /etc/shadow

/etc/passwd

Pour lister les comptes utilisateur existants sur le système, vous pouvez utiliser la commande getent passwd ou bien saisir la commande suivante dans le cas de l'utilisation du fichier /etc/passwd :

Debian 6

root@debian6:~# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
messagebus:x:101:103::/var/run/dbus:/bin/false
Debian-exim:x:102:104::/var/spool/exim4:/bin/false
statd:x:103:65534::/var/lib/nfs:/bin/false
avahi:x:104:107:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
usbmux:x:105:46:usbmux daemon,,,:/home/usbmux:/bin/false
Debian-gdm:x:106:114:Gnome Display Manager:/var/lib/gdm3:/bin/false
saned:x:107:116::/home/saned:/bin/false
hplip:x:108:7:HPLIP system user,,,:/var/run/hplip:/bin/false
trainee:x:1000:1000:trainee,,,:/home/trainee:/bin/bash
vboxadd:x:999:1::/var/run/vboxadd:/bin/false

Debian 7

root@debian7:~# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
libuuid:x:100:101::/var/lib/libuuid:/bin/sh
avahi-autoipd:x:101:104:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
messagebus:x:102:106::/var/run/dbus:/bin/false
colord:x:103:107:colord colour management daemon,,,:/var/lib/colord:/bin/false
usbmux:x:104:46:usbmux daemon,,,:/home/usbmux:/bin/false
Debian-exim:x:105:113::/var/spool/exim4:/bin/false
avahi:x:106:116:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
pulse:x:107:117:PulseAudio daemon,,,:/var/run/pulse:/bin/false
speech-dispatcher:x:108:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/sh
hplip:x:109:7:HPLIP system user,,,:/var/run/hplip:/bin/false
sshd:x:110:65534::/var/run/sshd:/usr/sbin/nologin
rtkit:x:111:119:RealtimeKit,,,:/proc:/bin/false
statd:x:112:65534::/var/lib/nfs:/bin/false
saned:x:113:120::/home/saned:/bin/false
Debian-gdm:x:114:121:Gnome Display Manager:/var/lib/gdm3:/bin/false
trainee:x:1000:1000:trainee,,,:/home/trainee:/bin/bash

Debian 8

root@debian8:~# 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
systemd-timesync:x:100:103:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:104:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:105:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:106:systemd Bus Proxy,,,:/run/systemd:/bin/false
messagebus:x:104:111::/var/run/dbus:/bin/false
avahi:x:105:112:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
Debian-exim:x:106:114::/var/spool/exim4:/bin/false
statd:x:107:65534::/var/lib/nfs:/bin/false
avahi-autoipd:x:108:117:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
colord:x:109:119:colord colour management daemon,,,:/var/lib/colord:/bin/false
dnsmasq:x:110:65534:dnsmasq,,,:/var/lib/misc:/bin/false
geoclue:x:111:120::/var/lib/geoclue:/bin/false
pulse:x:112:122:PulseAudio daemon,,,:/var/run/pulse:/bin/false
speech-dispatcher:x:113:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/sh
sshd:x:114:65534::/var/run/sshd:/usr/sbin/nologin
rtkit:x:115:124:RealtimeKit,,,:/proc:/bin/false
saned:x:116:125::/var/lib/saned:/bin/false
usbmux:x:117:46:usbmux daemon,,,:/var/lib/usbmux:/bin/false
hplip:x:118:7:HPLIP system user,,,:/var/run/hplip:/bin/false
Debian-gdm:x:119:126:Gnome Display Manager:/var/lib/gdm3:/bin/false
trainee:x:1000:1000:trainee,,,:/home/trainee:/bin/bash
vboxadd:x:999:1::/var/run/vboxadd:/bin/false

Important : Notez que la valeur de l'UID de root est toujours de 0. Sous Debian 6, 7 et 8 les UID des utilisateurs normaux commencent à 1000 et les UID des comptes système sont inclus entre 100 et 999 par convention.

Chaque ligne est constituée de 7 champs :

Le nom d'utilisateur

Le mot de passe. Une valeur de x dans ce champs indique que le système utilise le fichier /etc/shadow pour stocker les mots de passe.

L'UID. Une valeur unique qui est utilisée pour déterminée les droits aux fichiers et aux répertoires.

Le GID. Une valeur indiquant le groupe principal de l'utilisateur

Le nom complet. Ce champs optionnel est aussi appelé GECOS

Le répertoire personnel de l'utilisateur

Le shell de l'utilisateur.

/etc/shadow

Pour consulter le fichier /etc/shadow, saisissez la commande suivante :

Debian 6

root@debian6:~# cat /etc/shadow
root:$6$fPk.t6Kf$V8EJWK3gMvt/FK3096D91v1phWzqvfsNyt9RcyhqMNqKgSgi.PsFJJrb6sddCII4CeiXTzOkNHykJt.HRJjGB.:15088:0:99999:7:::
daemon:*:15088:0:99999:7:::
bin:*:15088:0:99999:7:::
sys:*:15088:0:99999:7:::
sync:*:15088:0:99999:7:::
games:*:15088:0:99999:7:::
man:*:15088:0:99999:7:::
lp:*:15088:0:99999:7:::
mail:*:15088:0:99999:7:::
news:*:15088:0:99999:7:::
uucp:*:15088:0:99999:7:::
proxy:*:15088:0:99999:7:::
www-data:*:15088:0:99999:7:::
backup:*:15088:0:99999:7:::
list:*:15088:0:99999:7:::
irc:*:15088:0:99999:7:::
gnats:*:15088:0:99999:7:::
nobody:*:15088:0:99999:7:::
libuuid:!:15088:0:99999:7:::
messagebus:*:15088:0:99999:7:::
Debian-exim:!:15088:0:99999:7:::
statd:*:15088:0:99999:7:::
avahi:*:15088:0:99999:7:::
usbmux:*:15088:0:99999:7:::
Debian-gdm:*:15088:0:99999:7:::
saned:*:15088:0:99999:7:::
hplip:*:15088:0:99999:7:::
trainee:$6$6Ie1tC6k$njVbKQWFCBrfXKB9ewRxuaE18kSE95Mkp8N3C/daikawoVERSO8UUONuGpeGS5rjTcKwcdlL6e2Y2z8YOs1Vx.:15088:0:99999:7:::
vboxadd:!:15091::::::

Debian 7

root@debian7:~# cat /etc/shadow
root:$6$tNKlRB41$nhGi9pE01kYaKn7Ej2svaXYNtISCRA9FdQYEWwCWqM.aTy3FSJtlFYcBWYYMwMva1z4QtdBlGjwHkoy6J.jcT.:16712:0:99999:7:::
daemon:*:16266:0:99999:7:::
bin:*:16266:0:99999:7:::
sys:*:16266:0:99999:7:::
sync:*:16266:0:99999:7:::
games:*:16266:0:99999:7:::
man:*:16266:0:99999:7:::
lp:*:16266:0:99999:7:::
mail:*:16266:0:99999:7:::
news:*:16266:0:99999:7:::
uucp:*:16266:0:99999:7:::
proxy:*:16266:0:99999:7:::
www-data:*:16266:0:99999:7:::
backup:*:16266:0:99999:7:::
list:*:16266:0:99999:7:::
irc:*:16266:0:99999:7:::
gnats:*:16266:0:99999:7:::
nobody:*:16266:0:99999:7:::
libuuid:!:16266:0:99999:7:::
avahi-autoipd:*:16266:0:99999:7:::
messagebus:*:16266:0:99999:7:::
colord:*:16266:0:99999:7:::
usbmux:*:16266:0:99999:7:::
Debian-exim:!:16266:0:99999:7:::
avahi:*:16266:0:99999:7:::
pulse:*:16266:0:99999:7:::
speech-dispatcher:!:16266:0:99999:7:::
hplip:*:16266:0:99999:7:::
sshd:*:16266:0:99999:7:::
rtkit:*:16266:0:99999:7:::
statd:*:16266:0:99999:7:::
saned:*:16266:0:99999:7:::
Debian-gdm:*:16266:0:99999:7:::
trainee:$6$pwG6Rsd7$4YGMeptSnyzp5/AwPIIvZjzns88ImPY.xWwVbxgApmHhWTigveBoHDzpFifyCZfNQOdgYGh3gU90lHkrbC06f.:16712:0:99999:7:::

Debian 8

root@debian8:~# cat /etc/shadow
root:$6$T2rG9ZnQ$5jzxhMt9.sooYR9WFv6odv0j4Mo6Kq1sTYQVFMAahqqnvSkwPzm73V7X9VFqmWeCxctdiaJr4fSWdYDhxqFRk/:16723:0:99999:7:::
daemon:*:16723:0:99999:7:::
bin:*:16723:0:99999:7:::
sys:*:16723:0:99999:7:::
sync:*:16723:0:99999:7:::
games:*:16723:0:99999:7:::
man:*:16723:0:99999:7:::
lp:*:16723:0:99999:7:::
mail:*:16723:0:99999:7:::
news:*:16723:0:99999:7:::
uucp:*:16723:0:99999:7:::
proxy:*:16723:0:99999:7:::
www-data:*:16723:0:99999:7:::
backup:*:16723:0:99999:7:::
list:*:16723:0:99999:7:::
irc:*:16723:0:99999:7:::
gnats:*:16723:0:99999:7:::
nobody:*:16723:0:99999:7:::
systemd-timesync:*:16723:0:99999:7:::
systemd-network:*:16723:0:99999:7:::
systemd-resolve:*:16723:0:99999:7:::
systemd-bus-proxy:*:16723:0:99999:7:::
messagebus:*:16723:0:99999:7:::
avahi:*:16723:0:99999:7:::
Debian-exim:!:16723:0:99999:7:::
statd:*:16723:0:99999:7:::
avahi-autoipd:*:16723:0:99999:7:::
colord:*:16723:0:99999:7:::
dnsmasq:*:16723:0:99999:7:::
geoclue:*:16723:0:99999:7:::
pulse:*:16723:0:99999:7:::
speech-dispatcher:!:16723:0:99999:7:::
sshd:*:16723:0:99999:7:::
rtkit:*:16723:0:99999:7:::
saned:*:16723:0:99999:7:::
usbmux:*:16723:0:99999:7:::
hplip:*:16723:0:99999:7:::
Debian-gdm:*:16723:0:99999:7:::
trainee:$6$DEXs91Jm$ZDtCoiUUlskcm0xuTtuBV.eybkNdopT.o.mHdAF6gNGTg7GvUDmsunpA2MxUssy1IglG5hhDpZnWgSnyiY3oI0:16723:0:99999:7:::
vboxadd:!:16724::::::

Chaque ligne est constituée de 8 champs :

Le nom de l'utilisateur. Ce champs est utilisé pour faire le lien avec le fichier /etc/passwd,

Le mot de passe crypté de l'utilisateur. Le cryptage est à sens unique. Ce champ peut aussi contenir une des trois valeurs suivantes :

!! - Le mot de passe n'a pas encore été défini et l'utilisateur ne peut pas se connecter,

* - L'utilisateur ne peut pas se connecter,

vide - aucun mot de passe sera demandé pour l'utilisateur concerné,

Le nombre de jours entre le 01/01/1970 et le dernier changement du mot de passe,

Le nombre de jours que le mot de passe est encore valide. Une valeur de 0 dans ce champs indique sue le mot de passe n'expire jamais,

Le nombre de jours après lequel le mot de passe doit être changé,

Le nombre de jours avant la date de modification forcée que l'utilisateur recevra un avertissement,

Le nombre de jours après l'expiration du mot de passe que le compte sera désactivé,

Le numéro du jour après le 01/01/1970 que le compte a été désactivé.

La Commande pwck

Afin de vérifier les fichiers /etc/passwd et /etc/shadow pour des erreurs éventuelles, saisissez la commande suivante :

Debian 6

root@debian6:~# pwck -r
utilisateur lp : le répertoire « /var/spool/lpd » n'existe pas
utilisateur news : le répertoire « /var/spool/news » n'existe pas
utilisateur uucp : le répertoire « /var/spool/uucp » n'existe pas
utilisateur www-data : le répertoire « /var/www » n'existe pas
utilisateur list : le répertoire « /var/list » n'existe pas
utilisateur irc : le répertoire « /var/run/ircd » n'existe pas
utilisateur gnats : le répertoire « /var/lib/gnats » n'existe pas
utilisateur nobody : le répertoire « /nonexistent » n'existe pas
utilisateur usbmux : le répertoire « /home/usbmux » n'existe pas
utilisateur saned : le répertoire « /home/saned » n'existe pas
utilisateur vboxadd : le répertoire « /var/run/vboxadd » n'existe pas
pwck : aucun changement

Debian 7

root@debian7:~# pwck -r
utilisateur lp : le répertoire « /var/spool/lpd » n'existe pas
utilisateur news : le répertoire « /var/spool/news » n'existe pas
utilisateur uucp : le répertoire « /var/spool/uucp » n'existe pas
utilisateur www-data : le répertoire « /var/www » n'existe pas
utilisateur list : le répertoire « /var/list » n'existe pas
utilisateur irc : le répertoire « /var/run/ircd » n'existe pas
utilisateur gnats : le répertoire « /var/lib/gnats » n'existe pas
utilisateur nobody : le répertoire « /nonexistent » n'existe pas
utilisateur usbmux : le répertoire « /home/usbmux » n'existe pas
utilisateur pulse : le répertoire « /var/run/pulse » n'existe pas
utilisateur speech-dispatcher : le répertoire « /var/run/speech-dispatcher » n'existe pas
utilisateur hplip : le répertoire « /var/run/hplip » n'existe pas
utilisateur saned : le répertoire « /home/saned » n'existe pas
pwck : aucun changement

Debian 8

root@debian8:~# pwck -r
user 'lp': directory '/var/spool/lpd' does not exist
user 'news': directory '/var/spool/news' does not exist
user 'uucp': directory '/var/spool/uucp' does not exist
user 'www-data': directory '/var/www' does not exist
user 'list': directory '/var/list' does not exist
user 'irc': directory '/var/run/ircd' does not exist
user 'gnats': directory '/var/lib/gnats' does not exist
user 'nobody': directory '/nonexistent' does not exist
user 'systemd-resolve': directory '/run/systemd/resolve' does not exist
user 'pulse': directory '/var/run/pulse' does not exist
user 'speech-dispatcher': directory '/var/run/speech-dispatcher' does not exist
user 'saned': directory '/var/lib/saned' does not exist
user 'usbmux': directory '/var/lib/usbmux' does not exist
user 'hplip': directory '/var/run/hplip' does not exist
user 'vboxadd': directory '/var/run/vboxadd' does not exist
pwck: no changes

Important : Les erreurs ci-dessus ne sont pas importantes. Elles sont dues au fait que les répertoires de connexion de certains comptes systèmes ne sont pas créés par le système lors de la création des comptes et ceci justement pour éviter la possibilité qu'un pirate ou un hacker puisse se connecter au système en utilisant le compte concerné. Encore une fois, l'option -r permet la vérification des erreurs dans sans le modifier.

Les Commandes pwconv et pwunconv

Dans le cas où il est nécessaire de régénérer un des deux fichiers, il convient d'utiliser une des deux commandes suivantes :

pwconv

permet de régénérer le fichier /etc/shadow à partir du fichier /etc/passwd et éventuellement du fichier /etc/shadow existant

pwunconv

permet de régénérer le fichier /etc/passwd à partir du fichier /etc/shadow et éventuellement du fichier /etc/passwd existant puis supprime le fichier /etc/shadow

Commandes

Groupes

groupadd

Cette commande est utilisée pour créer un groupe.

Options de la commande

root@debian8:~# groupadd --help
Usage: groupadd [options] GROUP
Options:
-f, --force exit successfully if the group already exists,
and cancel -g if the GID is already used
-g, --gid GID use GID for the new group
-h, --help display this help message and exit
-K, --key KEY=VALUE override /etc/login.defs defaults
-o, --non-unique allow to create groups with duplicate
(non-unique) GID
-p, --password PASSWORD use this encrypted password for the new group
-r, --system create a system account
-R, --root CHROOT_DIR directory to chroot into

Important : Il est possible de créer plusieurs groupes ayant le même GID.

Important : Notez l'option -r qui permet la création d'un groupe système.

groupdel

Cette commande est utilisée pour supprimer un groupe.

Options de la commande

root@debian8:~# groupdel --help
Usage: groupdel [options] GROUP
Options:
-h, --help display this help message and exit
-R, --root CHROOT_DIR directory to chroot into

groupmod

Cette commande est utilisée pour modifier un groupe existant.

Options de la commande

root@debian8:~# groupmod --help
Usage: groupmod [options] GROUP
Options:
-g, --gid GID change the group ID to GID
-h, --help display this help message and exit
-n, --new-name NEW_GROUP change the name to NEW_GROUP
-o, --non-unique allow to use a duplicate (non-unique) GID
-p, --password PASSWORD change the password to this (encrypted)
PASSWORD
-R, --root CHROOT_DIR directory to chroot into

newgrp

Cette commande est utilisée pour modifier le groupe de l'utilisateur qui l'invoque.

Options de la commande

root@debian8:~# newgrp --help
Usage: newgrp [-] [group]

gpasswd

Cette commande est utilisée pour modifier administrer le fichier /etc/group.

Options de la commande

root@debian8:~# gpasswd --help
Usage: gpasswd [option] GROUP
Options:
-a, --add USER add USER to GROUP
-d, --delete USER remove USER from GROUP
-h, --help display this help message and exit
-Q, --root CHROOT_DIR directory to chroot into
-r, --remove-password remove the GROUP's password
-R, --restrict restrict access to GROUP to its members
-M, --members USER,... set the list of members of GROUP
-A, --administrators ADMIN,...
set the list of administrators for GROUP
Except for the -A and -M options, the options cannot be combined.

Utilisateurs

useradd

Cette commande est utilisée pour ajouter un utilisateur.

Les codes retour de la commande useradd sont :

Code Retour	Description
1	Impossible de mettre à jour le fichier /etc/passwd
2	Syntaxe invalide
3	Option invalide
4	L'UID demandé est déjà utilisé
6	Le groupe spécifié n'existe pas
9	Le nom d'utilisateur indiqué existe déjà
10	Impossible de mettre à jour le fichier /etc/group
12	Impossible de créer le répertoire personnel de l'utilisateur
13	Impossible de créer le spool mail de l'utilisateur

Important : Notez que la règle la plus libérale concernant les noms d'utilisateurs sous Linux limite la longueur à 32 caractères et permet l'utilisation de majuscules, de minuscules, de nombres (sauf au début du nom) ainsi que la plupart des caractères de ponctuation. Ceci dit, certains utilitaires, tel useradd interdisent l'utilisation de majuscules et de caractères de ponctuation mais permettent l'utilisation des caractères _, . ainsi que le caractère $ à la fin du nom (ATTENTION : dans le cas de samba, un nom d'utilisateur se terminant par $ est considéré comme un compte machine). Qui plus est, certains utilitaires limitent la longueur du nom à 8 caractères.

Options de la commande

root@debian8:~# useradd --help
Usage: useradd [options] LOGIN
useradd -D
useradd -D [options]
Options:
-b, --base-dir BASE_DIR base directory for the home directory of the
new account
-c, --comment COMMENT GECOS field of the new account
-d, --home-dir HOME_DIR home directory of the new account
-D, --defaults print or change default useradd configuration
-e, --expiredate EXPIRE_DATE expiration date of the new account
-f, --inactive INACTIVE password inactivity period of the new account
-g, --gid GROUP name or ID of the primary group of the new
account
-G, --groups GROUPS list of supplementary groups of the new
account
-h, --help display this help message and exit
-k, --skel SKEL_DIR use this alternative skeleton directory
-K, --key KEY=VALUE override /etc/login.defs defaults
-l, --no-log-init do not add the user to the lastlog and
faillog databases
-m, --create-home create the user's home directory
-M, --no-create-home do not create the user's home directory
-N, --no-user-group do not create a group with the same name as
the user
-o, --non-unique allow to create users with duplicate
(non-unique) UID
-p, --password PASSWORD encrypted password of the new account
-r, --system create a system account
-R, --root CHROOT_DIR directory to chroot into
-s, --shell SHELL login shell of the new account
-u, --uid UID user ID of the new account
-U, --user-group create a group with the same name as the user
-Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user mapping

Important : Il est possible de créer plusieurs utilisateurs ayant le même UID. Notez aussi l'option -r qui permet la création d'un compte système. Dans ce cas la commande useradd ne crée pas de répertoire personnel.

userdel

Cette commande est utilisée pour supprimer un utilisateur.

Options de la commande

root@debian8:~# userdel --help
Usage: userdel [options] LOGIN
Options:
-f, --force force removal of files,
even if not owned by user
-h, --help display this help message and exit
-r, --remove remove home directory and mail spool
-R, --root CHROOT_DIR directory to chroot into
-Z, --selinux-user remove any SELinux user mapping for the user

Important : Notez que lors de la suppression d'un utilisateur, l'UID associé avec ce compte peut être réutilisé. Le nombre maximum de comptes était de 65 536 avec le noyau 2.2.x. Avec les noyaux récents, cette limite passe à plus de 4,2 Milliards.

usermod

Cette commande est utilisée pour modifier un utilisateur existant.

Options de la commande

root@debian8:~# usermod --help
Usage: usermod [options] LOGIN
Options:
-c, --comment COMMENT new value of the GECOS field
-d, --home HOME_DIR new home directory for the user account
-e, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE
-f, --inactive INACTIVE set password inactive after expiration
to INACTIVE
-g, --gid GROUP force use GROUP as new primary group
-G, --groups GROUPS new list of supplementary GROUPS
-a, --append append the user to the supplemental GROUPS
mentioned by the -G option without removing
him/her from other groups
-h, --help display this help message and exit
-l, --login NEW_LOGIN new value of the login name
-L, --lock lock the user account
-m, --move-home move contents of the home directory to the
new location (use only with -d)
-o, --non-unique allow using duplicate (non-unique) UID
-p, --password PASSWORD use encrypted password for the new password
-R, --root CHROOT_DIR directory to chroot into
-s, --shell SHELL new login shell for the user account
-u, --uid UID new UID for the user account
-U, --unlock unlock the user account
-v, --add-subuids FIRST-LAST add range of subordinate uids
-V, --del-subuids FIRST-LAST remove range of subordinate uids
-w, --add-subgids FIRST-LAST add range of subordinate gids
-W, --del-subgids FIRST-LAST remove range of subordinate gids
-Z, --selinux-user SEUSER new SELinux user mapping for the user account

Important : Notez l'option -L qui permet de verrouiller un compte.

passwd

Cette commande est utilisée pour créer ou modifier le mot de passe d'un utilisateur.

Options de la commande

root@debian8:~# passwd --help
Usage: passwd [options] [LOGIN]
Options:
-a, --all report password status on all accounts
-d, --delete delete the password for the named account
-e, --expire force expire the password for the named account
-h, --help display this help message and exit
-k, --keep-tokens change password only if expired
-i, --inactive INACTIVE set password inactive after expiration
to INACTIVE
-l, --lock lock the password of the named account
-n, --mindays MIN_DAYS set minimum number of days before password
change to MIN_DAYS
-q, --quiet quiet mode
-r, --repository REPOSITORY change password in REPOSITORY repository
-R, --root CHROOT_DIR directory to chroot into
-S, --status report password status on the named account
-u, --unlock unlock the password of the named account
-w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS
-x, --maxdays MAX_DAYS set maximum number of days before password
change to MAX_DAYS

Important : Notez l'option -l qui permet de verrouiller un compte en plaçant le caractère ! devant le mot de passe crypté.

chage

La commande chage modifie le nombre de jours entre les changements de mot de passe et la date du dernier changement. Ces informations sont utilisées par le système pour déterminer si un utilisateur doit changer son mot de passe.

Options de la commande

root@debian8:~# chage --help
Usage: chage [options] LOGIN
Options:
-d, --lastday LAST_DAY set date of last password change to LAST_DAY
-E, --expiredate EXPIRE_DATE set account expiration date to EXPIRE_DATE
-h, --help display this help message and exit
-I, --inactive INACTIVE set password inactive after expiration
to INACTIVE
-l, --list show account aging information
-m, --mindays MIN_DAYS set minimum number of days before password
change to MIN_DAYS
-M, --maxdays MAX_DAYS set maximim number of days before password
change to MAX_DAYS
-R, --root CHROOT_DIR directory to chroot into
-W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS

Configuration

La commande useradd est configurée par le fichier /etc/default/useradd. Pour consulter ce fichier, saisissez la commande suivante :

Debian 6

root@debian6:~# cat /etc/default/useradd
# Default values for useradd(8)
#
# The SHELL variable specifies the default login shell on your
# system.
# Similar to DHSELL in adduser. However, we use "sh" here because
# useradd is a low level utility and should be as general
# as possible
SHELL=/bin/sh
#
# The default group for users
# 100=users on Debian systems
# Same as USERS_GID in adduser
# This argument is used when the -n flag is specified.
# The default behavior (when -n and -g are not specified) is to create a
# primary user group with the same name as the user being added to the
# system.
# GROUP=100
#
# The default home directory. Same as DHOME for adduser
# HOME=/home
#
# The number of days after a password expires until the account
# is permanently disabled
# INACTIVE=-1
#
# The default expire date
# EXPIRE=
#
# The SKEL variable specifies the directory containing "skeletal" user
# files; in other words, files such as a sample .profile that will be
# copied to the new user's home directory when it is created.
# SKEL=/etc/skel
#
# Defines whether the mail spool should be created while
# creating the account
# CREATE_MAIL_SPOOL=yes

Debian 7

root@debian7:~# cat /etc/default/useradd
# Default values for useradd(8)
#
# The SHELL variable specifies the default login shell on your
# system.
# Similar to DHSELL in adduser. However, we use "sh" here because
# useradd is a low level utility and should be as general
# as possible
SHELL=/bin/sh
#
# The default group for users
# 100=users on Debian systems
# Same as USERS_GID in adduser
# This argument is used when the -n flag is specified.
# The default behavior (when -n and -g are not specified) is to create a
# primary user group with the same name as the user being added to the
# system.
# GROUP=100
#
# The default home directory. Same as DHOME for adduser
# HOME=/home
#
# The number of days after a password expires until the account
# is permanently disabled
# INACTIVE=-1
#
# The default expire date
# EXPIRE=
#
# The SKEL variable specifies the directory containing "skeletal" user
# files; in other words, files such as a sample .profile that will be
# copied to the new user's home directory when it is created.
# SKEL=/etc/skel
#
# Defines whether the mail spool should be created while
# creating the account
# CREATE_MAIL_SPOOL=yes

Debian 8

root@debian8:~# cat /etc/default/useradd
# Default values for useradd(8)
#
# The SHELL variable specifies the default login shell on your
# system.
# Similar to DHSELL in adduser. However, we use "sh" here because
# useradd is a low level utility and should be as general
# as possible
SHELL=/bin/sh
#
# The default group for users
# 100=users on Debian systems
# Same as USERS_GID in adduser
# This argument is used when the -n flag is specified.
# The default behavior (when -n and -g are not specified) is to create a
# primary user group with the same name as the user being added to the
# system.
# GROUP=100
#
# The default home directory. Same as DHOME for adduser
# HOME=/home
#
# The number of days after a password expires until the account
# is permanently disabled
# INACTIVE=-1
#
# The default expire date
# EXPIRE=
#
# The SKEL variable specifies the directory containing "skeletal" user
# files; in other words, files such as a sample .profile that will be
# copied to the new user's home directory when it is created.
# SKEL=/etc/skel
#
# Defines whether the mail spool should be created while
# creating the account
# CREATE_MAIL_SPOOL=yes

Dans ce fichier, nous trouvons les directives suivantes :

GROUP - identifie le groupe principal par défaut de l'utilisateur quand l'option -N est utilisée avec la commande useradd. Dans le cas contraire le groupe principal est soit le groupe spécifié par l'option -g de la commande, soit un nouveau groupe au même nom que l'utilisateur,

HOME - indique que le répertoire personnel de l'utilisateur sera créé dans le répertoire home lors de la création du compte si cette option a été activée dans le fichier /etc/login.defs,

INACTIVE - indique le nombre de jours d'inactivité après l'expiration d'un mot de passe avant que le compte soit verrouillé. La valeur de -1 désactive cette directive,

EXPIRE - sans valeur, cette directive indique que le mot de passe de l'utilisateur n'expire jamais,

SHELL - renseigne le shell de l'utilisateur,

SKEL - indique le répertoire contenant les fichiers qui seront copiés vers le répertoire personnel de l'utilisateur, si ce répertoire est créé lors de la création de l'utilisateur,

GROUPS - si présent, identifie le ou les groupes secondaire(s) de l'utilisateur,

CREATE_MAIL_SPOOL - indique si oui ou non une boite mail interne au système sera créée pour l'utilisateur,

UMASK - indique l'umask de l'utilisateur. Cette valeur, si présente, prend le dessus sur la valeur indiqué dans le fichier /etc/login.defs.

L'Option -D de la Commande useradd

Cette même information peut être visualisée en exécutant la commande useradd avec l'option -D :

Debian 6

root@debian6:~# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/sh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=no

Debian 7

root@debian7:~# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/sh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=no

Debian 8

root@debian8:~# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/sh
SKEL=/etc/skel
CREATE_MAIL_SPOOL=no

Le Répertoire /etc/skel

Pour consulter la liste des fichiers dans /etc/skel, saisissez la commande suivante :

Debian 6

root@debian6:~# ls -la /etc/skel
total 28
drwxr-xr-x 2 root root 4096 24 avril 2011 .
drwxr-xr-x 121 root root 12288 16 oct. 10:19 ..
-rw-r--r-- 1 root root 220 10 avril 2010 .bash_logout
-rw-r--r-- 1 root root 3184 10 avril 2010 .bashrc
-rw-r--r-- 1 root root 675 10 avril 2010 .profile

Important : Notez que sous Debian le fichier .profile remplace le fichier .bash_profile.

Debian 7

root@debian7:~# ls -la /etc/skel
total 28
drwxr-xr-x 2 root root 4096 oct. 4 21:55 .
drwxr-xr-x 133 root root 12288 oct. 16 10:40 ..
-rw-r--r-- 1 root root 220 janv. 1 2013 .bash_logout
-rw-r--r-- 1 root root 3392 janv. 1 2013 .bashrc
-rw-r--r-- 1 root root 675 janv. 1 2013 .profile

Important : Notez que sous Debian le fichier .profile remplace le fichier .bash_profile.

Debian 8

root@debian8:~# ls -la /etc/skel
total 28
drwxr-xr-x 2 root root 4096 Oct 15 12:52 .
drwxr-xr-x 137 root root 12288 Oct 16 11:36 ..
-rw-r--r-- 1 root root 220 Nov 13 2014 .bash_logout
-rw-r--r-- 1 root root 3515 Nov 13 2014 .bashrc
-rw-r--r-- 1 root root 675 Nov 13 2014 .profile

Important : Notez que sous Debian le fichier .profile remplace le fichier .bash_profile.

La Commande id

Pour connaître l'UID, le GID et l'appartenance aux groupes d'un utilisateur, il convient d'utiliser la commande id. Saisissez la commande suivante :

Debian 6

root@debian6:~# id trainee
uid=1000(trainee) gid=1000(trainee) groupes=1000(trainee),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),108(netdev),109(bluetooth),115(scanner)

Debian 7

root@debian7:~# id trainee
uid=1000(trainee) gid=1000(trainee) groupes=1000(trainee),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),105(scanner),110(bluetooth),112(netdev)

Debian 8

root@debian8:~# id trainee
uid=1000(trainee) gid=1000(trainee) groups=1000(trainee),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),108(netdev),110(lpadmin),113(scanner),118(bluetooth)

La Commande groups

Pour seulement connaître les groupes d'un utilisateur, il convient d'utiliser la commande groups. Saisissez la commande suivante :

Debian 6

root@debian6:~# groups trainee
trainee : trainee cdrom floppy audio dip video plugdev netdev bluetooth scanner

Debian 7

root@debian7:~# groups trainee
trainee : trainee cdrom floppy audio dip video plugdev scanner bluetooth netdev

Debian 8

root@debian8:~# groups trainee
trainee : trainee cdrom floppy audio dip video plugdev netdev lpadmin scanner bluetooth

Le Fichier /etc/login.defs

Les valeurs minimales de l'UID et du GID utilisés par défaut lors de la création d'un utilisateur sont stipulées dans le fichier /etc/login.defs :

Debian 6

...
#
# Min/max values for automatic uid selection in useradd
#
UID_MIN	1000
UID_MAX	60000
# System accounts
#SYS_UID_MIN	100
#SYS_UID_MAX	999
#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN	1000
GID_MAX	60000
# System accounts
#SYS_GID_MIN	100
#SYS_GID_MAX	999
...

Debian 7

...
#
# Min/max values for automatic uid selection in useradd
#
UID_MIN	1000
UID_MAX	60000
# System accounts
#SYS_UID_MIN	100
#SYS_UID_MAX	999
#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN	1000
GID_MAX	60000
# System accounts
#SYS_GID_MIN	100
#SYS_GID_MAX	999
...

Debian 8

...
#
# Min/max values for automatic uid selection in useradd
#
UID_MIN	1000
UID_MAX	60000
# System accounts
#SYS_UID_MIN	100
#SYS_UID_MAX	999
#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN	1000
GID_MAX	60000
# System accounts
#SYS_GID_MIN	100
#SYS_GID_MAX	999
...

LAB #1 - Gestion des Utilisateurs sous Debian 8

Créez maintenant trois groupes groupe1, groupe2 et groupe3. La valeur du GID du groupe groupe3 doit être de 1807 :

root@debian8:~# groupadd groupe1; groupadd groupe2; groupadd -g 1807 groupe3

Créez maintenant trois utilisateurs fenestros1, fenestros2 et fenestros3. Les trois utilisateurs ont pour groupe principal groupe1, groupe2 et groupe3 respectivement. fenestros2 est aussi membre des groupes groupe1 et groupe3. fenestros1 à un GECOS de tux1 :

root@debian8:~# useradd -g groupe2 fenestros2; useradd -g 1807 fenestros3; useradd -g groupe1 fenestros1
root@debian8:~# usermod -G groupe1,groupe3 fenestros2
root@debian8:~# usermod -c "tux1" fenestros1

En consultant votre fichier /etc/passwd, vous obtiendrez un résultat similaire à celui-ci :

root@debian8:~# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
...
fenestros2:x:1001:1002::/home/fenestros2:/bin/sh
fenestros3:x:1002:1807::/home/fenestros3:/bin/sh
fenestros1:x:1003:1001:tux1:/home/fenestros1:/bin/sh

En regardant votre fichier /etc/group, vous obtiendrez un résultat similaire à celui-ci :

root@debian8:~# cat /etc/group
root:x:0:
...
groupe1:x:1001:fenestros2
groupe2:x:1002:
groupe3:x:1807:fenestros2

Créez le mot de passe fenestros pour le groupe3 :

root@debian8:~# gpasswd groupe3
Changing the password for group groupe3
New Password: fenestros
Re-enter new password: fenestros

Important : Notez que les mots de passe saisis ne seront pas visibles.

Consultez le fichier /etc/gshadow :

root@debian8:~# cat /etc/gshadow
root:*::
...
groupe1:!::fenestros2
groupe2:!::
groupe3:$6$ZAnPmIdM$Ux/dHx2GjKTYowVTm4y/2OEk4q5DONrao.vnwTtKxRMq4Aw43c8wenTOzMRjSUOqqJJ8aaAN16Zedd0OB2dr6.::fenestros2

Important : Notez la présence du mot de passe crypté pour le groupe3.

Nommez maintenant fenestros1 administrateur du groupe3 :

root@debian8:~# gpasswd -A fenestros1 groupe3

Consultez le fichier /etc/gshadow de nouveau :

root@debian8:~# cat /etc/gshadow
root:*::
...
groupe1:!::fenestros2
groupe2:!::
groupe3:$6$ZAnPmIdM$Ux/dHx2GjKTYowVTm4y/2OEk4q5DONrao.vnwTtKxRMq4Aw43c8wenTOzMRjSUOqqJJ8aaAN16Zedd0OB2dr6.:fenestros1:fenestros2

Important : L'utilisateur fenestros1 peut maintenant administrer le groupe groupe3 en y ajoutant ou en y supprimant des utilisateurs à condition de connaître le mot de passe du groupe.

Essayez maintenant de supprimer le groupe groupe3 :

root@debian8:~# groupdel groupe3
groupdel: cannot remove the primary group of user 'fenestros3'

Important : En effet, vous ne pouvez pas supprimer un groupe tant qu'un utilisateur le possède comme son groupe principal.

Supprimez donc l'utilisateur fenestros3 :

root@debian8:~# userdel fenestros3

Ensuite essayez de supprimer le groupe groupe3 :

root@debian8:~# groupdel groupe3

Important : Notez que cette fois-ci la commande est exécutée sans erreur.

Le fait de supprimer un utilisateur sans l'option -r implique que le répertoire personnel de l'utilisateur demeure sur la machine.

Sous Debian les répertoires personnels des utilisateurs n'ont pas été créés parce que les directives n'ont pas été activées dans le fichier /etc/default/useradd et que nous n'avons pas spécifier la création du répertoire lors de l'utilisation de la commande useradd :

root@debian8:~# cat /etc/default/useradd
# Default values for useradd(8)
#
# The SHELL variable specifies the default login shell on your
# system.
# Similar to DHSELL in adduser. However, we use "sh" here because
# useradd is a low level utility and should be as general
# as possible
SHELL=/bin/sh
#
# The default group for users
# 100=users on Debian systems
# Same as USERS_GID in adduser
# This argument is used when the -n flag is specified.
# The default behavior (when -n and -g are not specified) is to create a
# primary user group with the same name as the user being added to the
# system.
# GROUP=100
#
# The default home directory. Same as DHOME for adduser
# HOME=/home
#
# The number of days after a password expires until the account
# is permanently disabled
# INACTIVE=-1
#
# The default expire date
# EXPIRE=
#
# The SKEL variable specifies the directory containing "skeletal" user
# files; in other words, files such as a sample .profile that will be
# copied to the new user's home directory when it is created.
# SKEL=/etc/skel
#
# Defines whether the mail spool should be created while
# creating the account
# CREATE_MAIL_SPOOL=yes

Otez donc le caractère # devant les lignes suivantes :

SHELL=/bin/sh GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SKEL=/etc/skel CREATE_MAIL_SPOOL=yes

Pour tester la configuration, créez un utilisateur test :

root@debian8:~# useradd -m test

Vérifiez que l'utilisateur test a un répertoire personnel :

root@debian8:~# ls -l /home
total 8
drwxr-xr-x 2 test test 4096 Oct 16 14:15 test
drwxr-xr-x 20 trainee trainee 4096 Oct 16 11:35 trainee

Créez maintenant les répertoires personnels de fenestros1 et fenestros2 :

root@debian8:~# mkdir /home/fenestros1 /home/fenestros2

Copiez le contenu du répertoire /etc/skel dans les répertoires /home/fenestros1 et /home/fenestros2 :

root@debian8:~# cp -r /etc/skel/.[a-zA-Z]* /home/fenestros1
root@debian8:~# cp -r /etc/skel/.[a-zA-Z]* /home/fenestros2

Modifiez le propriétaire et le groupe pour les répertoires /home/fenestros1 et /home/fenestros2 :

root@debian8:~# chown -R fenestros1:groupe1 /home/fenestros1
root@debian8:~# chown -R fenestros2:groupe2 /home/fenestros2

Créez maintenant les mots de passe pour fenestros1 et fenestros2. Indiquez un mot de passe identique au nom du compte :

root@debian8:~# passwd fenestros1
Enter new UNIX password: fenestros1
Retype new UNIX password: fenestros1
passwd: password updated successfully
root@debian8:~# passwd fenestros2
Enter new UNIX password: fenestros2
Retype new UNIX password: fenestros2
passwd: password updated successfully

Important : Notez que les règles gouvernant l'utilisation des mots de passe ne sont pas appliqués aux utilisateurs créés par root. Notez aussi que les mots de passe saisis ne seront PAS visibles.

LAB #2 - Forcer l'utilisation des mots de passe complexe avec PAM

PAM ( Pluggable Authentification Modules ou Modules d'Authentification Enfichables ) est une architecture modulaire permettant à l'administrateur système de définir une politique d'authentification pour les logiciels prenant en charge PAM.

Les fichiers de configuration se trouvent dans le répertoire /etc/pam.d :

root@debian8:~# ls /etc/pam.d
atd	common-session	newusers sshd
chfn	common-session-noninteractive	other	su
chpasswd	cron	passwd	systemd-user
chsh	lightdm	polkit-1 xscreensaver
common-account	lightdm-autologin	ppp
common-auth	lightdm-greeter	runuser
common-password login	runuser-l

Ces fichiers ont une structure spécifique et sont nommés d'après le service ou l'application qu'ils contrôlent. Leur contenu fait appel à des modules qui se trouvent dans le répertoire /lib/x86_64-linux-gnu/security/ :

root@debian8:~# ls /lib/x86_64-linux-gnu/security
pam_access.so	pam_keyinit.so pam_permit.so pam_tally2.so
pam_debug.so	pam_lastlog.so pam_pwhistory.so pam_tally.so
pam_deny.so	pam_limits.so pam_rhosts.so pam_time.so
pam_echo.so	pam_listfile.so pam_rootok.so pam_timestamp.so
pam_env.so	pam_localuser.so pam_securetty.so pam_tty_audit.so
pam_exec.so	pam_loginuid.so pam_selinux.so pam_umask.so
pam_faildelay.so pam_mail.so	pam_sepermit.so pam_unix.so
pam_filter.so	pam_mkhomedir.so pam_shells.so pam_userdb.so
pam_ftp.so	pam_motd.so	pam_stress.so pam_warn.so
pam_group.so	pam_namespace.so pam_succeed_if.so pam_wheel.so
pam_issue.so	pam_nologin.so pam_systemd.so pam_xauth.so

Les modules les plus importants sont :

Module	Description
pam_access.so	Ce module est utilisé pour interdire l'accès aux services sécurisés par des hôtes non-autorisés.
pam_cracklib.so	Ce module est utilisé pour vérifier la qualité du mot de passe d'un utilisateur
pam_echo.so	Ce module présente le contenu du fichier passé en argument à tout utilisateur lors de sa connexion.
pam_limits.so	Ce module implémente les limites des ressources détaillées dans le fichier /etc/security/limits.conf et dans les fichiers *.conf trouvés dans le répertoire /etc/security/limits.d/.
pam_listfile.so	Ce module est utilisé pour consulter un fichier spécifique pour vérifier les authiorisations. Par exemple, le service ftp utilise ce module pour consulter le fichier /etc/ftpusers qui contient une liste d'utilisateurs qui ne sont pas autorisés à se connecter au serveur ftp.
pam_nologin.so	Ce module interdit les connexions d'utilisteurs, autre que root, dans le cas où le fichier /etc/nologin est présent.
pam_securetty.so	Ce module interdit des connexions de root à partir des périphériques tty qui ne sont pas listés dans le fichier /etc/securetty.
pam_unix.so	Ce module est utilisé pour vérifier les informations suivantes ; expire, last_change, max_change, min_change, warn_change.

Chaque fichier dans /etc/pam.d contient les règles PAM utilisées pendant l'authentification. Ouvrez le fichier login :

root@debian8:~# cat /etc/pam.d/login
#
# The PAM configuration file for the Shadow `login' service
#
# Enforce a minimal delay in case of failure (in microseconds).
# (Replaces the `FAIL_DELAY' setting from login.defs)
# Note that other modules may require another minimal delay. (for example,
# to disable any delay, you should add the nodelay option to pam_unix)
auth optional pam_faildelay.so delay=3000000
# Outputs an issue file prior to each login prompt (Replaces the
# ISSUE_FILE option from login.defs). Uncomment for use
# auth required pam_issue.so issue=/etc/issue
# Disallows root logins except on tty's listed in /etc/securetty
# (Replaces the `CONSOLE' setting from login.defs)
#
# With the default control of this module:
# [success=ok new_authtok_reqd=ok ignore=ignore user_unknown=bad default=die]
# root will not be prompted for a password on insecure lines.
# if an invalid username is entered, a password is prompted (but login
# will eventually be rejected)
#
# You can change it to a "requisite" module if you think root may mis-type
# her login and should not be prompted for a password in that case. But
# this will leave the system as vulnerable to user enumeration attacks.
#
# You can change it to a "required" module if you think it permits to
# guess valid user names of your system (invalid user names are considered
# as possibly being root on insecure lines), but root passwords may be
# communicated over insecure lines.
auth [success=ok new_authtok_reqd=ok ignore=ignore user_unknown=bad default=die] pam_securetty.so
# Disallows other than root logins when /etc/nologin exists
# (Replaces the `NOLOGINS_FILE' option from login.defs)
auth requisite pam_nologin.so
# SELinux needs to be the first session rule. This ensures that any
# lingering context has been cleared. Without out this it is possible
# that a module could execute code in the wrong domain.
# When the module is present, "required" would be sufficient (When SELinux
# is disabled, this returns success.)
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
# This module parses environment configuration file(s)
# and also allows you to use an extended config
# file /etc/security/pam_env.conf.
#
# parsing /etc/environment needs "readenv=1"
session required pam_env.so readenv=1
# locale variables are also kept into /etc/default/locale in etch
# reading this file *in addition to /etc/environment* does not hurt
session required pam_env.so readenv=1 envfile=/etc/default/locale
# Standard Un*x authentication.
@include common-auth
# This allows certain extra groups to be granted to a user
# based on things like time of day, tty, service, and user.
# Please edit /etc/security/group.conf to fit your needs
# (Replaces the `CONSOLE_GROUPS' option in login.defs)
auth optional pam_group.so
# Uncomment and edit /etc/security/time.conf if you need to set
# time restrainst on logins.
# (Replaces the `PORTTIME_CHECKS_ENAB' option from login.defs
# as well as /etc/porttime)
# account requisite pam_time.so
# Uncomment and edit /etc/security/access.conf if you need to
# set access limits.
# (Replaces /etc/login.access file)
# account required pam_access.so
# Sets up user limits according to /etc/security/limits.conf
# (Replaces the use of /etc/limits in old login)
session required pam_limits.so
# Prints the last login info upon succesful login
# (Replaces the `LASTLOG_ENAB' option from login.defs)
session optional pam_lastlog.so
# Prints the message of the day upon succesful login.
# (Replaces the `MOTD_FILE' option in login.defs)
session optional pam_exec.so type=open_session stdout /bin/uname -snrvm
session optional pam_motd.so
# Prints the status of the user's mailbox upon succesful login
# (Replaces the `MAIL_CHECK_ENAB' option from login.defs).
#
# This also defines the MAIL environment variable
# However, userdel also needs MAIL_DIR and MAIL_FILE variables
# in /etc/login.defs to make sure that removing a user
# also removes the user's mail spool file.
# See comments in /etc/login.defs
session optional pam_mail.so standard
# Sets the loginuid process attribute
session required pam_loginuid.so
# Standard Un*x account and session
@include common-account
@include common-session
@include common-password
# SELinux needs to intervene at login time to ensure that the process
# starts in the proper default security context. Only sessions which are
# intended to run in the user's context should be run after this.
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
# When the module is present, "required" would be sufficient (When SELinux
# is disabled, this returns success.)

La première ligne de ce fichier est un commentaire qui spécifie que le fichier est conforme à la spécification PAM 1.0.

Ce fichier, tout comme les autres, est ensuite structuré de la façon suivante :

Un module par ligne,

Quatre champs séparés par un espace dans chaque règle dont les trois premières sont obligatoires.

Le premier champs est le type de module. Il en existe quatre :

Type	Description
auth	Utilisé pour authentifier un utilisateur ou les pré-requis système ( par exemple /etc/nologin )
account	Utilisé pour vérifier si l'utilisateur peut s'authentifier ( par exemple la validité du compte )
password	Utilisé pour vérifier si l'utilisateur dispose des droits pour mettre le mécanisme d'authentification à jour
session	Utilisé pour gérer la session après l'authentification ( par exemple monter un répertoire )

Le deuxième champs est le Control-flag. Il en existe quatre :

Control-flag	Description
required	La réussite de ce module est indispensable. L'échec d'un module required n'est communiqué à l'application qu'après la vérification de tous les modules ayant un control-flag de required
requisite	La réussite de ce module est indispensable. L'échec d'un module requisite est immédiatement communiqué à l'application
sufficient	La réussite de ce module est suffisant pour authoriser l'authentification. Si aucun test required précédent est en échec, la vérification s'arrête. Si un test required précédent était en échec, le test sufficient est ignoré. L'échec d'un test sufficient n'a pas de conséquence si tous les tests required réussissent.
optional	La réussite ou l'échec de ce module est sans importance, sauf s'il s'agit du seul module à exécuter
include	Ce control-flag permet d'inclure toutes les lignes du même type de module se trouvant dans le fichier spécifié en argument

Le troisième champs stipule le module associé à la règle. Sans chemin absolu, le fichier est supposé être dans le répertoire /lib/security. Pour inclure un module en dehors de ce répertoire il convient donc de stipuler son chemin absolu.

Le quatrième champs contient éventuellement les arguments.

Utiliser des Mots de Passe Complexe

La complexité des mots de passe est gérée par le module pam_cracklib.so. Commencez par installer libpam-cracklib :

root@debian8:~# apt-get install libpam-cracklib
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
cracklib-runtime libcrack2
The following NEW packages will be installed:
cracklib-runtime libcrack2 libpam-cracklib
0 upgraded, 3 newly installed, 0 to remove and 95 not upgraded.
Need to get 289 kB of archives.
After this operation, 1,195 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://ftp.fr.debian.org/debian/ jessie/main libcrack2 amd64 2.9.2-1 [54.7 kB]
Get:2 http://ftp.fr.debian.org/debian/ jessie/main cracklib-runtime amd64 2.9.2-1 [148 kB]
Get:3 http://ftp.fr.debian.org/debian/ jessie/main libpam-cracklib amd64 1.1.8-3.1+deb8u1+b1 [86.0 kB]
Fetched 289 kB in 0s (323 kB/s)
Selecting previously unselected package libcrack2:amd64.
(Reading database ... 82496 files and directories currently installed.)
Preparing to unpack .../libcrack2_2.9.2-1_amd64.deb ...
Unpacking libcrack2:amd64 (2.9.2-1) ...
Selecting previously unselected package cracklib-runtime.
Preparing to unpack .../cracklib-runtime_2.9.2-1_amd64.deb ...
Unpacking cracklib-runtime (2.9.2-1) ...
Selecting previously unselected package libpam-cracklib:amd64.
Preparing to unpack .../libpam-cracklib_1.1.8-3.1+deb8u1+b1_amd64.deb ...
Unpacking libpam-cracklib:amd64 (1.1.8-3.1+deb8u1+b1) ...
Processing triggers for man-db (2.7.0.2-5) ...
Setting up libcrack2:amd64 (2.9.2-1) ...
Setting up cracklib-runtime (2.9.2-1) ...
Setting up libpam-cracklib:amd64 (1.1.8-3.1+deb8u1+b1) ...
Processing triggers for libc-bin (2.19-18+deb8u4) ...

Afin de mettre en place une politique de mots de passe complexe, il convient de modifier la ligne suivante du fichier cat /etc/pam.d/common-password :

password	requisite	pam_cracklib.so retry=3 minlen=8 difok=3

en

password	requisite	pam_cracklib.so retry=3 minlen=8 lcredit=-1 ucredit=-1 dcredit=-2 ocredit=-1

root@debian8:~# cat /etc/pam.d/common-password
#
# /etc/pam.d/common-password - password-related modules common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of modules that define the services to be
# used to change user passwords. The default is pam_unix.
# Explanation of pam_unix options:
#
# The "sha512" option enables salted SHA512 passwords. Without this option,
# the default is Unix crypt. Prior releases used the option "md5".
#
# The "obscure" option replaces the old `OBSCURE_CHECKS_ENAB' option in
# login.defs.
#
# See the pam_unix manpage for other options.
# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules. See
# pam-auth-update(8) for details.
# here are the per-package modules (the "Primary" block)
password	requisite	pam_cracklib.so retry=3 minlen=8 lcredit=-1 ucredit=-1 dcredit=-2 ocredit=-1
password	[success=1 default=ignore]	pam_unix.so obscure use_authtok try_first_pass sha512
# here's the fallback if no module succeeds
password	requisite	pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
password	required	pam_permit.so
# and here are more per-package modules (the "Additional" block)
password	optional	pam_gnome_keyring.so
# end of pam-auth-update config

Dans ce cas, le mot de passe doit être long de 8 caractères et doit contenir au moins un caractère minuscule, un caractère majuscule, deux chiffres et un caractère spécial.

Bloquer un Compte après N Echecs de Connexion

Le module PAM pam_tally2.so permet de bloquer un compte après N échecs de connexion. Afin d'activer ce comportement, il convient d'ajouter dans le fichier /etc/pam.d/login la ligne suivante :

auth required pam_tally2.so onerr=fail deny=3 unlock_time=300

Dans ce cas, après trois tentatives infructueuses de connexion, le compte sera bloquer pendant 5 minutes.

Configuration

Certains modules de PAM peuvent être configurés grâce aux fichiers présents dans le répertoire /etc/security :

root@debian8:~# ls /etc/security
access.conf group.conf limits.conf limits.d	namespace.conf	namespace.d namespace.init opasswd pam_env.conf sepermit.conf time.conf

Parmi les fichiers cités on note ceux qui peuvent être utilisés pour configurer les modules suivants :

Fichier/Répertoire	Description
access.conf	Utilisé par le module pam_access.so
group.conf	Utilisés par le module pam_group.so
limits.conf	Utilisé par le module pam_limits.so
pam_env.conf	Utilisé par le module pam_env.so
time.conf	Utilisé par le module pam_time.so

A faire : Passez en revue chacun de ces fichiers.

Dernièrement, PAM propose une solution pour toutes les applications ne disposant pas de leurs propres fichiers de configuration PAM. Cette solution prend la forme du fichier /etc/pam.d/other :

root@debian8:~# cat /etc/pam.d/other
#
# /etc/pam.d/other - specify the PAM fallback behaviour
#
# Note that this file is used for any unspecified service; for example
#if /etc/pam.d/cron specifies no session modules but cron calls
#pam_open_session, the session module out of /etc/pam.d/other is
#used. If you really want nothing to happen then use pam_permit.so or
#pam_deny.so as appropriate.
# We fall back to the system default in /etc/pam.d/common-*
#
@include common-auth
@include common-account
@include common-password
@include common-session

su et su -

Vous allez maintenant devenir fenestros2, d'abord sans l'environnement de fenestros2 puis avec l'environnement de fenestros2.

Contrôlez votre répertoire courant de travail :

root@debian8:~# pwd
/root

Pour devenir fenestros2 sans son environnement, saisissez la commande suivante :

root@debian8:~# su fenestros2

Contrôlez votre répertoire courant de travail :

$ pwd
/root

Vous noterez que vous êtes toujours dans le répertoire /root. Ceci indique que vous avez gardé l'environnement de root.

Important : L'environnement d'un utilisateur inclut donc, entre autre, le répertoire personnel de l'utilisateur ainsi que la valeur de la variable système PATH.

Saisissez la commande suivante pour redevenir root :

$ exit
root@debian8:~#

Saisissez la commande suivante pour redevenir fenestros2 :

root@debian8:~# su - fenestros2

Contrôlez votre répertoire courant de travail :

$ pwd
/home/fenestros2

Vous noterez que vous êtes maintenant dans le répertoire /home/fenestros2. Ceci indique que vous avez l'environnement de fenestros2.

Important : Notez que root peut devenir n'importe quel utilisateur sans avoir besoin de connaître son mot de passe.

sudo

Important : Afin de mettre en pratique les exemples qui suivent, vous devez être connecté à votre système en tant que root. Tapez donc la commande exit pour sortir de l’environnement de fenestros2.

La commande sudo permet à un utilisateur autorisé d'exécuter une commande en tant que root ou en tant qu'un autre utilisateur. Lors de l'exécution de la commande, l'UID et le GID éffectifs et réels sont ceux de l'identité de l'utilisateur cible. L'utilisation de la commande sudo est une façon simple de déléguer des tâches administratives à d'autres utilisateurs sans communiquer le mot de passe de root et sans placer un SUID bit sur l'exécutable. La commande sudo est configurée grâce au fichier /etc/sudoers.

Saisissez la commande suivante :

root@debian6:~# cat /etc/sudoers
# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#
Defaults	env_reset
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root	ALL=(ALL) ALL
# Allow members of group sudo to execute any command
# (Note that later entries override this, so you might need to move
# it further down)
%sudo ALL=(ALL) ALL
#
#includedir /etc/sudoers.d

root@debian7:~# cat /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults	env_reset
Defaults	mail_badpass
Defaults	secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root	ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command
%sudo	ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d

Sous Debian 8, le paquet sudo n'est pas installé par défaut. Installez ce paquet avec la commande suivante :

root@debian8:~# apt-get install sudo
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
sudo
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 856 kB of archives.
After this operation, 2,483 kB of additional disk space will be used.
Get:1 http://httpredir.debian.org/debian/ jessie/main sudo i386 1.8.10p3-1+deb8u2 [856 kB]
Fetched 856 kB in 4s (202 kB/s)
Selecting previously unselected package sudo.
(Reading database ... 158850 files and directories currently installed.)
Preparing to unpack .../sudo_1.8.10p3-1+deb8u2_i386.deb ...
Unpacking sudo (1.8.10p3-1+deb8u2) ...
Processing triggers for man-db (2.7.0.2-5) ...
Processing triggers for systemd (215-17+deb8u2) ...
Setting up sudo (1.8.10p3-1+deb8u2) ...
Processing triggers for systemd (215-17+deb8u2) ...

Consultez ensuite le fichier /etc/sudoers :

root@debian8:~# cat /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults	env_reset
Defaults	mail_badpass
Defaults	secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root	ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command
%sudo	ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d

Important : Notez la présence de la ligne %sudo ALL=(ALL) ALL. Cette ligne possède le format Qui Où = (En tant que qui) Quoi. La ligne implique donc que les membres du groupe sudo peuvent exécuter à partir de n'importe quel hôte et en tant que n'importe quel utilisateur, toutes les commandes du système. Dans ce fichier donc, un groupe est référencé par un %. Un nom sans ce caractère est forcément un utilisateur. Pour éditer le fichier /etc/sudoers, il est nécessaire d'utiliser la commande visudo.

<html> <div align=“center”> Copyright © 2020 Hugh Norris. </html>