Доброе время суток многоуважаемый Алл!
Вот сталкнулся стакой проблемой: есть хостинг под freebsd, apache 1.3.28 и много виртуальный хостов, естественно некоторые платят за хостинг как отрубать тех кто не платит, т.е. не удалять из конфига апача виртуальный хостинг, а при открытии страницы выводить какой-нибудь текст, типа сайт закрыт. Может есть уже какой-то можуль? Подскажите!
Заранее огромное спасибо!
>при открытии страницы выводить какой-нибудь текст, типа сайт закрыт. Может есть
>уже какой-то можуль? Подскажите!
>Заранее огромное спасибо!Посмотри mod_vhost_alias, там с виртуал-хостами гораздо проще работать.
>Доброе время суток многоуважаемый Алл!
>Вот сталкнулся стакой проблемой: есть хостинг под freebsd, apache 1.3.28 и много
>виртуальный хостов, естественно некоторые платят за хостинг как отрубать тех кто
>не платит, т.е. не удалять из конфига апача виртуальный хостинг, а
>при открытии страницы выводить какой-нибудь текст, типа сайт закрыт. Может есть
>уже какой-то можуль? Подскажите!
>Заранее огромное спасибо!
Мне кажется что проще задать какой-нить экзотичексий directory_index и класть заблокированным клиентам, разумеецца права рутовые этому файлу дать чтобы юзверь его удалить не смог. Отпишитесь если сработает, по моему - должно. Во первых удобно что это можно на автомате делать, например по крону раскладывать это файло, и также удалять по крону вовремя проплатившимся =)) Ну а вообще идеально ещё паролик менять пользователю, чтобы все остальные варианты доступа к системе блокировались
>>Доброе время суток многоуважаемый Алл!
>>Вот сталкнулся стакой проблемой: есть хостинг под freebsd, apache 1.3.28 и много
>>виртуальный хостов, естественно некоторые платят за хостинг как отрубать тех кто
>>не платит, т.е. не удалять из конфига апача виртуальный хостинг, а
>>при открытии страницы выводить какой-нибудь текст, типа сайт закрыт. Может есть
>>уже какой-то можуль? Подскажите!
>>Заранее огромное спасибо!
>
>
>Мне кажется что проще задать какой-нить экзотичексий directory_index и класть заблокированным клиентам,
>разумеецца права рутовые этому файлу дать чтобы юзверь его удалить не
>смог. Отпишитесь если сработает, по моему - должно. Во первых удобно
>что это можно на автомате делать, например по крону раскладывать это
>файло, и также удалять по крону вовремя проплатившимся =)) Ну а
>вообще идеально ещё паролик менять пользователю, чтобы все остальные варианты доступа
>к системе блокировались
На мой взгляд - это самый оптимальный вариант, т.к. не требует перезагрузки Апача, и юзеры не могут удалять файлик т.к. права рутовские!
> и юзеры не могут удалять файлик т.к. права рутовские!не так все просто.
1. юзер легко удаляет рутовский файл из своего каталога. надо ставить noschg флаг на файл.
2. надо перекрыть и прямые ссылки внутрь сайта. это можно сделать с помощью rewrite.
>Доброе время суток многоуважаемый Алл!
>Вот сталкнулся стакой проблемой: есть хостинг под freebsd, apache 1.3.28 и много
>виртуальный хостов, естественно некоторые платят за хостинг как отрубать тех кто
>не платит, т.е. не удалять из конфига апача виртуальный хостинг, а
>при открытии страницы выводить какой-нибудь текст, типа сайт закрыт. Может есть
>уже какой-то можуль? Подскажите!
>Заранее огромное спасибо!поменять DocumentRoot на свой каталог, где будет лежать страничка с сообщением
Привет,>поменять DocumentRoot на свой каталог, где будет лежать страничка с сообщением
Так и делаем.. плюс обязятельно "!" перед паролем в /etc/shadow... тогда менять не приходиться, а юзер зайти по FTP не может...
WWell,
>>поменять DocumentRoot на свой каталог, где будет лежать страничка с сообщениемчеловек спрашивает как ему это сделать не правя конфиг апача, а докрут менять это по-любому править и рестартить.
>Так и делаем.. плюс обязятельно "!" перед паролем в /etc/shadow... тогда менять
>не приходиться, а юзер зайти по FTP не может...
это да.
>человек спрашивает как ему это сделать не правя конфиг апача, а докрут
>менять это по-любому править и рестартить.ну в оригинале было "не удалять из конфига апача виртуальный хостинг"
Идея-то идея, но некрасивая она всё рано так как будет работать только
при прямом обращении к домену / каталогу
т.е. в главный каталог положить файл недостаточно,
потому как у него останется доступ к вложенным, а также он сможет
обращаться к скриптам напрямую например domain.ru/old_index_page.htmlНо идея эволюционировала вот во что:
Надо в корневой каталог пользовательского VIRTUALHOST-а класть
не экзотический индексный файл, а экзотический .htaccess с рутовыми
правами где будет написано deny from all.Вот этот вариант решения должен сработать на ура:
Так как помимо того что пользователь увидит FORBIDDEN,
заблочатся ещё и все вложенные дирректории.Ну и человек тут успел посоветовать ставить флаг noschg,
не знаю правда насколько это необходимо.На заметку: необходимо предусмотреть вариант сохраниния
пользовательского .htaccess так как он впринципе может быть в
каталоге, т.е. получаем алгоритм:А) Блокирование:
1) Смотрим есть ли у пользователя свой .htaccess
если да - сохраняем как .htaccess_user
2) Копируем свой .htacess, где всё лочицца
ставим права rwx------
B) Разблокирование
1) Удаляем .htaccess
2) если есть .htaccess_user переименовываем в .htacess>А пароли меня особенной надобности нет.
Ну я бы всё-таки поменял, потому как, закончился у человека хостинг у
вас, другой хостинг он надумал купить, соответственно спокойно заходит
по ФТП и скачивает свой сайт чтобы разместить у другого хостера.А так чтобы слить сайт он должен будет проплатить ещё месяц =)))
При этом если он съедет то вообще хорошо, бабки заплачены, а система
не загружена его файлами и процессами.Если не съедет, то тоже хорошо - того гляди постоянным клиентом
станет. =)))
Опять же если сработает - скажите спасиба, и дайте знать, потому как под себя и знакомых сервак брать собираюсь.
>>А) Блокирование:
>1) Смотрим есть ли у пользователя свой .htaccess
> если да - сохраняем как .htaccess_user
>2) Копируем свой .htacess, где всё лочицца
> ставим права rwx------неа :)
1. с rwx------ apache не сможет прочитать рутовский файл (если я правильно понял, файл предполагается создавать рутом).
2. попробуй у себя в домашнем каталоге от имени рута выполнить touch test, а потом от имени пользователя - rm test :) так что без флага не обойтись.
3. FORBIDDEN - не самое информативное сообщение для посетителей и владельца сайта.
>>>А) Блокирование:
>>1) Смотрим есть ли у пользователя свой .htaccess
>> если да - сохраняем как .htaccess_user
>>2) Копируем свой .htacess, где всё лочицца
>> ставим права rwx------>неа :)
>1. с rwx------ apache не сможет прочитать рутовский файл (если я правильно
>понял, файл предполагается создавать рутом).
>2. попробуй у себя в домашнем каталоге от имени рута выполнить touch
>test, а потом от имени пользователя - rm test :) так
>что без флага не обойтись.ёпрст, я чо говорил что не надо? я ж пишу с расчётом что у человека голова есть.
>3. FORBIDDEN - не самое информативное сообщение для посетителей и владельца сайта.
Зато самое распространённое =))))
Ну тут опять же смекалка решает, значит кидаем вместе со своим .htaccess
ещё свой blocked_index.html(rwxr--r--) а в .htaccess делаем blocked_index.html как directory_index и запрещаем всё кроме него.
ну и конечно ставим флажок noschg.Надеюсь всё.
Доброе время суток!
Вот прочитал я все высказывания по этому вопросу и начал писать скриптик на перле, который бы мне отключал пользователей! И тут я понял, что перл я вообще незнаю!:-) Вооружившись книгой по перлу начал писать и вот что у меня получилось:
Хотел бы услышать замечания!
#!/usr/bin/perl
use strict;
# Prava blokirovochnogo faila .htaccess
defined (my $user_block=getpwnam "root") or die "Bad user";
#Group While
my $grp_block="0";
#Polnij put' k failu httpd.conf
my $apache_conf="/usr/local/etc/apache/httpd.conf";
#tekstovij fail s loginom i balansom
my $db_user="db.dat";
# Razlichnie peremennie
my @all_users;
my @balans;
my $usr;
my $lgn;
my $usr_db;
my $bal_db;
my $error_log;
#Ogranichenie balansa posle kotorogo user otkluchaet
my $ogr="0";#Write log file of critical error
my $timestam=time;
my $date=localtime $timestam;
open LOG, ">>logfile.log" or die "Cannot create logfile: $!";
my $file = "$apache_conf";
unless (-e $file) { print LOG "$date - Error File not find: $apache_conf\n" };
my $file = "$db_user";
unless (-e $file) { print LOG "$date - Error File not find: $db_user\n" };#poisk vseh polzovatelej v faile httpd.conf
@ARGV=glob "$apache_conf" or die "Can't open file $!\n";while (<>){
if (/^\s*(User\b)/i) {
#Vseh userov v massiv: User login
push (@all_users,$_);
}
}
#schitivaem dannie s faila
@ARGV=glob "$db_user" or die "Can't open file $!\n";
while (<>) {
#($usr_db,$bal_db)=split(/:/);
push (@balans,$_);}
foreach (@all_users) {
#razbivaem sodergimoe peremennoj
($usr,$lgn)=split;#proverka usera na nalichie sredstv na schetu
foreach (@balans) {
($usr_db,$bal_db)=split(/:/);if (/^($lgn:)(.*)/) {
# Proverka na otrichatel'nij balans
if ($2<$ogr) {
my $pathdoc = vDocumentRoot($lgn);
my $file = "$pathdoc/.htaccess";
my $fileold= "$pathdoc/.htaccess_$lgn";
my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,
#print "$lgn - $pathdoc - $fileold - $uid - $gid - $sizeif (-e $file) {
if (($uid ne "0") || ($gid ne "0")) {rename $file, $fileold;
chown $user_block, $grp_block, glob $fileold;
chmod 0644, $fileold;
open ht,">>$file" or die "Cannon create file $!";
print ht "deny from all\n#Blocking login $lgn\n";
close ht;
chown $user_block, $grp_block, glob $file;
chmod 0755, $file;
}
} else {
open ht,">>$file" or die "Cannon create file $!";
print ht "deny from all\n#Blocking login $lgn\n";
close ht;
chown $user_block, $grp_block, glob $file;
chmod 0755, $file;
}}
#Proverka na pologitelnii balans
if ($2>$ogr) {
my $pathdoc=vDocumentRoot($lgn);
my $file = "$pathdoc/.htaccess";
my $fileold= "$pathdoc/.htaccess_$lgn";
my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,
if (-e $file){
if (($uid eq "0") && ($gid eq "0")) {
unlink "$file";
if (-e $fileold) {
#pereimenovanie faila
rename $fileold, $file;
#Preobrazovanie User=1000
defined (my $usrg=getpwnam $lgn) or die "Bad user";my $grpg=group_find($lgn);
#print "$grpg - rr\n";chown $usrg, $grpg, $file;
chmod 0755, $file;}}
}}
}}
}
#print LOG "$date - OK\n";
close LOG;#my $u;
#$u=vDocumentRoot("alfaservis");
#print "$u-\n";
sub vDocumentRoot {
@ARGV=glob "$apache_conf" or die "Can't open file $!\n";
while (<>){
if (/^\s*(DocumentRoot).*(\/\w+\/(($_[0]\b\/\w+)|($_[0]\b)))/i)
{ return ($2); }
}
}sub group_find {
@ARGV=glob "/etc/passwd" or die "Can't open file: $_";
my ($login,$cr_pass,$uid,$gid,$f1,$f2,$f3,$gecos,$home,$shell);
while (<>) {
chop;
($login,$cr_pass,$uid,$gid,$f1,$f2,$f3,$gecos,$home,$shell)=split(/:/);
if ($_[0] eq $login){ return ($gid) }
}
}Файлик db.dat формируеться другим скриптом, но это уже другая темя
Формат такой
Логин пользователя:Сумма балансаПривязка к DocumentRoot у меня /www/Имя пользователя/public_html
Файлик рабочий.
НО! при написании скрипта я честно говоря не понял как сделать привязку логина к определенному виртуальному хосту!
Т.е. если я знаю логин как мне выбрать нужный мне виртуальный хост и всех директив в нем! Имееться ввиду все что заключенно в промежутке между <VirtualHost 111.222.333.444> и </VirtualHost> - все эти директивы в файле в файле httpd.conf одинаковые, а что находиться в нутри их может быть разное!
>Хотел бы услышать замечания!>#!/usr/bin/perl
[ 240 строк скрипта ]1. У нас временное отключение выполняется одной коммандой:
chmod 000 /path/to/host/root
И что бы не говорила stricty, это прекрасно работает.2. Проще генерировать httpd.conf скрипт по заданным параметрам,
а не заниматься разбором и изменением уже написанного. При этом
правда несколько теряется гибкость, но, по-моему в такой задаче
гибкость особенная и не требуется.
>>Хотел бы услышать замечания!
>
>>#!/usr/bin/perl
>[ 240 строк скрипта ]
>
>1. У нас временное отключение выполняется одной коммандой:
>chmod 000 /path/to/host/root
>И что бы не говорила stricty, это прекрасно работает.
>
>2. Проще генерировать httpd.conf скрипт по заданным параметрам,
>а не заниматься разбором и изменением уже написанного. При этом
>правда несколько теряется гибкость, но, по-моему в такой задаче
>гибкость особенная и не требуется.
Да я об этом не подумал!
>>Хотел бы услышать замечания!>1. У нас временное отключение выполняется одной коммандой:
>chmod 000 /path/to/host/root
>И что бы не говорила stricty, это прекрасно работает.Работает-то - работает, но я же говорю - контроля никакого. Не гибкости, ни мягкости, ни понятий. Приходит письмо в службу ТП "у меня 403"... и что?
>2. Проще генерировать httpd.conf скрипт по заданным параметрам,
>а не заниматься разбором и изменением уже написанного. При этом
>правда несколько теряется гибкость, но, по-моему в такой задаче
>гибкость особенная и не требуется.Точно. Именно это я и имела ввиду. Полный респект ;) Гибкость никуда не теряется - набор заданных параметров и их преобразование задаст степень гибкости.
>Доброе время суток многоуважаемый Алл!
>Вот сталкнулся стакой проблемой: есть хостинг под freebsd, apache 1.3.28 и много
>виртуальный хостов, естественно некоторые платят за хостинг как отрубать тех кто
>не платит, т.е. не удалять из конфига апача виртуальный хостинг, а
>при открытии страницы выводить какой-нибудь текст, типа сайт закрыт. Может есть
>уже какой-то можуль? Подскажите!
>Заранее огромное спасибо!
Был у меня такой трабл, решил так:
так как у меня название домена, было его каталогом, я просто менял путь до их файлов на /vhost/locked а там на чистом русском по англидски написано, что сначала бабки а потом всё остальное. ну у меня целая систем зделана отключать например делать LOCK системному акунту. Незнаю помог ли, попробуй, я так работаю.
Я предпочитаю с перзагрузкой апача такие вещи делать:
1. mod_rewrite можно использовать
2. тупо комментировать VirtualHost
3. Dey from allЕстественно FTP/SSH/MySQL etc. тоже лучше блокировать :)
>Доброе время суток многоуважаемый Алл!
>Вот сталкнулся стакой проблемой: есть хостинг под freebsd, apache 1.3.28 и много
>виртуальный хостов, естественно некоторые платят за хостинг как отрубать тех кто
>не платит, т.е. не удалять из конфига апача виртуальный хостинг, а
>при открытии страницы выводить какой-нибудь текст, типа сайт закрыт. Может есть
>уже какой-то можуль? Подскажите!
>Заранее огромное спасибо!
Если в httpd.conf "Include conf/hosts/domain.com", то закоменть строку и апач рестарт.
Работающий вариант (для name-based виртуального хостинга):
- делаешь перед работающими директивами VirtualHost include файлика nekiy.file
- в nekiy.file один виртуальный хост, в котором и есть страничка отключённого пользователя и все 404 и 403 указавают на неё
- в настройках этого виртуального хоста прописываешь ServerAlias хосты отключённых пользователей (только не забывай выкидывать оплативших *)Как работает:
- Apache воспринимает первый попавшийся VirtualHost, в котором встретился нужный ServerAlias
- Как вариант можно удалять записи с рабочими VirtualHostКак у меня:
- в httpd.conf
include /server/etc/inactive.conf # VirtualHost для деактивированных
include /server/etc/vh # каталог, где лежать файлики - один на каждый VirtualHost активных пользователей
- и inactiv.conf и содержимое vh генерируется по базе биллинга раз в час и после этого делается apachectl graceful (как раз самое что нужно)
Решение проблемы: поставил webmin (http://webmin.com), а кнему еще добавил Virtualmin virtual Server - и нет проблемы!
Только вот включать и выключать приходиться руками! На первое время пока хватит, нужно писать скрипт который бы сам включал и выключал.
А это уже дело времени! удачи!
>Решение проблемы: поставил webmin (http://webmin.com), а кнему еще добавил Virtualmin virtual Server
>- и нет проблемы!
>Только вот включать и выключать приходиться руками! На первое время пока хватит,
>нужно писать скрипт который бы сам включал и выключал.
>А это уже дело времени! удачи!Я так понимаю мы тут с марсианами разговариваем? Ты руками будешь за ними (пользователями) следить?
Кстати, не рекомендую использовать webmin как основную управляющую панель - очень расслабляет. Так, разве что части от неё для информации и некоторой помощи - например, мне понравился список модулей Перла там.
Ну вот и на основе вебмина можно и писать свой скрипт который бы все делал на автомате через крон! Вопрос времени! А еще было бы интерсно прикрутить это все к радиусу.
>Ну вот и на основе вебмина можно и писать свой скрипт
>который бы все делал на автомате через крон! Вопрос времени! А
>еще было бы интерсно прикрутить это все к радиусу.На мерседесе не пробовал дрова возить? Вэбмин - недурная, простая (я смотрела внутрь) и достаточно admin friend *:) система. Но прикручивать "на основе"?.. Можно и без основы - основа там знание программирования на каком-то уровне и основы *NIX, никаких других основ там нет. Так что, тот же скрипт намного легче написать без "основ вэбмина"...
Если совсем никак - могу выслать 20-и строчный shell-скрипт, который по записям в базе MySQL строит файлики для VirtualHost, только это не полезный скрипт в плане ознакомления, ибо он тупой как валенок и соответственно максимально бессбойный и эффективный... *:)
>Вот сталкнулся стакой проблемой: есть хостинг под freebsd, apache 1.3.28 и много виртуальный хостов, естественно некоторые платят за хостинг как отрубать тех кто не платит, т.е. не удалять из конфига апача виртуальный хостинг, а при открытии страницы выводить какой-нибудь текст, типа сайт закрыт. Может есть уже какой-то можуль? Подскажите!подсказываем...
Самый простой способ - это определить DocumetRoot на какую-либо диру, положить туда требуемую страничку, а злобных неплатящих буратин просто комментировать... И да познаешь ты счастье...
А может у кого есть готовое решение на перле? Вопрос вследующем! есть апачевский конфиг с кучей виртуальных хостов, в каждом виртуальном хосте есть директива "User логин_пользователя" по этому логину нужно определять какой из всех виртуальных хостов нужно отключить (или он уже отключен)!Заранее огромное спасибо!
>А может у кого есть готовое решение на перле? Вопрос вследующем! есть
>апачевский конфиг с кучей виртуальных хостов, в каждом виртуальном хосте есть
>директива "User логин_пользователя" по этому логину нужно определять какой из всех
>виртуальных хостов нужно отключить (или он уже отключен)!
>Перестаём тупить - я же сказала работающий способ. Цикл на перле писать умеем? Логин = название файла устраивает? Директива include <каталог> в http.conf известна?
Послушайте ещё студентов, которые путают "руками" и "автоматом" и 2 КрУтЫх ХоМеПаГи и бизнес.... Вон, тут деятель коментировать предлагал...
>Самый простой способ - это определить DocumetRoot на какую-либо диру, положить туда
>требуемую страничку, а злобных неплатящих буратин просто комментировать... И да познаешь
>ты счастье...
Да, давай, срипт коментирования и раскоментирования - в студию! :-/
>Доброе время суток многоуважаемый Алл!
>Вот сталкнулся стакой проблемой: есть хостинг под freebsd, apache 1.3.28 и много
>виртуальный хостов, естественно некоторые платят за хостинг как отрубать тех кто
>не платит, т.е. не удалять из конфига апача виртуальный хостинг, а
>при открытии страницы выводить какой-нибудь текст, типа сайт закрыт. Может есть
>уже какой-то можуль? Подскажите!
>Заранее огромное спасибо!
mod_rewrite может переписывать url через внешний скрипт.
Самое простое решение - права на корень в 000 выставить. Тогда и апач перезапускать не надо. 403 ошибку - на страницу с предупреждением.
>Самое простое решение - права на корень в 000 выставить. Тогда и
>апач перезапускать не надо. 403 ошибку - на страницу с предупреждением.Поздравляю! Это посленовогодняя шутка? А куда ты настоящую 403 денешь? Или она так, для баловства?...
1. Настоящую можно текстом написать. (в ErrorDocument)
2. Если в главном конфиге задана 403 с http://...., то пофиг какие права на виртуалхосте стоят