Создание работающего скрипта bash, который автоматически создает пользователей-администраторов в linux

Приведенный ниже сценарий - это то, что я уже пробовал, но при запуске он по-прежнему запрашивал у меня пароль пользователя и другую информацию.

#!/bin/bash

PASSWORD="somepassword"
USERNAME="default"

if id -u "$USERNAME" >/dev/null 2>&1; then
    userdel -r -f $USERNAME
    adduser --disabled-password --gecos "" $USERNAME
    usermod -a -G sudo $USERNAME
    echo $USERNAME:$PASSWORD | chpasswd

else
    adduser $USERNAME
    adduser --disabled-password --gecos "" $USERNAME 
    usermod -a -G sudo $USERNAME
    echo $USERNAME:$PASSWORD | chpasswd
fi
0
17.11.2018, 02:08
2 ответа

Оказывается, adduser отстой, если вы попытаетесь использовать его в автономном скрипте. В итоге я использовал старый добрый useradd , который полностью исправил мой сценарий ниже.

#!/bin/bash

PASSWORD="somepassword"
USERNAME="default"

if id -u "$USERNAME" >/dev/null 2>&1; then
    userdel -r -f $USERNAME
    useradd -m -p $PASSWORD -s /bin/bash $USERNAME
    usermod -a -G sudo $USERNAME
    echo $USERNAME:$PASSWORD | chpasswd

else
    useradd -m -p $PASSWORD -s /bin/bash $USERNAME
    usermod -a -G sudo $USERNAME
    echo $USERNAME:$PASSWORD | chpasswd
fi
0
28.01.2020, 04:48

Предупреждение : оставлять UN-зашифрованный пароль внутри скрипта - очень плохая идея. Если вы все же решите это сделать, по крайней мере, измените права доступа к файлу на 600 от root. Это защитит его от простых атак.

Затем:

Первая проблема, которую я вижу, заключается в том, что вы дважды вызываете adduser в части else.

Это вызовет первое выполнение, которое задаст все вопросы.
Второй вызов работает нормально.

Кроме того, существует много общих опций между частями then и else, сценарий можно записать так:

#!/bin/bash

$PassWord="somepassword"
UserName="default"

if id -u "$UserName" >/dev/null 2>&1; then
    userdel -r -f "$UserName"
fi

adduser --disabled-password --gecos "" "$UserName"
userdir=/home/"$UserName"
[[ -d $userdir ]] || mkdir "$userdir"   # only needed for system users.
                                        # which usually do not have a password.
usermod -a -G sudo "$UserName"
echo "$UserName:$PassWord" | chpasswd
1
28.01.2020, 04:48

Теги

Похожие вопросы