Gérer les utilisateurs à partir de la ligne de commande sous Linux

L’une des responsabilités principales de l’administration Linux est la gestion des utilisateurs. Grâce à l’utilisation de la ligne de commande, la création d’utilisateur peut être complétée à distance ou par programme. Une fois que vous avez créé un utilisateur, vous pouvez ensuite l’ajouter à des groupes ou leur attribuer des privilèges plus élevés. De plus, vous pouvez garder une trace d’audit sur ce qui a été fait sur votre serveur et sur tout problème potentiel.

Si vous avez développé un logiciel ou programmé pour le Web, vous connaissez peut-être la politique de ne jamais faire confiance aux utilisateurs. Le même principe s’applique dans d’autres domaines de l’utilisation des ordinateurs en ce qui concerne la participation des utilisateurs. Ne donnez accès qu’à ceux qui en ont besoin et quand ils en ont besoin. Une délégation généreuse de privilèges pourrait permettre un accès non spécifié et non autorisé aux informations et aux données de base de tiers. Voir les utilisateurs existants

L’un des moyens les plus rapides de visualiser les utilisateurs consiste à utiliser les commandes cat (concaténer) ou more (pager) pour afficher la liste des utilisateurs du système. Le fichier que vous devez afficher est le fichier «/ etc / passwd». Ce fichier stocke tous les comptes d’utilisateur et les informations de connexion de l’utilisateur.

sudo cat /etc/passwd 

Utilisation de la commande useradd

useradd est un binaire de bas niveau disponible sur la plupart des distributions. Cette commande est généralement moins utilisée en raison de son caractère moins convivial et intuitif par rapport à la commande adduser . Cependant, il y a très peu de différences et l’une ou l’autre peut être utilisée.

Pour en savoir plus sur useradd, exécutez la commande man ou ajoutez –help pour obtenir un aperçu rapide.

man useradd
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
      --btrfs-subvolume-home    use BTRFS subvolume for home directory
  -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
  -P, --prefix PREFIX_DIR       prefix directory where are located the /etc/* files
  -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

Pour ajouter un utilisateur à l’aide de useradd , tapez useradd et le nom du login que vous souhaitez créer.

sudo useradd --create-home testuser

Dans le cas ci-dessus, l’utilisateur “testuser” sera créé. Par défaut, cette commande ne créera que l’utilisateur et rien d’autre. Si vous avez besoin d’un répertoire de base pour cet utilisateur, ajoutez l’indicateur --create-home pour créer le répertoire de base de l’utilisateur.

Utilisation de la commande adduser

La commande adduser est un script Perl qui créera l’utilisateur de la même façon que la commande useradd . La différence réside dans le fait qu’il s’agit d’une commande interactive qui vous invitera à définir le mot de passe, le chemin du répertoire personnel, etc. Notez que sur certaines distributions, telles que Red Hat et CentOS, adduser est un lien symbolique vers useradd, et Sur d’autres distributions comme Arch Linux, adduser est fourni sous forme de paquet qui n’est pas installé par défaut.

L’utilisation de cette commande créera un groupe pour l’utilisateur en utilisant son identifiant par défaut. Les autres valeurs par défaut se trouvent généralement dans le fichier useradd à l’adresse “/etc/default”.

Dans ce fichier, vous pouvez modifier les paramètres par défaut pour les utilisateurs créés avec useradd, tels que le shell et le répertoire de base.

Exécutez la commande adduser suivante:

sudo adduser testuser 

Cela vous indiquera les valeurs par défaut que vous souhaitez définir et vous demandera le mot de passe.

Mots de passe et sécurité

L’ajout d’un mot de passe pour un utilisateur nécessitera l’exécution de la commande passwd.

sudo passwd testuser 

Sans les privilèges de super-utilisateur, exécuter passwd ne changera que le mot de passe de l’utilisateur connecté. Cette commande testera la complexité du mot de passe. Sous Ubuntu, les exigences en matière de mot de passe sont définies dans le fichier de mot de passe commun situé dans «/ec/pam.d». Pour plus d’informations sur la mise à jour de la complexité, reportez-vous à la page de manuel relative à pam-auth-update.

Mise à jour des informations utilisateur

Une fois qu’un utilisateur est sur le système, vous pouvez consulter le fichier «/etc/passwd» pour afficher les informations de l’utilisateur et le mot de passe crypté. Si vous devez apporter des modifications à un utilisateur, vous devrez utiliser la commande usermod .

Par exemple, pour modifier l’ID utilisateur du compte testuser4 créé ci-dessus, exécutez la commande suivante:

sudo usermod -u 2022 testuser2 

Vous pouvez ensuite examiner les modifications dans le fichier «/etc/passwd».

Veillez à ne pas modifier les informations critiques telles que le nom de connexion ou, comme dans ce cas, l’ID utilisateur. Consultez la page de manuel de usermod pour savoir ce que vous devrez faire si ces éléments sont modifiés.

Ajout d’utilisateurs au groupe

Il arrive parfois que vous deviez ajouter des utilisateurs à un groupe afin qu’ils disposent des autorisations nécessaires pour exécuter certaines tâches.

Pour ajouter un utilisateur à un groupe:

sudo usermod -a -G groupname username

Notez que l’indicateur -a est nécessaire pour «ajouter» le groupe à l’utilisateur. Sinon, vous risquez de retirer l’utilisateur du groupe «sudo» s’il est supposé avoir l’autorisation de superutilisateur.

Vous pouvez également utiliser la commande gpasswd pour ajouter/supprimer un utilisateur au/du groupe.

sudo gpasswd -a username groupname 

Pour supprimer un utilisateur d’un groupe:

sudo gpasswd -d username groupname 

Suppression d’utilisateurs

Comme pour les autres commandes utilisateur, la suppression d’un utilisateur est précédée de «user» et de l’action. Dans ce cas, vous devrez utiliser la commande userdel

Prenez note que userdel ne supprimera pas un utilisateur s’il existe des processus utilisant son compte.

sudo userdel testuser4 

Affichage des journaux utilisateurs

Selon votre distribution, vous pourrez consulter le journal d’authentification ou le journal sécurisé situé dans «/var/log» pour vérifier les identifiants de connexion des utilisateurs. Ce fichier journal vous donnera les identifiants sur votre système dès qu’ils se produisent. Il s’agit d’un élément essentiel de la surveillance des événements en cas de violation et du simple fait de s’assurer que tout fonctionne comme prévu.

sudo tail /var/log/auth.log

La gestion des utilisateurs est un élément crucial de la gestion des serveurs Linux si plusieurs personnes utilisent votre système. L’utilisation de la ligne de commande vous permettra d’administrer rapidement les utilisateurs et de disposer d’un historique de création et de modification de compte. L’une des meilleures utilisations serait peut-être d’automatiser la création à l’aide d’un script shell si plusieurs comptes sont nécessaires à la fois.

Dans les deux cas, veillez à consulter régulièrement vos comptes et à supprimer les comptes devenus inutiles. Assurez-vous que l’accès n’est accordé qu’à ceux qui en ont actuellement besoin et surveille fréquemment vos journaux.

Permissions des fichiers et répertoires d’un serveur web

Un serveur HTTP peut contenir plusieurs sites, les fichiers de ceux-ci peuvent être gérés par plusieurs utilisateurs, un utilisateur A ayant accès aux fichiers du site A, mais pas à ceux du site B, alors qu’un utilisateur C, aura accès aux fichiers des site A, B et C par exemple.

Ce qui suit ne s’adresse pas à un type de serveur particulier, mais suppose une machine GNU/Linux et un serveur Nginx ou Apache.

Les permissions

Normalement sous Linux, lorsqu’un fichier est créé, il hérite du groupe de l’utilisateur qui l’a créé. Dans le cas de fichiers et répertoires relatifs à un serveur web, il est préférable que lorsqu’un fichier est créé il hérite du groupe du répertoire parent (en général /var/www), pour faire ceci il faut activer le bit SGID (Set Group ID) du répertoire parent. Pour se rafraichir un peu les neurones au niveau du concept de permissions sous Linux, voir ce billet.

D’un autre coté, pour travailler convenablement avec ses collaborateurs, il faut prendre soin de modifier le umask, le masque de création de fichier par l’utilisateur, qui est général placé à 022 par défaut, c’est-à-dire que lorsqu’un fichier est créé il aura comme permissions 755, ce fichier n’étant pas éditable par le groupe. Changer le umask en 002 va placer les permissions d’un nouveau fichier en 775.

Principes de base

Dans un fonctionnement typique, nous voulons que les utilisateurs aient le droit de lire et écrire sur les fichiers. Ils doivent également avoir le droit d’exécution sur les répertoires, ce droit permettant à un utilisateur de traverser un répertoire, donc de lister ce qu’il contient. De son coté le serveur web doit pouvoir lire et exécuter les fichiers. A noter qu’il n’a pas besoin d’avoir le droit d’exécution x car ceci ne s’applique en général qu’aux binaires, or un script PHP est un fichier texte interprété. Le serveur HTTP doit également pouvoir lire et « exécuter » les répertoires (entendre: il doit pouvoir les traverser). Enfin certains répertoires peuvent avoir le droit d’écriture pour donner le droit d’uploader des fichiers par exemple.

Configuration

La configuration sera la suivante : un groupe par site sera créé, les utilisateurs seront ajoutés aux groupes désirés afin d’y avoir accès et tous les fichiers et répertoires appartiendront à l’utilisateur root. La notion d’utilisateur n’étant plus importante dans notre cas, on ne fait qu’accroitre la sécurité du serveur web en attribuant la propriété des fichiers à l’utilisateur root (on est certain qu’aucun utilisateur du système n’aura les privilèges de modifier ces fichiers).

Voici un exemple qui peut servir de base :

  • On ajoute un groupe pour le site A :
groupadd www-site-a
  • On fait de même pour le site B :
groupadd www-site-b
  • On ajoute le groupe www-site-a à l’utilisateur A :
usermod -a -G www-site-a usera
  • On ajoute le groupe www-site-b à l’utilisateur B :
usermod -a -G www-site-b userb
  • Suivant l’exemple du début, on ajoute ces deux groupes à l’utilisateur C :
usermod -a -G www-site-a userc
usermod -a -G www-site-b userc

A ce stade on peut simplement vérifier les groupes des utilisateurs :

groups userc
userc : userc www-site-a www-site-b
  • On change les permissions de tous les fichiers et répertoires recursivement pour chaque site :
chown -R root:www-site-a /var/www/site-a
chown -R root:www-site-b /var/www/site-b
  • Tous les répertoires doivent avoir les droits 2775 (Sticky Bit) :
find /var/www -type d -exec chmod 2775 {} +
  • Tous les fichiers eux doivent être en 0664 :
find /var/www -type f -exec chmod 0664 {} +

Pour finir, il faut changer le umask en 0002, cela diffère suivant le système. Sous Debian 7.4 ou Fedora 20, il est possible de changer la ligne UMASK du fichier /etc/login.defs.

Note sur les dangers du chmod 777

Un fichier ayant les droits 777 est accessible par tous les utilisateurs, n’importe lequel peut modifier et supprimer ce fichier. Ceci reste local aux utilisateurs existants sur la machine, c’est une question de confiance aux collègues. Plus important, des fichiers en 777 sont également modifiables par le serveur web lui-même, donc toute faille dans un script peut être catastrophique, une régle de base est de n’accorder qu’une confiance minimum à tout script, car aucun programme n’est à l’abri d’une vulnérabilité.

Permissions UNIX (wikipédia)

Droit SGID

Fichiers
Ce droit fonctionne comme le droit SUID, mais appliqué aux groupes. Il donne à un utilisateur les droits du groupe auquel appartient le propriétaire de l’exécutable et non plus les droits du propriétaire.

Répertoires
Ce droit a une tout autre utilisation s’il est appliqué à un répertoire. Normalement, lorsqu’un fichier est créé par un utilisateur, il en est propriétaire, et un groupe par défaut lui est appliqué (généralement users si le fichier a été créé par un utilisateur, et root ou wheel s’il a été créé par root). Cependant, lorsqu’un fichier est créé dans un répertoire portant le droit SGID, alors ce fichier se verra attribuer par défaut le groupe du répertoire. De plus, si c’est un autre répertoire qui est créé dans le répertoire portant le droit SGID, ce sous-répertoire portera également ce droit.

Notation
Comme le droit SUID, il vient remplacer le flag x, mais celui des droits du groupe, et la capitale indique le droit d’exécution x caché, elle est présente s’il n’est pas alloué.

 ------s---  ou  ------S---

Un fichier avec les droits

 -rwxr--r--

auquel on ajoute le droit SGID aura donc la notation

 -rwxr-Sr--

Valeur
Le droit SGID possède la valeur octale 2000.
Exemple : - r w x r - S r - - correspond à 2744.

Sticky Bit

Ce droit (traduction bit collant) est utilisé pour manier de façon plus subtile les droits d’écriture d’un répertoire. En effet, le droit d’écriture signifie que l’on peut créer et supprimer les fichiers de ce répertoire. Le sticky bit permet de faire la différence entre les deux droits.

Définition
Lorsque ce droit est positionné sur un répertoire, il interdit la suppression d’un fichier qu’il contient à tout utilisateur autre que le propriétaire du fichier. Néanmoins, il est toujours possible pour un utilisateur possédant les droits d’écriture sur ce fichier de le modifier (par exemple de le transformer en un fichier vide). La création de nouveaux fichiers est toujours possible pour tous les utilisateurs possédant le droit d’écriture sur ce répertoire. Remarquons que c’est le même principe que les pages de Wikipédia, elles sont modifiables mais on ne peut pas les supprimer.

Pour les fichiers, l’utilisation est tout autre. Le bit collant (sticky bit) indique alors que ce fichier doit encore rester en mémoire vive après son exécution. Le but était, à l’époque, d’améliorer les performances en évitant de charger/décharger un fichier de la mémoire (par exemple, un exécutable ou une bibliothèque logicielle). Le terme sticky (collant) voulait dire que le fichier restait collé en mémoire. Cette fonctionnalité n’est toutefois gérée que sur un faible nombre de systèmes Unix comme HP-UX. Aucune version de Linux ne gère cette fonctionnalité du sticky bit.

Notation
Son flag est le t ou T, qui vient remplacer le droit d’exécution x des autres utilisateurs que le propriétaire et ceux appartenant au groupe du fichier, de la même façon que les droits SUID et SGID. La capitale fonctionne aussi de la même façon, elle est présente si le droit d’exécution x caché n’est pas présent.

 ---------t ou ---------T

Un fichier avec les droits

 -rwxr-xr-x

auquel on ajoute le droit sticky bit aura donc la notation

 -rwxr-xr-t

Valeur
Le droit sticky bit possède la valeur octale 1000.
Exemple : - r w x r - x r - t correspond à 1755.
Exemple d’utilisation

Sur certains systèmes UNIX, le sticky bit est utilisé pour le répertoire /tmp, qui doit être accessible en écriture par tous les utilisateurs, sans que ceux-ci se suppriment leurs fichiers les uns les autres :

 drwxrwxrwt   86 root root  20480 tmp