The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Web регистрация  - решил поделиться"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Почта)
Изначальное сообщение [ Отслеживать ]

"Web регистрация  - решил поделиться"  +/
Сообщение от black_ru email(ok) on 20-Окт-10, 01:40 
Использую связку postfix + dovecot + apache mysql + roundcube в домашней сети,
решил пркрутить веб-регистрацию в системе для использования почты через roundcube.
Делюсь скриптом, может кому-то пригодится. Процедуру настройки указанной связки не описываю, пособий достаточно.
Механизм: скрипт php > vixie-cron > bash - скрипт.

register.php


<html>
<head>
</head>
<a href=../index.html><font color=000000>Вернуться на главную</font></a>
<body>
<table width="35%" align="center"><td align="left"><b>Регистрация нового почтового ящика</b>


Имя пользователея может содержать только латинские буквы, цифры, а также
симолы подчеркивания, дефиса, точки. <b>Пароль должен быть не менее 6 символов. </b>


</td></table>
<?php
$askss = array( 'В каком году основан город Москва?'=>'1147',
'Как называется наша планета?'=> 'Земля', 'Кто светит нам утром в окно?'=> 'Солнце');
$fraf = array_rand($askss);
if (isset($askss[$_POST['ques']]) && $askss[$_POST['ques']] == $_POST['thekey']) {
checkex ();
} else {
echo "<p align=center><b>Следует правильно ответить на контрольный вопрос<b></p>";
}


$USRN=($_POST['username']);

//Функция проверки существования пользователя, из заранее скопированного файла /etc/group
function checkuser () {
global $USRN;
$filename = "basa/group";
$handle = popen("grep -wo $USRN < $filename | head -n1", "r");
$contents = stream_get_contents($handle);
fclose($handle);
if ($contents == true) {
echo "<p align=center>Такой пользователь <b>$contents</b>  уже есть</a>";
} else {
sendd ();
}
}

function checkex () {
$filename = 'basa/text.dat';
if ( file_exists($filename) ) {
echo "<p align=center><b>Попробуйте повторить попытыку через 2 минуты</b></p>";
} else {
checkfill ();
}
}

function checkfill () {

if (($_POST['username']!='') && ($_POST['password']!='') && ($_POST['password2']!='')) {
chpreg ();
} else {    
echo "<p align=center><b>Вы не заполнили все поля<b></p>";
}
}
//Проверка корректности пароля
function chpreg () {
$match = preg_match( "/[a-z\d]{6,}/is", $_POST['password'] );
if ( $match != true ) {
echo "<p align=center><b>Вероятно, слишком простой пароль</b></p>";
}
else {
checkpass ();
}
}
//проверка совпадения паролей в полях
function checkpass () {

if (($_POST['password']) != ($_POST['password2'])) {
echo "<p align=center><b>Пароли не совпадают<b></p>";
} else {
checkuser ();
}
}
//Функция отправки на сервер
function sendd () {
$username=htmlspecialchars($_POST['username']);
$password=htmlspecialchars($_POST['password']);
$password2=htmlspecialchars($_POST['password2']);
$file_handle = fopen('basa/text.dat','a');
fwrite( $file_handle, $username);
fclose( $file_handle);
chmod( 'basa/text.dat', '0544');
$file_handle = fopen('basa/pass.dat','a');
fwrite( $file_handle, $password);    
fclose( $file_handle);
chmod( 'basa/pass.dat', '0544');
echo "<p align=center>Ваш почтовый ящик <b>$username</b><b>@rfa.mine.nu</p></b>";
echo "<p align=center>Аккаунт будет активирован в течение 2 минут</p>

";  
echo "<p align=center><a href=index.php><font color='000000'>Войти в почту</font></a></p>

";
exit;
}
?>
<table align=center><td align=left>
<form method='post'>
Имя пользователя:

<input type='text' name='username' value='' />

Пароль:

<input type='password' name='password' value='' />

Подтверждение пароля:

<input type='password' name='password2' value='' />

<?php
echo "<table width=350><tr><td width=350>$fraf</td></tr></table>";
echo "
<input type='hidden' name='ques' value='".($fraf)."' size=50>";
?>
</br><input type='text' name='thekey' value=''></br>
<input type='submit' value='зарегистрировать'>
</form>
</td>
</table>
</body>
</html>

Далее пишем такой скрипт на bash и скармливаем его крону

/usr/bin/myreg
Скрипт проверятет наличие пользователя, создает нового и затирает файл с именем и паролем,
а также копирует /etc/group для дальнейшй проверки его php скриптом


#!/bin/bash
USERNAMME=`(cat /var/www/localhost/htdocs/roundcube/basa/text.dat | awk  '{printf  $1}')`;
PASSWORD=`(cat /var/www/localhost/htdocs/roundcube/basa/pass.dat | awk  '{printf  $1}')`;
export USERNAMME;
export PASSWORD;
FILEREG=`(cat /etc/group | grep -ow $USERNAMME | uniq)`;
export FILEREG; sleep 1;
if [ "$FILEREG" == "$USERNAMME" ]; then
echo "Пользователь уже зарегистрирован";
rm /var/www/localhost/htdocs/roundcube/basa/text.dat;
rm /var/www/localhost/htdocs/roundcube/basa/pass.dat;
exit;
elif [  "$FILEREG" != "$USERNAMME" ]; then
/usr/sbin/useradd -m -G users $USERNAMME; sleep 1;
( echo "$PASSWORD"; sleep 1; echo "$PASSWORD"; sleep 1 ) | passwd $USERNAMME
rm /var/www/localhost/htdocs/roundcube/basa/text.dat && rm /var/www/localhost/htdocs/roundcube/basa/pass.dat;
cp /etc/group /var/www/localhost/htdocs/roundcube/basa;
exit;
fi

Минус скрипта - можно создавать только одного пользователя раз в минуту, после регистрации одного пользователя файл с базой недоступен для записи, ровно тот промежуток времени, который указан для запуска крона (можете переделать для ваших нужд).


Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Web регистрация  - решил поделиться"  +/
Сообщение от PavelR (??) on 20-Окт-10, 06:49 
> Использую связку postfix + dovecot + apache mysql + roundcube в домашней
> сети,

Не очень похоже, что используется mysql.
Интересно, а ssh на сервере запущен ? Оч удобно, веб-регистрация - получаем шелл )

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

2. "Web регистрация  - решил поделиться"  +/
Сообщение от black_ru email(ok) on 20-Окт-10, 21:40 
>> Использую связку postfix + dovecot + apache mysql + roundcube в домашней
>> сети,
> Не очень похоже, что используется mysql.
> Интересно, а ssh на сервере запущен ? Оч удобно, веб-регистрация - получаем
> шелл )

Нет, для регистрации mysql не используется только файлы... roundcube юзает mysql, поэтому указал.


Какой шел? Рутовый ? И как, интересно, мы его получаем?

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

3. "Web регистрация  - решил поделиться"  +/
Сообщение от PavelR (??) on 20-Окт-10, 22:08 
> Какой шел? Рутовый ? И как, интересно, мы его получаем?

Ну почему _сразу_ рутовый :-) Обычный, системный шелл. Рутовый - несколько позже, используя пару последних новостей на главной странице.

/usr/sbin/useradd -m -G users $USERNAMME; sleep 1;
( echo "$PASSWORD"; sleep 1; echo "$PASSWORD"; sleep 1 ) | passwd $USERNAMME

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

plink -v -ssh chktest@mail.cool.dom -N -D 12123

А оно вам надо ?

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

4. "Web регистрация  - решил поделиться"  +/
Сообщение от PavelR (??) on 20-Окт-10, 22:09 
>> Какой шел? Рутовый ? И как, интересно, мы его получаем?
> Ну почему _сразу_ рутовый :-) Обычный, системный шелл. Рутовый - несколько позже,
> используя пару последних новостей на главной странице.
> /usr/sbin/useradd -m -G users $USERNAMME; sleep 1;
> ( echo "$PASSWORD"; sleep 1; echo "$PASSWORD"; sleep 1 ) | passwd
> $USERNAMME
> Вы же создаете пользователя обычного, системного.
> Далее, этот пользователь, может, к примеру, сделать:
> plink -v -ssh chktest@mail.cool.dom -N -D 12123
> А оно вам надо ?

Это я к тому, что можно даже шелла не давать, а пользователь сможет делать "нехорошие вещи".

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

5. "Web регистрация  - решил поделиться"  +/
Сообщение от black_ru (ok) on 21-Окт-10, 02:08 
>> Какой шел? Рутовый ? И как, интересно, мы его получаем?
> Ну почему _сразу_ рутовый :-) Обычный, системный шелл. Рутовый - несколько позже,
> используя пару последних новостей на главной странице.
> /usr/sbin/useradd -m -G users $USERNAMME; sleep 1;
> ( echo "$PASSWORD"; sleep 1; echo "$PASSWORD"; sleep 1 ) | passwd
> $USERNAMME
> Вы же создаете пользователя обычного, системного.
> Далее, этот пользователь, может, к примеру, сделать:
> plink -v -ssh chktest@mail.cool.dom -N -D 12123
> А оно вам надо ?

ну именно это не может,  даже если зайдет по ssh (хотя это не предусмотрено).
Я оставил у себя -m так как папка с почтой где-то должна лежать :)
Тем более, если речь идет о домашней сети или сети малого офиса, понятно, что аккаунты будут людей знакомых.

plink нет такой команды у меня :)

Вы ведь подразумеваете нехорошие вещи с учетом доступа через ssh? Я правильно понял?

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

6. "Web регистрация  - решил поделиться"  +/
Сообщение от PavelR (??) on 21-Окт-10, 17:03 
> ну именно это не может,  даже если зайдет по ssh (хотя
> это не предусмотрено).

Не предусмотрено или не предполагалось ? %)

> Тем более, если речь идет о домашней сети или сети малого офиса,
> понятно, что аккаунты будут людей знакомых.

Домашняя сеть - и уже можно гонять "левый траффик".
Малый офис - нафига там веб-регистрация ?

> plink нет такой команды у меня :)

Это аналог команды

ssh chktest@mail.cool.dom -N -D 12123

> Вы ведь подразумеваете нехорошие вещи с учетом доступа через ssh? Я правильно
> понял?

в общем да :-)

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру