# addgroup && usermod partiel

**URL:** <https://www.debian-fr.org/t/addgroup-usermod-partiel/87126>\
**Category:** Support Debian\
**Created:** [Septembre 10, 2022, 5:00 UTC](https://www.debian-fr.org/t/addgroup-usermod-partiel/87126 "2022-09-10T17:00:22Z")\
**Posts on this page:** 18\
**Page:** 1

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Septembre 10, 2022, 5:00 UTC](https://www.debian-fr.org/t/addgroup-usermod-partiel/87126/1 "2022-09-10T17:00:22Z")

</div>

Bonjour,  
dans un script je fais la commande suivante:  
`addgroup sshgroup && usermod -a -G sshgroup zargos`  
le groupe est bien créé comme je peux le voir dans les logs:

```auto
Sep 10 15:44:08 in-target: Ajout du groupe « sshgroup » (GID 1001)...
Sep 10 17:44:08 groupadd[20901]: group added to /etc/group: name=sshgroup, GID=1001
Sep 10 17:44:08 groupadd[20901]: group added to /etc/gshadow: name=sshgroup
Sep 10 17:44:08 groupadd[20901]: new group: name=sshgroup, GID=1001

```

mais la modification du user pour le mettre dans le groupe ne marche pas. Est-ce parce que le usermod a lieux alors que le addgroup n’est pas terminé?

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Septembre 10, 2022, 5:32 UTC](https://www.debian-fr.org/t/addgroup-usermod-partiel/87126/2 "2022-09-10T17:32:27Z")

</div>

Bonjour

C’est sans doute parce que tu n’as pas fermé et ré-ouverte la session ou le login shell du compte utilisateur _zargos_, ce qui fait que la modification concernant ce compte utilisateur n’a pas encore pu être prise en compte.

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Septembre 10, 2022, 8:38 UTC](https://www.debian-fr.org/t/addgroup-usermod-partiel/87126/3 "2022-09-10T20:38:57Z")

</div>

Malheureusement non. C’est un script de post-installation dans un dvd d’install créé par simple-cdd (755 lignes sans les lignes vides et les lignes de commentaires).  
La commande n’est pas lancée dans un shell utilisateur. d’ailleurs, la session utilisateur n’a jamais été ouverte au lancement du script.

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Septembre 10, 2022, 9:09 UTC](https://www.debian-fr.org/t/addgroup-usermod-partiel/87126/4 "2022-09-10T21:09:16Z")

</div>

Comment est créé le compte utilisateur **zargos**?

Est-ce que la commande ajoutant le compte utilisateur **zargos** dans la liste des comptes utilisateurs du groupe **sshgroup** est bien lancée après que le compte utilisateur **zargos** a été créé. ?

Si le compte utilisateur `zargos` et/ou le groupe `sshgroup` n’existe(nt) pas encore  
la commande `usermod -a -G sshgroup zargos` retournera un code d’erreur N°`6`

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Septembre 10, 2022, 10:52 UTC](https://www.debian-fr.org/t/addgroup-usermod-partiel/87126/5 "2022-09-10T22:52:43Z")

</div>

> [@anon29980398](#):
>
> Si le compte utilisateur `zargos` et/ou le groupe `sshgroup` n’existe(nt) pas encore

si tu regarde bien la commande, je créé le groupe avant.  
le compte utilisateur lui est créé par le preseed, donc bien avant le lancement du script de postinstallation

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Septembre 11, 2022, 6:05 UTC](https://www.debian-fr.org/t/addgroup-usermod-partiel/87126/6 "2022-09-11T06:05:24Z")

</div>

La commande `usermod` ne fonctionne pas dans ce contexte,  
mais la commande `sed` fonctionnera :

```nohighlight
 addgroup sshgroup && sed -i '/^sshgroup/s/:$/:zargos/' /etc/group

```

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Septembre 11, 2022, 11:20 UTC](https://www.debian-fr.org/t/addgroup-usermod-partiel/87126/7 "2022-09-11T11:20:19Z")

</div>

> [@Zargos](#):
>
> le compte utilisateur lui est créé par le preseed, donc bien avant le lancement du script de postinstallation

Le compte utilisateur est effectivement créé (dans le système cible) à la fin de l’installation, donc à quel moment précis ton script est exécuté.

> [@anon29980398](#):
>
> la commande `sed` fonctionnera

Comme tu t’en es rendu compte, l’action est différente (ajout de virgule) selon qu’il y a déjà un autre membre ou pas.

Question bête : apparemment tout ça est exécuté sur le système hôte via la commande `in-target` de l’installateur (qui fait grosso modo un chroot). Comment sont gérés les opérateurs du shell comme && dans ce contexte ?

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Septembre 11, 2022, 11:36 UTC](https://www.debian-fr.org/t/addgroup-usermod-partiel/87126/8 "2022-09-11T11:36:29Z")

</div>

> [@PascalHambourg](#):
>
> … Comme tu t’en es rendu compte, …

Oui, juste avant que tu ne rédige ton message.

* * *

> [@PascalHambourg](#):
>
> … Comment sont gérés les opérateurs du shell comme && dans ce contexte ?

Je n’ai pas pu voir toutes les lignes du script  
mais je suppose que si [**Zargos**](https://www.debian-fr.org/u/Zargos) avait utilisé cette syntaxe, c’est que son script était interprété par `bash`

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Septembre 11, 2022, 11:52 UTC](https://www.debian-fr.org/t/addgroup-usermod-partiel/87126/9 "2022-09-11T11:52:48Z")

</div>

> [@anon29980398](#):
>
> je suppose que si [**Zargos**](https://www.debian-fr.org/u/Zargos) avait utilisé cette syntaxe, c’est que son script était interprété par `bash`

Mais quel bash ? Celui du système cible ou celui de l’installateur (qui est en fait l’interpréteur `ash` de busybox) ?

---

<div class="post-metadata">

**Author:** ![anon29980398](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/f4b2a3/32.png) [@anon29980398](https://www.debian-fr.org/u/anon29980398)\
**Post date:** [Septembre 11, 2022, 1:01 UTC](https://www.debian-fr.org/t/addgroup-usermod-partiel/87126/10 "2022-09-11T13:01:48Z")

</div>

Comme je l’écrivais dans mon précédent message, n’ayant pu voir le script en entier, je ne peux pas savoir si c’est le shell `bash` ou `ash` ou un autre shell qui va interpréter cette ligne de commandes.

Il faudrait demander à [**Zargos**](https://www.debian-fr.org/u/Zargos) puisque c’est lui qui avait utilisé dans son script post-installation la commande `&&` entre un `addgroup` et un `usermod` :

> [@Zargos](#):
>
> … C’est un script de post-installation dans un dvd d’install créé par simple-cdd (755 lignes sans les lignes vides et les lignes de commentaires).

* * *

C’est dans [ce fil de discussion](https://stackoverflow.com/questions/68617485/add-user-to-group-without-restart-in-deb-postinstall) que j’ai appris que la commande `usermod` ne pouvait pas fonctionner dans un script `postinst`

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Septembre 11, 2022, 1:48 UTC](https://www.debian-fr.org/t/addgroup-usermod-partiel/87126/11 "2022-09-11T13:48:35Z")

</div>

Si je comprends bien le fil en question, il ne s’agit pas d’un script exécuté par l’installateur Debian comme ici mais du script de post-installation d’un paquet. Et le problème n’est pas lié à la commande usermod mais à la commande newgrp qui lance un nouveau shell interactif avec le groupe spécifié, ce qui est une grosse connerie au milieu de l’installation d’un paquet. Accessoirement, la commande usermod évoquée est aberrante : jamais un script de paquet ne devrait utiliser une variable d’environnement de sudo ou toute autre variable d’environnement liée à l’utilisateur qui a lancé la commande. Où va-t-on si les paquets se comportent différemment selon l’utilisateur qui les installe ?

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Septembre 11, 2022, 11:24 UTC](https://www.debian-fr.org/t/addgroup-usermod-partiel/87126/12 "2022-09-11T23:24:55Z")

</div>

> [@PascalHambourg](#):
>
> Le compte utilisateur est effectivement créé (dans le système cible) à la fin de l’installation, donc à quel moment précis ton script est exécuté.

bien après, quand tout le presed est terminé et que le grub est installé.

> [@PascalHambourg](#):
>
> Comme tu t’en es rendu compte, l’action est différente (ajout de virgule) selon qu’il y a déjà un autre membre ou pas.

Comme c’est l’installation, il n’y a qu’un seul user configuré.

> [@PascalHambourg](#):
>
> Question bête : apparemment tout ça est exécuté sur le système hôte via la commande `in-target` de l’installateur (qui fait grosso modo un chroot). Comment sont gérés les opérateurs du shell comme && dans ce contexte ?

dans mono postinst, j’en ai à priori d’autres qui fonctionnent.  
donc je pense que MucP a raison, usermod ne fonctionne pas dans ce contexte, donc il me suffit de modifier le fichier avec sed.

> [@PascalHambourg](#):
>
> Mais quel bash ? Celui du système cible ou celui de l’installateur (qui est en fait l’interpréteur `ash` de busybox) ?

Celui du système cible, car j’utilise des fonctions ou des programmes qui ne sont pas dans l’installeur, comme ipcalc-ng.  
le script postinst est en `#!/bin/bash`  
je l’aurais bien mis, mais il fait près d’un millier de lignes.

je vais remplacer usermod par:

```auto
sed -Ei 's/^(sshgroup.*)/\1zargos/' /etc/group

```

me reste plus qu’à finir la refonte de script de construction d’ISO simple-cdd.

car j’utilise des bout de fichiers de conf (pour éviter d’avoir à modifier tous mes profils si le même bloc est modifié. chaque profil a un fichier de conf qui liste, pour chaque fichier simple-cdd ls blocs de fichiers de conf utilisés.  
Un fois tous les fichiers construits (extra, udebs, preinst, preseed, postinst, downloads, packages) il lance la commande build-simple-cdd qui va bien, et ensuite il fait une synchronisation de l’iso et des fichiers de confs sur mon NAS pour sauvegarder la version de la config.

me reste plus que la gestion des arguments de lancements du script 🙂

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Septembre 11, 2022, 11:59 UTC](https://www.debian-fr.org/t/addgroup-usermod-partiel/87126/13 "2022-09-11T23:59:53Z")

</div>

> [@Zargos](#):
>
> bien après, quand tout le presed est terminé et que le grub est installé.

Bien après quoi ? La création effective de l’utilisateur a lieu lors de la finalisation de l’installation, après l’installation de GRUB.

> [@Zargos](#):
>
> dans mono postinst,

C’est quoi «&nbsp;mono postinst&nbsp;» ? Le script debian/postinst d’un paquet «&nbsp;mono&nbsp;» ?

> [@Zargos](#):
>
> donc je pense que MucP a raison, usermod ne fonctionne pas dans ce contexte

Je pense qu’il se trompe et qu’il a mal lu le fil de discussion auquel il se réfère.

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Septembre 12, 2022, 9:56 UTC](https://www.debian-fr.org/t/addgroup-usermod-partiel/87126/14 "2022-09-12T09:56:59Z")

</div>

> [@PascalHambourg](#):
>
> Bien après quoi ? La création effective de l’utilisateur a lieu lors de la finalisation de l’installation, après l’installation de GRUB.

le grub est installé avant le postinst et lors du postinst je peux constater que l’utilisateur zargos est bien existant.

> [@PascalHambourg](#):
>
> C’est quoi « mono postinst » ? Le script debian/postinst d’un paquet « mono » ?

**mon** postinst, desolé faute de frappe.

> [@PascalHambourg](#):
>
> Je pense qu’il se trompe et qu’il a mal lu le fil de discussion auquel il se réfère.

possible, en tout cas, le passage par sed fonctionne alors que usermod ne fonctionne pas. ce qui au final lui donne raison

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Septembre 12, 2022, 11:22 UTC](https://www.debian-fr.org/t/addgroup-usermod-partiel/87126/15 "2022-09-12T11:22:35Z")

</div>

> [@Zargos](#):
>
> le grub est installé avant le postinst

Peu importe puisque GRUB est installé avant l’étape «&nbsp;Terminer l’installation&nbsp;» au cours de laquelle l’utilisateur est créé. Ce n’est donc pas une référence pertinente.

> [@Zargos](#):
>
> je peux constater que l’utilisateur zargos est bien existant.

Comment le constates-tu ?  
Un indice indirect est le GID 1001 attribué au nouveau groupe «&nbsp;sshgroup&nbsp;» : cela signifie que 1000 est déjà attribué, en principe au groupe personnel du premier utilisateur créé si aucun groupe utilisateur n’a été créé auparavant.

> [@Zargos](#):
>
> usermod ne fonctionne pas dans ce contexte

Je viens de tester manuellement dans l’installateur avec `in-target` : `usermod` fonctionne très bien après que l’utilisateur et le groupe ont été créés.

```
in-target usermod -a -G sshgroup zargos

```

J’ai aussi testé que ta double commande avec && exécutée par `bash` lancé par `in-target` fonctionne comme prévu une fois que l’utilisateur a été créé.

```
in-target bash -c "addgroup sshgroup && usermod -a -G sshgroup zargos"

```

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Septembre 12, 2022, 11:55 UTC](https://www.debian-fr.org/t/addgroup-usermod-partiel/87126/16 "2022-09-12T11:55:10Z")

</div>

> [@PascalHambourg](#):
>
> Comment le constates-tu ?  
> Un indice indirect est le GID 1001 attribué au nouveau groupe « sshgroup » : cela signifie que 1000 est déjà attribué, en principe au groupe personnel du premier utilisateur créé si aucun groupe utilisateur n’a été créé auparavant.

je profite de aideinit pour verifier les fichier /etc/group et /etc/password, et le user et les groupes y sont bien

> [@PascalHambourg](#):
>
> Peu importe puisque GRUB est installé avant l’étape « Terminer l’installation » au cours de laquelle l’utilisateur est créé. Ce n’est donc pas une référence pertinente.

Quoique tu en pense quand dans le preseed il arrive à la fin de l’installation le postinst a été réalisé.

> [@PascalHambourg](#):
>
> Je viens de tester manuellement dans l’installateur avec `in-target` : `usermod` fonctionne très bien après que l’utilisateur et le groupe ont été créés.
> 
> ```auto
> in-target usermod -a -G sshgroup zargos
> 
> ```

Ca fonctionne en effet. Ca ne marchait pas avant, j’ai avoir une modification ailleurs qui a impacté la commande.  
dans le cadre du fichier de postinst, tu ne précise pas le in-target dans le script.  
d’aileurs, il y a des commandes impossible à faire via le preseed et late\_command alors qu’elles passent dans le postinst.

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Septembre 12, 2022, 12:12 UTC](https://www.debian-fr.org/t/addgroup-usermod-partiel/87126/17 "2022-09-12T12:12:24Z")

</div>

> [@Zargos](#):
>
> je profite de aideinit pour verifier les fichier /etc/group et /etc/password, et le user et les groupes y sont bien

Alors il n’y a aucune raison que `usermod` ne fonctionne pas.

> [@Zargos](#):
>
> Quoique tu en pense quand dans le preseed il arrive à la fin de l’installation le postinst a été réalisé.

Je ne dis pas le contraire, je dis seulement que l’installation de GRUB que tu as évoquée comme référence pour ton preseed n’est pas une référence valable pour la création de l’utilisateur et qu’on ne peut donc en tirer aucune conclusion.

> [@Zargos](#):
>
> dans le cadre du fichier de postinst, tu ne précise pas le in-target dans le script.

Visiblement c’est tout le script qui est exécuté par `in-target` sinon la construction avec && ne fonctionnerait pas.

> [@Zargos](#):
>
> d’aileurs, il y a des commandes impossible à faire via le preseed et late\_command

Ces actions sont effectuées dans le contexte de l’installateur ou du système cible ?

---

<div class="post-metadata">

**Author:** ![Zargos](https://www.debian-fr.org/user_avatar/www.debian-fr.org/zargos/32/10889_2.png) [@Zargos](https://www.debian-fr.org/u/Zargos)\
**Post date:** [Septembre 12, 2022, 1:32 UTC](https://www.debian-fr.org/t/addgroup-usermod-partiel/87126/18 "2022-09-12T13:32:53Z")

</div>

> [@PascalHambourg](#):
>
> Ces actions sont effectuées dans le contexte de l’installateur ou du système cible ?

je pense que c’est parce que le preseed est dans l’environnement installer, alors que le postinst est dans le contexte cible.
