Мы — долго запрягаем, быстро ездим, и сильно тормозим.
|
||||||||||||||||||
www.lissyara.su
—> статьи
—> FreeBSD
|
|
После чего, собственно, пересобираем:
|
После этого, создаём новый класс пользователей, которых будем ограничивать, у меня он называется ``webuser''. Для этого, в файл /etc/login.conf добавляем такую секцию:
|
Пересобираем БД классов пользователей:
|
Теперь надо поставить квоты на файловую систему, где у нас хостинг (надеюсь, вы не пускаете юзеров пастись в /usr и прочих системных разделах?). Вначале, я попробовал воткнуть её слёту:
|
Перезагрузился, и попробовал поставить квоту:
|
Непрокатило :). Для этого в ядре должна быть её поддержка, для чего вносим в конфиг такую опцию:
|
Надо заметить ещё такой момент, во FreeBSD есть ограничение, пользователь не может входить более чем в 16 групп, это очень старое ограничение, связянное каким-то боком с NFS. В данном случае, в процессе экспериментов, я в него очень быстро упёрся - согласно создаваемой системе, у каждого пользователя будет своя персональная группа, в которую кроме пользователя входит пользователь www - от него работает apache. Если его не включить в неё, то он не сможет читать файлы в дирекориях пользователя. При других раскладках - типа, все пользователи в одной группе - косяк с безопасностью - есть возможность, что прочтут чужие файлы. Поэтому пришлось найти где это ограничение забито и подправить. Это файл /usr/src/sys/sys/syslimits.h, в нем редактируем такую строку:
|
Из минусов - надо помнить про эту опцию, при обновлениях, ну и при передаче дел неплохо бы упомянуть. Вроде как с 7.0 должны сделать это ограничение "мягким" - можно будет его менять через sysctl. На данный момент, во всех версиях, его менять нельзя - переменная есть, но не меняется:
|
Короче - ставим сколько надо (всё не тестил, но вроде как всё рабтает нормально, правда, для верности, пересобирал вообще всё - мир, ядро, и все установленные приложения. Каюсь - метод, всёже косячный, но умней ничё в башке не родилось, да и время поджимало). Пересобираем ядро. Это описано у меня, и в хандбуке. Пока ядро пересобирается, готовимся, надо подправить /etc/fstab. Правим строку, относящуюся к монтированию раздела где живут сайты пользователей. У меня, в итоге, оно выглядит так:
|
Также, добавляем такую строку в /etc/pw.conf, чтобы при создании пользователя, генерились рандомные пароли:
|
По окончании сборки ядра перезагружаемся, и снова пробуем запустить edquota - если пройдёт без ошибок - значит всё нормально. (не забываем добавить вышеописанную строчку про 'enable_quotas="YES"' в /etc/rc.conf!). Далее, я настругал небольшой скриптик, для администрирования всего этого добра:
|
Можете воспользоваться моим, а можете делать всё руками - решать вам. Тока к скипту надо одно пояснение - он удалит любого системного пользователя, если по ошибке вы воткнёте его имя в качастве параметра с командой на удаление. Поэтому, если не понимаете, как оно работает - не надо пользоваться. Там есть защита от дурака, но от дурака умного. У меня он пашет, а как будет у вас - не знаю.
Небольшое замечание по поводу пути к файлу php.ini. В том файле, что копируется, я подправил лишь несколько пунктов, вот их настройки:
|
А вообще, возьмите файл /usr/local/etc/php.ini-recommended, и правьте его под свои нужды.
После проделанного, не забываем поставить парва на скрипт - в нём хранится рутовый пароль от MySQL (в принципе, можно заюзать флаг "-p", чтобы запрашивал его каждый раз, или отдельную переменную, а потом подставлять её значение - смотрите сами.)
|
Ну и пробуем скриптик:
|
Вот и всё. Соответствено, где надо подрихтуйте напильником под свои нужды (в 4.11 и 6.0 пару путей различаются), добавьте такие строки в конец конфига апача:
|
P.S.1 Настройки системы и php брались из головы, так, как я считал нужным. Может что-то и неправильно, или можно сделать лучше. Смотрите и думайте сами.
P.S.2 Насчёт ограничения в 16 групп и правки исходников - это правда плохая идея. Хотя проблем вроде нету. И если знаете, как можно сделать грамотней - поделитесь...
P.S.3 Настройки MySQL не рассмотрены сознательно, смотрите тут
размещено: 2006-10-24,
последнее обновление: 2008-05-25,
автор: lissyara
matriks, 2006-10-24 в 12:48:42
Грамотней каждого юзера в свою отдельную групу, тогда апач работает от имени username:usergroup и чача, если немного подумать, то юзеры не смогут читать кроме своих файлов ничего более, даже листинг чужой диры получить не смогут.
Насчет именовать пользователей как somecom - не рекомендую! В один момент получишь проблему:
у тебя уже есть хостинг для mydomain.com и тут к тебе приходит Вася и говорит, хочу хостинг для my-domain.com - это еще полбеды, можно с "-" разобраться. Но, если у тебя есть хостинг для mykiev.ua, а Вася тебя просит хостинг для my.kiev.ua - это уже проблема в твоем случае, получишь для двух разных хостингов одного юзверя mykievua...
Ну да в остальном ладно, ты уже упомянул - "каждому по потребностям, рихтуйте рубанком сами..."
matriks, 2006-10-24 в 12:54:01
Да, забыл добавить: не знаю как в 6й фряхе, не пробовал, но в 5.x, 4.x существует ограничение на длину имени пользователя - 16 символов, а ограничение на длину доменного имени по RFC - 63 символа, с этим надо быть осторожней. Выхода 2:
1. проверять и создавать продуманно пользователей на основе свой какой-то логики
2. патчить систему руцями, рекомендуется только в случае, если знаешь, что делаешь (!!!), при этом не забываем, что если понадобиться заюзать NIS, то можем (не обязательное условие) поиметь гемор.
Что делать, решать читателю
lissyara, 2006-10-24 в 14:25:20
из комментов к скрипту:
>На данном сервере, под
>FreeBSD 4.11, ограничение на длинну имени пользователя - 16 символов.
wizard, 2006-10-31 в 18:38:54
Народ а нарисуйте, сюда чтоб он ещё и бекапы умел делать не только после удаления.
nop, 2006-12-16 в 18:14:22
У кого были подобные бока, думаю будет полезно: столкнулся с проблемой - апач при остановке постоянно выкидывал httpd.core в /usr/local. Анализировать дамп было очень лениво, но решение все-же нашол - проблема в модуле recode.so, а точнее его наличие. Причем эта проблема у меня одинаково была и под php4 и под php5 (Apache 2.X).
Детально написано о проблеме здесь:
http://lists.freebsd.org/pipermail/freebsd-ports/2005-May/023180.html
nk, 2006-12-25 в 9:32:30
На 6.1 не нужно пересобирать мир или ядро, у меня и так квоты заработали, тока в rc.conf прописал и всё!
experion, 2007-01-30 в 14:10:02
user_datasize="500000"
В 6.2 кстати тоже в Kb
Gruber, 2007-03-19 в 15:29:14
Небольшая поправочка!!!
В скрипте client_create.sh есть небольшая ошибка из-за которой пароль юзера генерится с пробелом на конце!!!! Блин сколько я мучался прежде чем заметил её :)))
Вот тут убираем пробел в конце перед последней кавычкой
user_passwd="`${pw} useradd ${user_name} -c \"UserDomain = \
${domain_name}\" -L webuser -s /bin/csh -d ${hosting_preffix}/${user_name}` "
А вобще скриптик отличный осталось добавить только nsupdate чтоб зоны в днс прописывал и усё :)))
lissyara, 2007-03-19 в 20:01:29
ща поправлю.
пасиб!
maserg, 2007-04-17 в 21:24:38
хорошая статья.
я еще в скрипт для каждого виртуального хоста добавил
php_admin_value open_basedir "${hosting_preffix}/${user_name}/www"
так, на всякий пожарный...
maserg, 2007-04-17 в 21:31:57
забыл добавить что php работает у меня как модуль, а апач поставил этот http://dklab.ru/lib/dklab_apache/
есть еще сцылки на эту тему:
http://www.suphp.org/
http://titov.net/safemodepatch/
может пригодится кому :)
Maximka, 2007-04-21 в 11:19:47
Статья классная. Как раз у себя хочу переделать хостинг. У меня принцип тот же — PHP-CGI. Да вот CPU жрёт неподецки. Тут не хватает прикрутки mod_fastcgi. Как я понял оно за счёт кеширования выплёвывает все намного быстрее. Только ОЗУ надо побольше, но это проще, чем ЦПУ апгрейдить. Вот если у себя mod_fastcgi прикручу — то обязательно поделюсь как и что. А может — тут кто-то раньше напишет.
DS, 2007-04-28 в 14:35:03
(пробегая мимо..)
  read confirmation
  if [ $confirmation = YES ] > /dev/null 2>&1
Не самый лучший вариант, пожалуй... особенно прятание зачем-то stdin и stderr.
if [ x$confirmation = xYES ]
на мой взгляд поприятнее.
Alexey, 2007-09-27 в 9:14:36
Спасибо лис! Отличная статья!
Ilya, 2007-11-16 в 2:11:04
Было бы круто увидеть статьи об установке хостинга с какой нибудь панелью управления... ориентированной на клиента хостинга - cPanel, ISPmanager, Plesk, на крайняк webmin... это была бы очень популярная статья
Abigor, 2007-11-20 в 6:20:52
[root@chieftec abigor]# uname -sr
FreeBSD 7.0-BETA2
[root@chieftec abigor]# sysctl -a | grep ngroup
kern.ngroups: 16
[root@chieftec abigor]# sysctl kern.ngroups=64
sysctl: oid 'kern.ngroups' is read only
[root@chieftec abigor]#
пока без изменений
s.romanov, 2007-11-20 в 7:45:17
uname -sr 8:43
FreeBSD 7.0-BETA2
sysctl -a|grep ngroup 8:43
kern.ngroups: 36
/usr/src/sys/sys/syslimits.h
Abigor, 2007-11-20 в 10:37:26
to s.romanov
через исхордники оно понятно, но это не красиво.
в
[root@chieftec abigor]# uname -rs
FreeBSD 7.0-BETA3
[root@chieftec abigor]#
такая же картина
valera, 2007-12-10 в 9:37:49
Не рассмотрено - suPHP, так же как заметили товарищи mod_fastcgi, так же mod_ssl + DNS +ftp+mail-server+firewall.
Есть для этих целей всякие бесплатные панели управления.
Может кто подскажет нормально работающую и не умершую?
Lindows, 2007-12-10 в 20:20:19
Попробуй бесплатную панель VHCS
http://www.evilbot.ru/2007/05/04/ustanovka_vhcs_na_freebsd_chast_1/
valera, 2007-12-13 в 9:56:42
>Попробуй бесплатную панель VHCS
Можно один дурной вопрос?
Я просто некоторое время назад мучал VHCS и ISPconfig. Но мучал Я их на Linux'е, так как для них ориентировались по началу.
Так вот кроме сборки php+mysql+ftp+mail....Компилились/устанавливались какие-то файлы самой панели, для чего Я так и не разобрался, может кто знает и подскажет?
ЗЫ:VHCS умерла при переходе на 3-ю ветку...
ProFTP, 2008-04-24 в 2:28:43
веб сервер нужно перегружать все время?
aivus, 2008-08-01 в 15:14:41
2ProFTP
угу, но никто не мешает graceful пустить...
Pez, 2008-11-22 в 12:57:14
ls="/bin/ls"       # Kbcnbyu диреткорий, файлов
тут наверное слово листинг не в той раскладке =)
serzh, 2008-11-24 в 3:38:52
поднял на фри 7.0, пхп 5.2.5, апач 1.3..., все из портов.
1. квота на диски в блоках, 1 блок 512 байт
2. никак не мог заставить пхп юзать индивидуальные конфиги, решения два: первое убрать его оттуда ваабще, юзать пхп_админ_валюе , как в коментах уже подсказывали, второе(очень трудно давшееся) при компиле пхп не указывать как модуль апача, но в конфиге указывать
AddType php-cgi .php .php3
Action php-cgi /cgi-bin/php-cgi
3. Автору респект :)
ЗЫ. А насчет аплоада - "играюсь" с даталайфом файлы качает а картинки нет, может кто знает подскажите, и что там с нсапдейт, ато я не в курсах, все ручками да ручками..
bliz, 2008-12-25 в 12:06:19
Статья отличная!
если в классе пользователя webuser стоит
nologin=/sbin/nologin:
по идее пользователь с таким классом не сможет заходить по SSH
или я не прав?
bliz, 2008-12-25 в 16:20:16
проблема решилась :
в класс webuser добавить passwd_format=md5:\
Pavel, 2010-02-07 в 23:59:23
Уточните есь ли вариант сделать на VDS так чтоб апач запускался именно от определенного пользователя а не от www.
У меня 5 пользователей и все работают от WWW можно ли сделать 5 разных?
Pez!, 2010-02-08 в 8:41:34
да, конечно, смотрите в сторону mod_fcgid + suexec
Pez!, 2010-02-08 в 8:42:43
да, конечно, смотрите в сторону mod_fcgid + suexec.
Павел, 2010-02-08 в 10:02:23
А если PHP как модуль подключен?
ArtCont, 2010-05-27 в 10:15:40
#define NGROUPS_MAX 64 /* max supplemental group id's */
Ура в 8ке наконец сделали:
#define NGROUPS_MAX 1023 /* max supplemental group id's */
Гость, 2011-02-21 в 10:53:48
как сделать чтобы созданный пользователь заходил по ssh
добавление в класс webuser passwd_format=md5:\ не помогло
Гость, 2013-04-26 в 14:38:34
Пиздец разделение, у всех разделение только в фантазиях, ибо все юзеры входят в группу www
Афтар реально лох, учи матчасть.
Как то так, 2013-11-12 в 14:13:15
Тoвapищщи! Этo пoля для ввoдa комментариeв к стaтьe, a нe для вoпросoв. Сюдa пишите нaйденные бaги, или кaкие-то фичи :)
Для вoпросoв eсть фoрум!
Мфынф, 2021-03-24 в 0:35:51
АЛЕКС КЕДА ЛОХЪ
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
Комментарии пользователей [36 шт.]