Modo corretto per aggiungere un account utente tramite script bash


15

Ecco il codice dello script che sto usando ora:

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"

Questo approccio funziona bene su openSuse. Ma ci sono diversi problemi con l'account utente che crea su Ubuntu, quindi sto cercando aiuto qui.

  • il prompt del terminale non è impostato ( echo $PS1non restituisce nulla)
  • i tasti freccia e il tasto tab non funzionano correttamente nel terminale
  • la password non sembra funzionare (sebbene non sia ancora chiaro quale sia esattamente questo problema)
  • i diritti / etc / sudoers impostati per questo nuovo utente non sono onorati

Se invece creo manualmente l'utente con adduser(anziché useradd) non ho questi problemi su Ubuntu. Ma non posso usare addusersu openSuse (afaik). Pertanto, ho bisogno di uno script o di un metodo non esclusivo di Debian per aggiungere account utente tramite il mio script bash che funziona su Ubuntu (e non smette di funzionare su altre distro).

Infine, vorrei capire le differenze tra addusere useradd. Ad esempio, voglio sapere da quale directory di scheletro viene utilizzata adduserpoiché potrebbe essere il motivo per cui useraddnon funziona come previsto (perché ho appena accettato il valore predefinito).

Grazie


1
Per quanto riguarda la differenza: dalla pagina man useradd ( man useradd): useradd è un'utilità di basso livello per l'aggiunta di utenti. Su Debian, gli amministratori dovrebbero invece usare adduser (8) invece.
Guntbert,

Inoltre, sudo su -c "cmd arg1 arg2"equivale a sudo cmd arg1 arg2.
enzotib,

@enzotib grazie. Buono a sapersi quelli sono equivalenti su Ubuntu perché non sono su openSuse. Pertanto, continuerò a utilizzarlo in sudo su -c "cmd arg1 arg2"modo che funzioni ovunque abbia bisogno che funzioni.
MountainX-for-Monica,

adduserè uno script perl lungo più di 1000 righe, quindi per le differenze puoi dare un'occhiata allo script.
enzotib,

@enzotib Sì, ho letto adduserma non conosco il perl. Quindi non è un buon approccio per me.
MountainX-for-Monica,

Risposte:


14

La mia soluzione è stata fornita qui: /unix/82923/proper-way-to-add-a-user-account-via-bash-script di Ulrich Schwarz e Joseph R .. La cosa principale che dovevo fare era aggiungere -s /bin/bashal mio useraddcomando esistente e rimuovere -p passwordche si aspetta una password crittografata.

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

Quindi fai questo:

sudo chpasswd << 'END'
mynewuser:password
END

6
echo mynewuser:password | sudo chpasswdfunziona anche.
Felix Rabe,

10

Questo funzionerà.

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

Questa è una soluzione più semplice della risposta accettata.
Steven,

2

il mio script che costruisce automaticamente un account di servizio con login chiave ssh e nessuna password

#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

a proposito, dopo aver usato il mio script, vedo che "sudo" è praticamente inutile con l'account del servizio, in quanto nessuna password significa che non può usare sudo. Puoi configurarlo per consentire il sudo senza password tramite visudo ma non so come automatizzarlo in uno script. Inoltre, probabilmente un account di servizio con sudo senza password non è una buona idea (di sicurezza).
JasonS,

0

Suppongo che tu possa semplicemente usare una condizione nella tua sceneggiatura, qualcosa del genere

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

(non è possibile verificare se il file /etc/issueè presente su OpenSUSE, altrimenti è possibile impostare la condizione sull'esistenza di tale file).


Perché non semplicemente testare l'esistenza di adduserwith if command -v adduser >/dev/null; theno like? Questa è l'unica cosa che conta e non le distribuzioni sottostanti. Inoltre, ci sono altre distribuzioni oltre a Debian / Ubuntu e OpenSUSE.
David Foerster,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.