web-dev-qa-db-fra.com

Moyen approprié pour ajouter un compte d'utilisateur via un script bash

Voici le code de script que j'utilise maintenant:

getent group $MYGROUP
if [ $? -ne 0 ] ; then
    Sudo su -c "groupadd $MYGROUP"
fi
Sudo su -c "useradd mynewuser -p mypassword -m -g $PRIMARYGRP -G $MYGROUP"

Cette approche fonctionne bien sur openSuse. Mais il y a plusieurs problèmes avec le compte utilisateur créé sur Ubuntu , je cherche donc de l'aide ici.

  • l'invite du terminal n'est pas définie (echo $PS1 ne renvoie rien)
  • les touches fléchées et la touche de tabulation ne fonctionnent pas correctement dans le terminal
  • le mot de passe ne semble pas fonctionner (bien que le problème ne soit toujours pas clair)
  • les droits/etc/sudoers définis pour ce nouvel utilisateur ne sont pas respectés

Si au lieu de cela je crée manuellement l'utilisateur avec adduser (au lieu de useradd), je n'ai pas ces problèmes sur Ubuntu. Mais je ne peux pas utiliser adduser sur openSuse (autant que je sache). Par conséquent, j'ai besoin d'un script non exclusif à Debian ou d'une méthode d'ajout de comptes utilisateur via mon script bash qui fonctionne sous Ubuntu (et ne cesse pas de fonctionner sur d'autres distributions).

Enfin, j'aimerais comprendre les différences entre adduser et useradd. Par exemple, je veux savoir quel répertoire de squelette est utilisé par adduser car cela pourrait être la raison pour laquelle useradd ne fonctionne pas comme prévu (car je viens d'accepter la valeur par défaut).

Merci

14
MountainX

Ma solution a été fournie ici: https://unix.stackexchange.com/questions/82923/proper-way-to-add-a-user-account-via-bash-script par lrich Schwarz et Joseph R. . La principale chose à faire était d’ajouter -s /bin/bash à ma commande useradd existante et de supprimer -p password qui attend un mot de passe chiffré.

Sudo su -c "useradd mynewuser -s /bin/bash -m -g $PRIMARYGRP -G $MYGROUP"

Alors fais ceci:

Sudo chpasswd << 'END'
mynewuser:password
END
12
MountainX

Cela fonctionnera.

Sudo adduser myuser --gecos "First Last,RoomNumber,WorkPhone,HomePhone" --disabled-password
echo "myuser:password" | Sudo chpasswd
7
Ankur Devani

mon script qui construit automatiquement un compte de service avec la connexion ssh et aucun mot de passe

#add service group/user
addgroup service-runner
useradd devops-service --create-home --Shell /bin/bash --groups service-runner
#gpasswd -a devops-service Sudo #allowing Sudo requires password, and not a good idea for a service account.
mkdir /home/devops-service/.ssh
chmod 700 /home/devops-service/.ssh
cat [email protected] >> /home/devops-service/.ssh/authorized_keys
chown devops-service:devops-service /home/devops-service -R
2
JasonS

Je suppose que vous pouvez simplement utiliser une condition dans votre script, quelque chose comme

if grep -q 'Ubuntu\|Debian' /etc/issue; then
    adduser .....
else
    useradd .....
fi

(impossible de vérifier si le fichier /etc/issue est présent sur OpenSUSE, sinon vous pouvez poser la condition à l'existence d'un tel fichier).

0
enzotib