Правильный способ добавить учетную запись пользователя через скрипт bash

15

Вот код скрипта, который я сейчас использую:

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"

Этот подход хорошо работает на openSuse. Но есть несколько проблем с учетной записью пользователя, которую он создает в Ubuntu, поэтому я ищу здесь помощь.

  • подсказка терминала не установлена ​​( echo $PS1ничего не возвращает)
  • клавиши со стрелками и клавиши табуляции не работают правильно в терминале
  • кажется, пароль не работает (хотя мне все еще неясно, что именно это за проблема)
  • права / etc / sudoers, установленные для этого нового пользователя, не соблюдаются

Если вместо этого я создаю пользователя вручную adduser(вместо useradd), у меня нет этих проблем в Ubuntu. Но я не могу использовать adduserна openSuse (afaik). Поэтому мне нужен не-Debian-эксклюзивный скрипт или метод добавления учетных записей пользователей через мой bash-скрипт, который работает в Ubuntu (и не перестает работать в других дистрибутивах).

Наконец, я хотел бы понять разницу между adduserи useradd. Например, я хочу знать, какой каталог каркаса используется, adduserпоскольку это может быть причиной того, что useraddон не работает должным образом (потому что я только что принял значение по умолчанию).

Благодарность

MountainX-для-Моника
источник
1
Отличие: от man-страницы useradd ( man useradd): useradd - утилита низкого уровня для добавления пользователей. В Debian администраторы обычно должны использовать вместо этого adduser (8).
Гюнтберт
Кроме того, sudo su -c "cmd arg1 arg2"эквивалентно sudo cmd arg1 arg2.
энзотиб
@enzotib спасибо. Полезно знать, что они эквивалентны в Ubuntu, потому что они не в openSuse. Поэтому я буду продолжать использовать его sudo su -c "cmd arg1 arg2"так, чтобы он работал везде, где мне нужно, чтобы он работал.
MountainX-for-Monica
adduserэто Perl- скрипт длиной более 1000 строк, поэтому для различий вы можете взглянуть на скрипт.
энзотиб
@enzotib Да, я читал, adduserно я не знаю Perl. Так что это не очень хороший подход для меня.
MountainX-for-Monica

Ответы:

14

Мое решение было представлено здесь: /unix/82923/proper-way-to-add-a-user-account-via-bash-script по Ульриху Шварцу и Джозеф Р. . Главное, что мне нужно было сделать, это добавить -s /bin/bashк существующей useraddкоманде и удалить, -p passwordкоторая ожидает зашифрованный пароль.

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

Затем сделайте это:

sudo chpasswd << 'END'
mynewuser:password
END
MountainX-для-Моника
источник
6
echo mynewuser:password | sudo chpasswdтоже работает
Феликс Рабе
10

Это будет работать

sudo adduser myuser --gecos "First Last,RoomNumber,WorkPhone,HomePhone" --disabled-password
echo "myuser:password" | sudo chpasswd
Анкур Девани
источник
Это более простое решение, чем принятый ответ.
Стивен
2

мой скрипт, который автоматически создает учетную запись службы с логином ssh и без пароля

#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
Jasons
источник
К вашему сведению, после использования моего скрипта я вижу, что «sudo» в значительной степени бесполезен для служебной учетной записи, так как отсутствие пароля означает, что он не может использовать sudo. Вы можете настроить его, чтобы разрешить sudo без пароля через visudo, но я не знаю, как автоматизировать это в скрипте. Кроме того, вероятно, служебная учетная запись с sudo без пароля не является хорошей идеей (безопасности).
Джейсон
0

Я полагаю, вы можете просто использовать условие в вашем скрипте, что-то вроде

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

(невозможно проверить, присутствует ли файл /etc/issueв OpenSUSE, в противном случае вы можете поставить условие существования такого файла).

enzotib
источник
Почему бы просто не проверить существование adduserс if command -v adduser >/dev/null; thenили нравится? Это единственное, что имеет значение, а не основные дистрибутивы. Кроме того, есть и другие дистрибутивы, кроме Debian / Ubuntu и OpenSUSE.
Дэвид Фёрстер