Скрипт BASH для добавления имени пользователя, пароля и нескольких групп

ПРЕДПОЛОЖЕНИЯ:

У меня есть файл с именем users.txt.

username:password:groups
user1:password:group1,group2,group3
user2:password:group3
user3:password:group1,group3
user4:password:group2,group3

КОД

#!/bin/bash
FILENAME="users.txt"

while IFS=':' read USERNAME PASSWORD GROUPS
do

    echo "USERNAME" $USERNAME "PASSWORD" $PASSWORD "GROUPS" $GROUPS

done < "$FILENAME"

Я хочу иметь возможность добавить группу пользователей, чтобы иметь возможность делиться samba. У меня есть полный список пользователей для ввода. У меня трудности в основном с группами.

Два самых больших вопроса: как получить группы как одну строку и как зашифровать пароль.

Я прошел все уроки на этом сайте, и ни один из них не работает.

Простой для понимания код действительно поможет. Спасибо.

ОБНОВЛЕН ГОТОВЫЙ РАБОЧИЙ ПРИМЕР

#!/bin/bash
# set filename
FILENAME="users.txt"

# loop through file 
while IFS=':' read USERNAME PASSWORD GROUPNAMES
do

    # add user and assign groups
    echo " "
    echo "ADDING USER: " $USERNAME
    useradd $USERNAME -G $GROUPNAMES

    # add password
    echo -e "$PASSWORD\n$PASSWORD\n" | passwd $USERNAME

    # add user to samba
    echo -e "$PASSWORD\n$PASSWORD\n" | smbpasswd -a $USERNAME

done < "$FILENAME"

person user2470057    schedule 09.07.2015    source источник
comment
Избегайте использования всех переменных в верхнем регистре, это может привести к конфликту со встроенными переменными.   -  person Jahid    schedule 09.07.2015
comment
Спасибо, у меня все работает, но я буду знать это на будущее.   -  person user2470057    schedule 09.07.2015


Ответы (3)


Не используйте GROUPS в качестве имени переменной: это переменная только для чтения, уже используемая системой. Просто измените имя этой переменной.

person yolenoyer    schedule 09.07.2015
comment
Хороший вопрос и полезный совет, но это не ответ. - person Tom Fenech; 09.07.2015
comment
@Tom Fenech Не могли бы вы объяснить мне больше, пожалуйста? Я протестировал его, он заставляет скрипт работать. Это вопрос о шифровании? - person yolenoyer; 09.07.2015
comment
О БОЖЕ МОЙ! Я так расстроен, что это было так просто! Это была проблема номер один, с которой я столкнулся, и не мог пройти мимо. СПАСИБО! - person user2470057; 09.07.2015
comment
Да, мне все еще нужно разобраться с частью шифрования, но остальную часть моего кода будет легко понять. В основном я застрял на том, почему ГРУППЫ не будут работать. - person user2470057; 09.07.2015
comment
Прошу прощения, неправильно понял вопрос. Мне было непонятно, что while read неправильно устанавливал переменные, я думал, что они спрашивали, как их использовать. +1 от меня. - person Tom Fenech; 09.07.2015
comment
@ user2470057: Я не мастер давать советы, но как новый пользователь, вы должны позаботиться о том, чтобы задавать только один вопрос за раз на этом сайте; так что вопрос о шифровании может быть еще одним новым вопросом - person yolenoyer; 09.07.2015
comment
@yolenoyer Это была комбинированная проблема, я вообще ничего не мог понять, поэтому в отчаянии я сократил свой сценарий до самой основной части, чтобы понять, в чем проблема. На этом сайте достаточно вопросов по шифрованию, которые позволят мне завершить мой код, если нет, я задам этот конкретный вопрос. Спасибо. - person user2470057; 09.07.2015

Я не уверен в части шифрования пароля, но могу дать совет по поводу групп. Внутри вашего цикла вы можете сделать это:

read -ra groups_array -d, <<<"$groups"

Теперь у вас есть массив, содержащий каждую группу в качестве элемента. Вы можете передать их как отдельные аргументы команде, используя расширение "${groups_array[@]}", или получить к ним доступ по отдельности, используя "${groups_array[0]}", "${groups_array[1]}" и т. д.

Обратите внимание, что я использую имена переменных в нижнем регистре — это сделано намеренно. Имена в верхнем регистре должны быть зарезервированы для использования оболочкой, иначе вы рискуете перезаписать важные имена.

person Tom Fenech    schedule 09.07.2015

Отличный сценарий выше: я использовал код для создания этой рабочей версии.

#!/бин/баш

Этот метод включает код bash и данные только в одном файле.

Установите этот файл, запустите его и немедленно удалите для будущего использования на новом сервере и т. д.

функция setupUser()
{

сначала удалите старый экземпляр пользователя как в Linux, так и в Samba

эхо удалить пользователя: $1 smbpasswd -d $1 userdel $1

Теперь добавьте нового пользователя как в Linux, так и в Samba.

echo добавление пользователя: $1 useradd $1 -G nogroup echo -e $2\n$2\n | пароль $1 echo -e $2\n$2\n | smbpasswd -a $1 }

#---------------------------------------------------------------------------

setupПользователь Tom Secret setupПользователь dick secret setupПользователь harry secret

person Mce    schedule 18.03.2021
comment
пожалуйста, уважайте руководство по стилю SO и соответствующим образом измените форматирование, спасибо - person Jaco; 18.03.2021