LINUX.ORG.RU

BASH создание пользователя из скрипта


0

1

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

#Create xuser
PFILE=/etc/passwd
#PASSWD="nopasswd"
if [ -e $PFILE ]; then
        PLINE=$(grep -c xuser $PFILE)
        echo $PLINE
if [ $PLINE==0 ]; then
        echo "Создаю пользователя xuser\n";
        XUSER=xuser
        XHOME=/home/xuser
        echo "Введите пароль для пользователя xuser:\n"
        echo "В целях безопасности вводите пароль достаточной сложности: не менее 8 символов, содержащий буквы верхнего и нижнего регистра";
        stty -echo
        read PASSWD
        echo "Повторите пароль для пользователя xuser:\n"
        stty -echo
        read REPASSWD
        stty echo
        if [ $PASSWD == $REPASSWD ]; then
        /usr/sbin/useradd -G users,cdrom,floppy,audio,video,plugdev,users,lp -s /bin/shell -p $PASSWD -d $XHOME $XUSER
        else
        echo "Пароли не совпадают";
        fi
else echo "Пользователь $XUSER уже зарегестрирован в вашей системе"
fi
fi
Не выполняется условие на сущестование пользователя в системе if [ $PLINE==0 ] и еще как обязать вводить пароль необходимой мне длины?

★★★★★

Для начала внимательно читаем man useradd:

-p passwd The encrypted password as returned by crypt(3).

akk ★★★★★
()
Ответ на: комментарий от splinter

Я не понял этой фразы.

Объясняю: ты передаешь в useradd тот пароль, что пользователь ввёл с клавиатуры. Ты же не думаешь, что пользователь введёт уже зашифрованный пароль?

akk ★★★★★
()

grep -c xuser $PFILE

А за это надо руки отрывать. А если в системе есть пользователь 'abcxuser'? Правильно так:

grep -c '^xuser:' $PFILE'

if [ $PASSWD == $REPASSWD ]

Это тоже. А если юзер ввёл пустой пароль? Скрипт вылетит с ошибкой. Правильно так:

if [ "$PASSWD" = "$REPASSWD" ]

if [ $PLINE==0 ]

Здесь тоже нужны кавычки на всякий случай и '-eq' для сравнения чисел:

if [ "$PLINE" -eq 0 ]

gentoo_root ★★★★★
()
Ответ на: комментарий от akk

Ты же не думаешь, что пользователь введёт уже зашифрованный пароль?

Разве useradd воспринимает только шифрованные пароли? это новость. :-) век живи век учись. Надо как то привязать mkpasswd или использовать какой то алгоритм для передачи хеша пароля?

splinter ★★★★★
() автор топика
Ответ на: комментарий от splinter

Разве useradd воспринимает только шифрованные пароли? это новость. :-)


Я же говорю: внимательно читаем ман. А еще четыре звезды...

Надо как то привязать mkpasswd


man chpasswd

akk ★★★★★
()
Ответ на: комментарий от akk

А еще четыре звезды...


звезды ничего не значат.

splinter ★★★★★
() автор топика

getent passwd $username >/dev/null && echo «$usename already exists!» || adduser $username

AITap ★★★★★
()
Ответ на: комментарий от gentoo_root

от perl еще не успел отойти, мешанина в голове.

splinter ★★★★★
() автор топика
echo "root:${rootpwd}:0:0:root:/root:/bin/bash" > ${targetdir}/tmp/usersfile
chroot ${targetdir} /usr/sbin/newusers -c SHA256 /tmp/usersfile
rm -f ${targetdir}/tmp/usersfile
YAR ★★★★★
()
Ответ на: комментарий от splinter

внезапно: создание пользователя из скрипта. Пароль - plaintext'ом. newusers конвертит созданный файлик с юзерами в нужный формат (т.е., шифрует пароли, распихивает данные в /etc/{passwd,shadow} и т.п.)

YAR ★★★★★
()
Ответ на: комментарий от akk

Может и прокатит - я просто вытащил строчки из одного своего старого скрипта. Там создавалось несколько пользователей, потом они обрабатывались через newuser в чруте

YAR ★★★★★
()
Ответ на: комментарий от gentoo_root

Ну и набыдлокодил я :-)

#Create xuser
PFILE=/etc/passwd
#PASSWD="nopasswd"
xuseraction() {
/usr/sbin/useradd -G users,cdrom,floppy,audio,video,plugdev,users,lp -s /bin/shell -p $PASSWD -d $XHOME $XUSER
}
xuseradd() {
 echo "Создаю пользователя xuser"
        XUSER=xuser
        XHOME=/home/xuser
        echo "Введите пароль для пользователя xuser:"
        echo "В целях безопасности вводите пароль достаточной сложности: не менее 8 символов, содержащий буквы верхнего и нижнего регистра";
        stty -echo
        read PASSWD
        echo "Повторите пароль для пользователя xuser:"
        stty -echo
        read REPASSWD
        stty echo
}

if [ -e $PFILE ]; then
        PLINE=$(grep -c '^xuser:' $PFILE)
        echo $PLINE

                if [ "$PLINE" -eq 0 ]; then
        while [ "$PLINE" -eq 0 ]
do
        xuseradd
        if [ "$PASSWD" = "$REPASSWD" ]; then
        xuseraction
        PLINE=$(grep -c '^xuser:' $PFILE)
        else
        echo "================================================================="
        echo "Пароли не совпадают"
        echo "================================================================="
        fi
done
else echo "Пользователь $XUSER уже зарегестрирован в вашей системе"
                fi
fi
Как бы теперь шифрованный пароль передавать, конструкции а-ля md5($passwd) не подходят?

splinter ★★★★★
() автор топика
Ответ на: комментарий от splinter

>Как бы теперь шифрованный пароль передавать

А просто создать пользователя без пароля через useradd, а потом вызвать 'passwd xuser', чтобы пользователь ввёл пароль, не подходит?

gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root

можно конечно, но хотелось сделать через параметры $PASSWD.

splinter ★★★★★
() автор топика
Ответ на: комментарий от splinter

Блин, чего казалось бы проще? Делай раз: cоздать юзера без пароля. Делай два: задать только что созданному юзеру пароль.

Задать пароль можно с помощью chpasswd:

echo "$XUSER:$PASSWORD" | chpasswd

Только надо ещё предусмотреть ситуацию, когда в пароле допускается двоеточие.

akk ★★★★★
()
Ответ на: комментарий от splinter

> Как бы теперь шифрованный пароль передавать, конструкции а-ля md5($passwd) не подходят?

неа не прокатило.


Чем не устраивает первый вариант с newusers?

YAR ★★★★★
()
Ответ на: комментарий от splinter

Да не надо паранойи. Чрут тут ещё зачем-то...

akk ★★★★★
()

use pwgen, Luke! и таки да

-p password
       Specifies an already-encrypted password for the new user.

итого:

PLAINPWD=$(pwgen 8 1)
PASSWD=$(mkpasswd -m md5 $PLAINPWD)
echo "Your Password is:" $PLAINPWD

а по-поводу первого вопроса:

if ! id $USER > /dev/null 2>&1 ; then
        # ...
fi

beastie ★★★★★
()
Ответ на: комментарий от splinter

Да не надо чрут, я ж писал - это пример из моего старого скрипта. Ключевая команда: newusers.

YAR ★★★★★
()
Ответ на: комментарий от beastie

mkpasswd -m md5 $PLAINPWD


Это аналогично md5pass ?

splinter ★★★★★
() автор топика
Ответ на: комментарий от splinter

так поставь, про md5pass ниразу не слышал. mkpasswd есть в default install.

beastie ★★★★★
()
Ответ на: комментарий от beastie

Спасибо! код:

#Create xuser
PFILE=/etc/passwd
xuseraction() {
/usr/sbin/useradd -G users,cdrom,floppy,audio,video,plugdev,users,lp -s /bin/bash -p $MD5PASS -d $XHOME $XUSER
}
xuseradd() {
 echo "Создаю пользователя xuser"
        XUSER=xuser
        XHOME=/home/xuser
        echo "Введите пароль для пользователя xuser:"
        echo "В целях безопасности вводите пароль достаточной сложности: не менее 8 символов, содержащий буквы верхнего и нижнего регистра";
        stty -echo
        read PASSWD
        echo "Повторите пароль для пользователя xuser:"
        stty -echo
        read REPASSWD
        stty echo
}

if [ -e $PFILE ]; then
        PLINE=$(grep -c '^xuser:' $PFILE)
        echo $PLINE

                if [ "$PLINE" -eq 0 ]; then
        while [ "$PLINE" -eq 0 ]
do
        xuseradd
        if [ "$PASSWD" = "$REPASSWD" ]; then
        MD5PASS=$(/usr/bin/mkpasswd -m md5 $PASSWD)
        xuseraction
        PLINE=$(grep -c '^xuser:' $PFILE)
        else
        echo "================================================================="
        echo "Пароли не совпадают"
        echo "================================================================="
        fi
done
else echo "Пользователь $XUSER уже зарегестрирован в вашей системе"
                fi
fi
Куда лучше вставить
MD5PASS=$(/usr/bin/mkpasswd -m md5 $PASSWD)
в функцию useraction или оствить как есть?

splinter ★★★★★
() автор топика

а вообще то ты фигнёй маешся. аналог твоей поделки уже есть в системе и зовётся adduser.

beastie ★★★★★
()

вот кусок моего скрипта для автоматического создания пользователей на сервере:
[quote]
# make pass
PASS=`/usr/bin/pwgen -s1 10` #generate pass(10 symbols)
echo $PASS >$PSWF #файл лежащий хз где и «root:root 600»
echo $PASS >>$PSWF

# make user account
useradd -m $USER -d $HOMEROOT/$USER -s /bin/false
cat $PSWF | passwd $USER 2>/dev/null
[/quote]

S_Paul ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.