URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 50152
[ Назад ]

Исходное сообщение
"Надоело мне руками добавлять юзверей в домен и написал я скр..."

Отправлено Makc2K , 04-Ноя-04 15:56 
Скрипт очень простой (кроме рег. выр.) и расчитан на новичков. Суть работы проста. Делаем текстовый файл, где 1 колонка "имя пользователя/машины", 2 "uid", 3 "gid". У машин не создается кат. пользователя и ни у кого не создается shell. Пароли тоже не определяются. Я его не запускал на исполнение так как сейчас нет машины с самбой. Но все строки команд проверил echo-м.

Это скрипт:
#*********************************
if [ $# -ge 1 ]
    then
    cat $1|while read name uid gid; do
        #С помоъю регулярного выр. определяем тип записи
        #пользовательская или машинная
        perem=`expr $name : '.*\$$'`
        if [ $perem -ge 1 ]
        then
                echo "Добавляю машинную запись"
        pw useradd -n $name -u $uid -d /nonexisten -g $gid -s/sbin/nologin
        smbpasswd -a -m -N $name
        else
            echo "Добавляю пользовательскую запись"
        pw useradd -n $name -u $uid -d /home/$name -g $gid -s/sbin/nologin
        smbpasswd -a -N $name
        fi
        smbpasswd -e $name
    done
        exit 0
    else
    echo "Для работы нужен параметр имя файла"
    exit 1
fi
#*********************************
Это файл с пользователями:
#*********************************
gnom$ 2001 1010
guest 1004 1008
hrom$ 2002 1010
#*********************************

Будьте внимательны в файле с пользователями не должно быть "лишних" строк и в конце файла должен стоять символ окончания строки иначе эта запись не добавится.
Вот!


Содержание

Сообщения в этом обсуждении
"Надоело мне руками добавлять юзверей в домен и написал я скр..."
Отправлено Дмитрий Ю. Карпов , 04-Ноя-04 19:42 
1) Для борьбы с лишними строками, пустыми или содержащими только комментарий) нужно вместо `cat $1' использовать 'grep . $1' или 'grep -v "^$" $1' (что по сути одно и то же).

2) Вместо 'if', запускающего процесс, лучше использовать 'case', как это сделано во FreeBSD в файлах "/etc/rc*".

3) 'smbpasswd' умеет сам добавлять юзеров в систему, если ему прописАть параметр "скрипт добавления юзера" (не помню, как это по английски - см.'man smb.conf'); т.е. можно обойтись без 'pw ...' (хотя это спорно).

4) При наличии пароля в файле с пользователями этот пароль должен передаваться в 'smbpasswd' для задания его юзеру; есть вариант, что этот же пароль должен задаваться и в системе (для POP3-почты и т.п.). Для этого есть "скрипт установки пароля".

5) Хорошо бы не задавать каждому юзеру UID и GID, а указать один раз константу или диапазон.

6) 'echo "Для работы нужен параметр имя файла"' неправильно: скрипт должен брать данные из stdin, как это делают cat, grep, sed и прочие программы.

PS: Да не примут это за наезд на автора, но за руководству к действию по улучшению скрипта, ибо нет предела совершенству...


"Надоело мне руками добавлять юзверей в домен и написал я скр..."
Отправлено Makc2K , 04-Ноя-04 21:36 
Принято. Кроме того сейчас уже и баги обнаружил. Вместо -N в smbpasswd надо делать -n. Буду пытаться улучшить.