20

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

11
  • 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, 2013 at 20:24
  • Also, sudo su -c "cmd arg1 arg2" is equivalent to sudo cmd arg1 arg2.
    – enzotib
    Jul 13, 2013 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, 2013 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, 2013 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, 2013 at 21:14

5 Answers 5

21

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
1
  • 9
    echo mynewuser:password | sudo chpasswd works too.
    – Felix Rabe
    May 26, 2015 at 9:14
15

This will work.

sudo adduser myuser --gecos "First Last,RoomNumber,WorkPhone,HomePhone" --disabled-password
echo "myuser:password" | sudo chpasswd
0
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 [email protected] >> /home/devops-service/.ssh/authorized_keys
chown devops-service:devops-service /home/devops-service -R
1
  • 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, 2015 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).

1
  • 2
    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. Dec 27, 2016 at 9:08
0

I hope this one-liner using here-strings may help someone:

adduser someuser --disabled-password <<< ""

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .