ПоискНавигация |
Автоматизируем создание почтовых ящиков в FreeBSDНекоторое время назад, случилось так, что мне пришлось поднимать почтовый сервер. До этого почтовым сервером для нашего подразделения занимались администраторы из головного офиса, но для того чтобы уменьшить время от подачи заявки до собственно получения почтовой учетки нужно было перевести сервис под наш контроль. Сначала я начал искать возможные бесплатные варианты для Windows. Даже вспомнил как-то один достаточно интересный вариант, но он увы к этому моменту стал стоить денег. Посреди года, никто естественно незапланированных пару килобаксов выделять не будет. Начал советоваться с ребятами из головного офиса, мол как быть и что делать. Посоветовали поставить FreeBSD, а там уже на выбор. Должен заметить, что на тот момент с *nix подобными системами я не общался. Но даже дело не в этом. Погуглил нашел сайты, материалы. Поставил на гипервизоре от Microsoft FreeBSD. Время уже поджимало и нужно было запускать почтовичок. Начал читать на тему sendmail, разобравшись - это будет слишком конечно сказано, поняв как оно работает :). Итогом стала связка sendmail+cucipop. И настало время переносить ящики пользователей со старого сервера и создавать новые. Перенести нужно было порядка 40 ящиков, и порядка 80 создать новых. После переноса первых 3 учетных записей руками переносить все остальные мне стало откровенно влом. Поэтому как говорится, "Лучше один день потерять, а потом за пять минут долететь". Получилось у меня несколько скриптов с помощью которых можно было заносить учетки скормив одному из них файл заполненный определенным образом (tomail): Фамилия1 Имя1 Отчество1 должность1 отдел1 т.городской1 т.местный1 ip1 Фамилия2 Имя2 Отчество2 должность2 отдел2 т.городской2 т.местный1 ip2 Фамилия3 Имя3 Отчество3 должность3 отдел3 т.городской3 т.местный1 ip3 ... ФамилияN ИмяN ОтчествоN должностьN отделN т.городскойN т.местныйN ipN #!/bin/sh #вроде тоже не совсем мой скриптик #автору тоже спасибо :) TMPF=tempfile EMAILF=$1 # тело письма newuser.eml sendmail="/usr/sbin/sendmail" email_to="$2" # адрес получателя "asu@local.lan" email_from="postmaster@local.lan" subject="Новому пользователю электронной почты." echo $subject > $TMPF subject=`uuencode -m $TMPF /dev/stdout | sed -n '2p;2q'` telo=`uuencode -m $EMAILF /dev/stdout | sed -e '1d'` boundary='simple boundary' ( cat <<EOF; To: $email_to From: $email_from Subject: =?koi8-r?B?$subject?= Content-Type: multipart/mixed; boundary="$boundary" This is a multi-part message in MIME format. --$boundary Content-Type: text/html; charset="koi8-r" Content-Transfer-Encoding: base64 $telo EOF ) | $sendmail -t -oi #!/bin/sh #сам скрипт не мой #выкусил из какого-то модуля, уже даже не помню где и немного дополнил #автору спасибо :) NAME="" TRANSLIT="" TRTBL_l="s/ай/ai/g; s/ей/ei/g; s/жё/zho/g; s/ий/y/g; s/ой/oi/g; s/уй/ui/g; s/чё/cho/g; s/шё/sho/g; s/щё/shcho/g; s/ый/yi/g; s/ье/ye/g; s/ъе/ye/g; s/ъи/yi/g; s/ъо/yo/g; s/й/y/g; s/щ/shch/g; s/х/kh/g; s/ч/ch/g; s/ш/sh/g; s/ё/yo/g; s/ж/zh/g; s/э/e/g; s/ц/ts/g; s/ю/yu/g; s/я/ya/g; s/ь//g" TRTBL_h="s/АЙ/ai/g; s/ЕЙ/EI/g; s/ЖЁ/ZHO/g; s/ИЙ/Y/g; s/ОЙ/OI/g; s/УЙ/UI/g; s/ЧЁ/CHO/g; s/ШЁ/sho/g; s/ЩЁ/SHCHO/g; s/ЫЙ/YI/g; s/ЬЕ/YE/g; s/ЪЕ/YE/g; s/ЪИ/YI/g; s/ЪО/YO/g; s/Й/Y/g; s/Щ/SHCH/g; s/Х/KH/g; s/Ч/CH/g; s/Ш/SH/g; s/Ё/YO/g; s/Ж/ZH/g; s/Э/E/g; s/Ц/TS/g; s/Ю/YU/g; s/Я/YA/g; s/Ь//g" translit() { local cnm cnm="$NAME" cnm=`echo -n $cnm | sed "$TRTBL_l"` cnm=`echo -n $cnm | sed "$TRTBL_h"` cnm=`echo -n $cnm | tr "абвгдезиклмнопрстуфы" "abvgdeziklmnoprstufy"` cnm=`echo -n $cnm | tr "АБВГДЕЗИКЛМНОПРСТУФЫ" "ABVGDEZIKLMNOPRSTUFY"` TRANSLIT="$cnm" } rename_file() { NAME="$1" if [ "x$NAME" != "x" ] ; then translit echo "$TRANSLIT" fi } rename_file "$1" #!/bin/sh LANG=en_EN.KOI8-U x=`tr -cd [:alnum:] < /dev/urandom | head -c13` echo $x #!/bin/sh # $1 - начальное значение UID # $2 - путь к файлу содержащему описание пользователя # Файл должен иметь следующий формат #Фамилия Имя Отчество должность кабинет телефон_город телефон_местный ip-адрес #задаем начальное значение счетчика UID пользователя iUID=$1 #Устанавливаем переменные tomail=$2 sdir=`pwd` DOMAIN=external.ru DOMAINL=local.lan SMTP=smtp.local.lan POP3=pop3.local.lan SUBJECT="Новому пользователю электронной почты" ADMIN=asu@external.ru edir=emails/ #Дирректория в которой лежат файлы-письма #Читаем строки из файла с пользователями cat $tomail | while read FNAME LNAME MNAME JOB KAB TNUMBER1 TNUMBER2 IPADDRESS do # Задаем пароль новому пользователю PASSWORD=`sh passgen.sh` # Транслируем русские имена в латиницу TFNAME=`sh translit.sh $FNAME` TLNAME=`sh translit.sh $LNAME` TMNAME=`sh translit.sh $MNAME` #Делаем логин LOGINNAME=$TFNAME"."`printf "%0.1s" $TLNAME``printf "%0.1s" $TMNAME`"-uptk" #Делаем адрес почты EMAIL=$TFNAME"."`printf "%0.1s" $TLNAME``printf "%0.1s" $TMNAME`"@"$DOMAIN EMAILL=$TFNAME"."`printf "%0.1s" $TLNAME``printf "%0.1s" $TMNAME`"@"$DOMAINL #Переводим логин и почту в нижний регистр LOGINNAME=`echo $LOGINNAME | tr A-Z a-z` EMAIL=`echo $EMAIL | tr A-Z a-z` EMAILL=`echo $EMAILL | tr A-Z a-z` LOGINNAME=`echo $LOGINNAME | head -c 16` echo $LOGINNAME #Добавляем пользователя в систему echo $LOGINNAME:$iUID:20000:russian:0:0:$FNAME $LNAME $MNAME:/home/$LOGINNAME:/bin/sh:$PASSWORD | adduser -f || exit #Добавляем пользователя в virtusertable cp /etc/mail/virtusertable vut cp vut vut.bak echo "$EMAILL $LOGINNAME" >> vut echo "$EMAIL $LOGINNAME" >> vut cp vut /etc/mail/virtusertable #Заносим в переменную текст шаблона письма MAILTEXT=`cat newuser.eml` # echo $FNAME $LNAME $MNAME $JOB $KAB $TNUMBER1 $TNUMBER2 $IPADDRESS $iUID # echo $TFNAME $TLNAME $TMNAME $LOGINNAME $PASSWORD # FULLNAM=FULLNAME #Заменяем метки в шаблоне на данные MAILTEXT=`echo $MAILTEXT | sed 's,%FULLNAME%,'"$FNAME $LNAME $MNAME"','` MAILTEXT=`echo $MAILTEXT | sed 's,%LASTNAME%,'"$LNAME"','` MAILTEXT=`echo $MAILTEXT | sed 's,%MIDLNAME%,'"$MNAME"','` MAILTEXT=`echo $MAILTEXT | sed 's,%EMAILP%,'"$EMAIL"','` MAILTEXT=`echo $MAILTEXT | sed 's,%EMAILJ%,'"$EMAIL"','` MAILTEXT=`echo $MAILTEXT | sed 's,%EMAILJ%,'"$EMAIL"','` MAILTEXT=`echo $MAILTEXT | sed 's,%EMAILJ%,'"$EMAIL"','` MAILTEXT=`echo $MAILTEXT | sed 's,%SMTP%,'"$SMTP"','` MAILTEXT=`echo $MAILTEXT | sed 's,%POP3%,'"$POP3"','` MAILTEXT=`echo $MAILTEXT | sed 's,%LOGINNAME%,'"$LOGINNAME"','` MAILTEXT=`echo $MAILTEXT | sed 's,%MESTO%,'"$KAB"','` MAILTEXT=`echo $MAILTEXT | sed 's,%TNUMBER1%,'"$TNUMBER1"','` MAILTEXT=`echo $MAILTEXT | sed 's,%TNUMBER2%,'"$TNUMBER2"','` MAILTEXT=`echo $MAILTEXT | sed 's,%PASSWORD%,'"$PASSWORD"','` MAILTEXT=`echo $MAILTEXT | sed 's,%MIDLENAME%,'"$MNAME"','` #Сохраняем текст готового письма в файл tmp echo $MAILTEXT >emails/$EMAIL #| mail -s "$SUBJECT" $ADMIN #Отправляем письмо tmp на адрес хранящийся в ADMIN # sh sendm.sh tmp $ADMIN # echo $LOGIN_NAME:$i:20000:russian:0:0:$FNAME $LNAME $MNAME:/home/$LOGIN_NAME:/bin/sh:$PASSWORD >>mailusers #Увеличиваем счетчик UID'а пользователя let iUID=iUID+1 done #Перезапускаем sendmail cd /etc/mail make && make install && make restart cd $sdir #Отправляем письма адресатам ls -1 $edir | while read EADDRESS do echo $EADDRESS sh sendm.sh $edir$EADDRESS $ADMIN sh sendm.sh $edir$EADDRESS $EADDRESS done rm $edir*local.lan* ./adusr UID tomail UID - это собственно UID :) первого пользователя из списка, остальные будут прибавляться, для себя я решил, что пользователи созданные для ящиков начинаются у меня с 20001. Ну вот и все :). |
Вход для пользователейНовые записи в блогах
Сейчас на сайтеСейчас на сайте 0 пользователей и 1 гость.
|