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


15

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 qu'il crée sur Ubuntu donc je cherche de l'aide ici.

  • l'invite du terminal n'est pas définie ( echo $PS1ne 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 je ne sache pas exactement de quoi il s'agit)
  • 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 l'utiliser addusersur openSuse (afaik). Par conséquent, j'ai besoin d'un script ou d'une méthode non exclusive à Debian pour ajouter des comptes d'utilisateurs via mon script bash qui fonctionne sur Ubuntu (et qui ne cesse de fonctionner sur d'autres distributions).

Enfin, je voudrais comprendre les différences entre adduseret useradd. Par exemple, je veux savoir quel répertoire squelette est utilisé addusercar cela pourrait être la raison useraddpour laquelle cela ne fonctionne pas comme prévu (car j'ai juste accepté la valeur par défaut).

Merci


1
Quant à la différence: depuis la page de manuel useradd ( man useradd): useradd est un utilitaire de bas niveau pour ajouter des utilisateurs. Sur Debian, les administrateurs devraient généralement utiliser adduser (8) à la place.
guntbert

Est également sudo su -c "cmd arg1 arg2"équivalent à sudo cmd arg1 arg2.
enzotib

@enzotib merci. Bon à savoir que ceux-ci sont équivalents sur Ubuntu car ils ne sont pas sur openSuse. Par conséquent, je continuerai à l'utiliser sudo su -c "cmd arg1 arg2"pour qu'il fonctionne partout où j'en ai besoin pour fonctionner.
MountainX-for-Monica

adduserest un script Perl de plus de 1000 lignes, donc pour les différences, vous pouvez jeter un œil au script.
enzotib

@enzotib Oui, j'ai lu addusermais je ne connais pas perl. Ce n'est donc pas une bonne approche pour moi.
MountainX-for-Monica

Réponses:


14

Ma solution a été fournie ici: /unix/82923/proper-way-to-add-a-user-account-via-bash-script par Ulrich Schwarz et Joseph R .. La principale chose que je devais faire était d'ajouter -s /bin/bashà ma useraddcommande existante et de supprimer -p passwordce qui attend un mot de passe crypté.

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

Ensuite, faites ceci:

sudo chpasswd << 'END'
mynewuser:password
END

6
echo mynewuser:password | sudo chpasswdfonctionne aussi.
Felix Rabe

10

Cela fonctionnera.

sudo adduser myuser --gecos "First Last,RoomNumber,WorkPhone,HomePhone" --disabled-password
echo "myuser:password" | sudo chpasswd

C'est une solution plus simple que la réponse acceptée.
Steven

2

mon script qui construit automatiquement un compte de service avec une connexion par clé 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 devops-service@v2-20150312.pub >> /home/devops-service/.ssh/authorized_keys
chown devops-service:devops-service /home/devops-service -R

fyi, après avoir utilisé mon script, je vois que "sudo" est à peu près inutile avec le compte de service, car aucun mot de passe ne signifie qu'il ne peut pas utiliser sudo. Vous pouvez le configurer pour autoriser sudo sans mot de passe via visudo mais je ne sais pas comment automatiser cela dans un script. De plus, un compte de service sans sudo sans mot de passe n'est probablement pas une bonne idée (de sécurité).
JasonS

0

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

(ne peut pas vérifier si le fichier /etc/issueest présent sur OpenSUSE, sinon vous pouvez mettre la condition sur l'existence d'un tel fichier).


Pourquoi ne pas simplement tester l'existence de adduserwith if command -v adduser >/dev/null; thenou de likes? C'est la seule chose qui compte et non les distributions sous-jacentes. Il existe également d'autres distributions que Debian / Ubuntu et OpenSUSE.
David Foerster
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.