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


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він не працює так, як очікувалося (тому що я просто прийняв за замовчуванням).

Спасибі


1
Щодо різниці: зі сторінки useradd man ( man useradd): useradd - це утиліта низького рівня для додавання користувачів. У Debian адміністратори зазвичай замість цього використовують adduser (8).
guntbert

Крім того, sudo su -c "cmd arg1 arg2"еквівалентно sudo cmd arg1 arg2.
enzotib

@enzotib дякую. Приємно знати, що вони є рівнозначними для Ubuntu, оскільки вони не є на OpenSuse. Тому я буду продовжувати користуватися sudo su -c "cmd arg1 arg2"таким чином, щоб він працював скрізь, коли мені це потрібно.
MountainX

adduser- це сценарій Perl довжиною більше 1000 рядків, тому для відмінностей ви можете подивитися на сценарій.
enzotib

@enzotib Так, я читав, adduserале не знаю перл. Тож це не дуже підходить для мене.
MountainX

Відповіді:


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

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

fyi, після використання мого сценарію я бачу, що "sudo" в значній мірі марний з обліковим записом служби, оскільки жоден пароль не означає, що він не може використовувати sudo. Ви можете налаштувати це так, щоб дозволити sudo без пароля через visudo, але я не знаю, як це автоматизувати у сценарії. Також, ймовірно, обліковий запис служби з sudo без пароля не є хорошою (безпечною) ідеєю.
JasonS

0

Я припускаю, що ви можете просто використовувати умову у своєму сценарії, щось подібне

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

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


Чому б просто не перевірити існування adduserс if command -v adduser >/dev/null; thenабо подібних? Це єдине, що має значення, а не основні розподіли. Також існують інші дистрибутиви, крім Debian / Ubuntu та OpenSUSE.
Девід Фоерстер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.