13

Here's the script code I'm using now:

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"

This approach works well on openSuse. But there are several problems with the user account it creates on Ubuntu so I am seeking help here.

  • the terminal prompt isn't set (echo $PS1 returns nothing)
  • the arrow keys and tab key do not work correctly in the terminal
  • the password doesn't seem to work (although I'm still unclear exactly what this issue is)
  • the /etc/sudoers rights set for this new user are not honored

If instead I manually create the user with adduser (instead of useradd) I don't have these problems on Ubuntu. But I can't use adduser on openSuse (afaik). Therefore, I need a non-Debian-exclusive script or method of adding user accounts via my bash script that works on Ubuntu (and doesn't stop working on other distros).

Finally, I would like to understand the differences between adduser and useradd. For example, I want to know which skeleton directory is used by adduser as that might be the reason useradd isn't working as expected (because I just accepted the default).

Thanks

  • 1
    As for the difference: from the useradd man page (man useradd): useradd is a low level utility for adding users. On Debian, administrators should usually use adduser(8) instead. – guntbert Jul 13 '13 at 20:24
  • Also, sudo su -c "cmd arg1 arg2" is equivalent to sudo cmd arg1 arg2. – enzotib Jul 13 '13 at 21:09
  • @enzotib thanks. Good to know those are equivalent on Ubuntu because they are not on openSuse. Therefore, I will keep using sudo su -c "cmd arg1 arg2" so that it works everywhere I need it to work. – MountainX Jul 13 '13 at 21:13
  • adduser is a perl script more than 1000 lines long, so for the differences you can take a look at the script. – enzotib Jul 13 '13 at 21:13
  • @enzotib Yes, I've been reading adduser but I don't know perl. So that's not a good approach for me. – MountainX Jul 13 '13 at 21:14
12

My solution was provided here: https://unix.stackexchange.com/questions/82923/proper-way-to-add-a-user-account-via-bash-script by Ulrich Schwarz and Joseph R.. The main thing I had to do was add -s /bin/bash to my existing useradd command and remove -p password which expects an encrypted password.

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

Then do this:

sudo chpasswd << 'END'
mynewuser:password
END
  • 6
    echo mynewuser:password | sudo chpasswd works too. – Felix Rabe May 26 '15 at 9:14
6

This will work.

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

my script which automatically constructs a service account with ssh key login and no 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
  • fyi, after using my script, I see that "sudo" is pretty much useless with the service account, as no password means it can not use sudo. You can configure it to allow no-password sudo via visudo but I don't know how to automate that in a script. Also, probably a service account with no-password sudo isn't a good (security) idea. – JasonS Mar 13 '15 at 18:40
0

I suppose you can simply use a condition in your script, something like

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

(cannot verify if the file /etc/issue is present on OpenSUSE, otherwise you can put the condition on the existence of such a file).

  • Why not simply test the existence of adduser with if command -v adduser >/dev/null; then or the likes? That's the only thing that matters and not the underlying distributions. Also, there are other distributions besides Debian/Ubuntu and OpenSUSE. – David Foerster Dec 27 '16 at 9:08

Your Answer

By clicking "Post Your Answer", you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.