Установка MySQL
11.10.2006 03:42
Администратор
Установка MySQL
Автор: lissyara. Оригинал: http://www.lissyara.su/articles/freebsd/programms/mysql/
Опять статья навеянная многочислеными просьбами трудящихся :) Заодно не придётся во всех новых статьях описывать установку MySQL :) Так что, в любом случае пригодится. Вообще, с MySQL вроде всё просто, но почему-то народ активно морозится баз данных, используя системных юзеров в почте, да всякие файлы текстовые, под почту да хранение трафика. Хотя с БД оно всё на порядок удобней получается. Итак, рассматривать будем установку и небольшую настройку двух версий MySQL - 5.0 и 3.23 под FreeBSD6.0. Почему именно они? На данный момент, 5.1 вроде всё ещё бета, потому используется на рабочих серверах только отъявленными маньяками, или теми у кого есть необходимость. А вот 3.23 нужна в случаях, когда на какой-нить старенькой машинке нужна "записная книжка" для почтовых юзеров, да БД куда складывать статистику по траффику инета, например. Подымать для этого 5.0 или 4.1 - расточительство оперативки и ресурсов слабенькой машинки. У меня и на некоторых, очень хороших машинах, стоит 3.23 - ибо его хватает. Итак, ставим 5.0/usr/home/lissyara/>cd /usr/ports/databases/mysql50-server/ /usr/ports/databases/mysql50-server/>make ===> Vulnerability check disabled, database not found
You may use the following build options:
WITH_CHARSET=charset Define the primary built-in charset (latin1). WITH_XCHARSET=list Define other built-in charsets (may be 'all'). WITH_COLLATION=collate Define default collation (latin1_swedish_ci). WITH_OPENSSL=yes Enable secure connections. WITH_LINUXTHREADS=yes Use the linuxthreads pthread library. WITH_PROC_SCOPE_PTH=yes Use process scope threads (try it if you use libpthread). BUILD_OPTIMIZED=yes Enable compiler optimizations (use it if you need speed). BUILD_STATIC=yes Build a static version of mysqld. (use it if you need even more speed). WITHOUT_INNODB=yes Disable support for InnoDB table handler. WITH_ARCHIVE=yes Enable support for Archive Storage Engine. WITH_FEDERATED=yes Enable support for Federated Storage Engine. WITH_NDB=yes Enable support for NDB Cluster.
===> Extracting for mysql-server-5.0.22 ^C /usr/ports/databases/mysql50-server/>
Прервал. Доступна куча опций, потому с ними и поиграемся, для чего в файл /etc/make.conf надо внести такие строки:# Для некоторых, особо тупых приложений, лучше указать версию MySQL, # что используется, тут. Но - для совсем тупых не поможет и это. DEFAULT_MYSQL_VER=50
# Директория где лежат порты PORTSDIR?= /usr/ports
# для сервера .if ${.CURDIR} == ${PORTSDIR}/databases/mysql50-server # Дефолтовая кодировка. Вообще, этим пунктом увлекаться не стоит - # могут возникнуть проблемы при переносе на другой сервер. На самом # деле и не проблемы вовсе - просто дамп перекодировать да поменять # кодировку-коллэйшен у таблиц в дампе, перед заливкой, но первый # раз столкнувшись, вызывает кучу проблем... WITH_CHARSET=cp1251 # Другие вкомпиленные кодировки. Можно задать 'all' - все. #WITH_XCHARSET=all # Дефолтовая кодировка сравнения (другого слова подобрать не могу...) WITH_COLLATION=cp1251_bin # Поддержка OpenSSL - для шифрования передаваемых данных. # Шифрование - это конечно хорошо, но - повышается нагрузка на # машину сервера и на машину клиента (если и тот и другой на одной # машине - вообще не вижу смысла в этом пункте.) #WITH_OPENSSL=yes # Интересная опция - позволяет работать в несколько "нитей", # обрабатывая несколько запросов одновременно - в результате # повышается производительность. WITH_LINUXTHREADS=yes # Программные треды FreeBSD (если я верно всё понял). Тестов на скорость, # в сравнении с линуксовыми не нашлось - потому не знаю, кто быстрей. # Кстати, видел рекомендацию - включать и те и другие треды одновременно. # Смысла, особого в этом не вижу, но и не утверждаю ничего. #WITH_PROC_SCOPE_PTH=yes # Собирать с флагами оптимизации (-O2), сам не мерял, но по слухам, # несколько процентов производительности можно выиграть. Будет # полезным на старых машинах, или высоконагруженных. BUILD_OPTIMIZED=yes # Собрать статическую версию mysqld (cо вкомпиленными либами, чтоль) # Также, как и предыдущая опция, позволит выиграть несколько процентов # производительности (по слухам - до 10% - но чё-то слабо верится...) BUILD_STATIC=yes # Отключить тип таблиц InnoDB (если не используете - будет поменьше # коду, и, соответственно, быстрей работать будет) WITHOUT_INNODB=yes # Специальный тип хранения данных (не всех, тока тех, что без индексов), # позволяет хранить их в виде архива, тем самым экономится дисковое # пространство (в ущерб производительности, я думаю... Так что смысл # есть, лишь если надо хранить кучу неиндексированных данных - # те же данные по траффику, к примеру, там всё равно перебором почти всё :)) #WITH_ARCHIVE=yes # Фенька, позволяющая работать с удалёнными (находящимися на другом хосте) # таблицами данных, как будто они находятся на локальной машине # (NFS, чтоль, уже отменили? :)) Хотя, если выборки будут идти на другом # хосте - то нагрузка на сеть будет меньшe, чем с NFS. Короче - не пробовал, # ничё не утверждаю... Пару строк в документации прочёл.) #WITH_FEDERATED=yes # Опция, нужная лишь в случае, если будете собирать кластер MySQL-серверов #WITH_NDB=yes .endif # для клиента .if ${.CURDIR} == ${PORTSDIR}/databases/mysql50-client # Многие из опция сервера, применяются и в клиенте. Вобщем-то, какие не # применяются, интуитивно понятно - то, что касается всяких фенек, типа # кластеров, архивных таблиц и прочего. Ставить их тут можно, но они не # произведут никакого действия. Также, хочу заметить, что кодировка, # 'по-умолчанию' бывает не тока у сервера, но и у клиента. Частенько, # именно на этом прокалываются. (И вовсе не обязательно она должна быть # такая же как у сервера.) # Также хочу заметить, что клиента не надо собирать с какими бы то ни # было тредами - линуксовыми, или родными - я прокололся на линуксовых, # вроде всё пашет, с консоли, а вот апач падает... Методом исключения # выяснил виновника - клиент с тредами - падает mysql-модуль PHP, # валит апача... WITH_CHARSET=cp1251 WITH_COLLATION=cp1251_bin BUILD_OPTIMIZED=yes .endif
Итак, собираем MySQL:/usr/home/lissyara/>cd /usr/ports/databases/mysql50-server/ /usr/ports/databases/mysql50-server/>make && make install && make clean
После инсталляции клиента сборка прекращается с ошибкой - не может найти библиотеку.===> Installing ldconfig configuration file ===> Compressing manual pages for mysql-client-5.0.22 ===> Registering installation for mysql-client-5.0.22 ===> Returning to build of mysql-server-5.0.22 Error: shared library "mysqlclient.15" does not exist *** Error code 1
Stop in /usr/ports/databases/mysql50-server. /usr/ports/databases/mysql50-server/>
Я перезагрузился, помогло, но можно и иначе, дать команду:/usr/home/lissyara/>/sbin/ldconfig -m /usr/local/lib/mysql /usr/home/lissyara/>
Должно помочь и без перезагрузки. Вообще, раньше, вместе с клиентом, инсталлся такой скрипт: /usr/local/etc/rc.d/000.mysql-client.sh#!/bin/sh
case "$1" in start) /sbin/ldconfig -m /usr/local/lib/mysql ;; stop) ;; *) echo "" echo "Usage: `basename $0` { start | stop }" echo "" exit 64 ;; esac
Нынче он не инсталлится. Если ошибки будут продолжаться, при сборке других приложений из портов, то можно его добавить в автозагрузку, или, что грамотней, добавить путь в /etc/rc.conf (подробности можно найти здесь, поиск в странице, по ключевому слову ldconfig_paths). После чего продолжаем инсталляцию:/usr/ports/databases/mysql50-server/>make install && make clean
По окончании инсталляции, стругаем конфиг для mysql - /usr/local/etc/my.cnf# Этот конфигурационный файл сделан на основе файла для маленьких # систем - /usr/local/share/mysql/my-small.cnf. Большую часть его # делал не я, а один знакомый. Имени, к сожалению, не помню... # Но всё же предупреждаю - копирайт на настройки конфига не мой :)) # # Вообще, конфигурационный файл можно положить в несколько мест: # /etc/my.cnf # /var/db/mysql/my.cnf # /usr/local/etc/my.cnf # В любом из них mysqld его найдёт, и достанет из него настройки. # Самое корректное место, если судить по стартовому скрипту, это # директория где лежат базы данных - /var/db/mysql/my.cnf.
# Опции для всех клиентов MySQL [client] # Пароль для подключения к БД #password = your_password # Порт на котором висит MySQL port = 3306 # Сокет MySQL socket = /tmp/mysql.sock
# Опции MySQL-сервера [mysqld] # Порт port = 3306 # Адрес, который будем слушать (если вам не нужно подключаться к # MySQL с других машин, то оставьте здесь 127.0.0.1) bind-address = 127.0.0.1 # Где лежит сокет socket = /tmp/mysql.sock # Не использовать средства системных блокировок. skip-locking # Вообще, в новых версиях, (после 3.21) этот пункт правильно называется # key_buffer_size, но можно использовать и старое имя. Значение этого # пункта - размер буфера, используемого для блоков индексов. Чтобы # улучшить обработку индексов (для всех операций чтения и записи нескольких # элементов), необходимо увеличить это значение настолько, насколько возможно. # Рекомендуется, 1/4 от объёма оперативки, но не более 1/2 - иначе система # может начать сохранять временные файлы на диске, что значительно # снизит производительность. key_buffer = 16K # Максимальный размер одного пакета. Изначально размер буфера сообщений # устанавливается в net_buffer_length байтов, но при необходимости может # возрасти до max_allowed_packet байтов. Это значение по умолчанию не # настолько велико, чтобы отсеивать большие (возможно ошибочные) пакеты. # Если используются большие столбцы BLOB, его необходимо увеличить. # Значение должно быть не меньше самого большого BLOB, который будет # использоваться. Ограничение протокола для max_allowed_packet # составляет 16 Мб в MySQL 3.23 и 1Гб в MySQL 4.0. max_allowed_packet = 1M # Количество открытых таблиц для всех потоков. С увеличением этого # значения увеличивается количество дескрипторов файлов, необходимых # для mysqld. Чтобы узнать, необходимо ли изменять значение кэша таблиц, # следует проверить значение переменной Opened_tables. # Если у этой переменной большое значение, а команда FLUSH TABLES # (которая закрывает все таблицы, а потом открывает их повторно) # используется не часто, то необходимо увеличить ее значение. table_cache = 4 # Каждый поток, которому необходимо произвести сортировку, выделяет # буфер данного размера. Увеличение данного значения позволит ускорить # выполнение операторов ORDER BY или GROUP BY. sort_buffer_size = 64K # Каждый поток, осуществляющий последовательное сканирование, выделяет # буфер указанного размера для каждой сканируемой таблицы. Если # проводится много последовательных сканирований, это значение # можно увеличить. read_buffer_size = 256K # При считывании строк, после проведения сортировки, в отсортированном # порядке строки считываются через буфер, чтобы избежать операций поиска # по диску. Это может улучшить выполнение ORDER BY весьма и весьма, # если параметр установлен в большое значение. Т.к. эта переменная # имеет отношение к потоку, то не устанавливайте слишком большое # значение глобально, но просто меняйте его при выполнении некоторых # больших запросов. read_rnd_buffer_size = 256K # В данное значение устанавливается, в промежутках между запросами, # буфер соединения. Обычно это значение не изменяется, но если у вас # очень мало памяти, можно установить его по размеру ожидаемого # запроса (т.е. равным предполагаемой длине операторов SQL, отправляемых # клиентами; если оператор превысит указанную длину, буфер будет # автоматически увеличен как максимум до max_allowed_packet байтов). net_buffer_length = 2K # Размер стека для каждого потока. От данного значения зависит большое # количество ограничений, обнаруживаемых при помощи теста crash-me. # По умолчанию этот размер достаточен для нормальной работы. thread_stack = 64K
# Вообще не слушать порты TCP/IP. Это может применяться для большей # безопасности, если все процессы, соединяющиеся с MySQL висят на томже # хосте, что и mysqld. Все взаимодействия с mysqld будут осуществляться # через Unix-сокеты, или именованые каналы. # Заметтьте, что использование этой опции под форточками, без включчения # именованных каналов (используйте опцию "enable-named-pipe") сделает # работу MySQL бесполезной - ибо с mysqld никто не сможет соединиться :) skip-networking # Если Вы используете InnoDB, то закомментируйте эту опцию skip-innodb # С этой опцией MySQL не будет инициализировать библиотеку Berkeley DB, # что позволит сэкономить большое количество памяти. skip-bdb # Hекоторое уникальное число между 2 и 2^32-1. Значения server-id должны # быть различными на каждом сервере, участвующем в репликации. Если # значение server-id не определено, оно будет установлено в 1, если # также не определено значение master-host, оно будет установлено в 2. # Обратите внимание, что если значение server-id опущено, то головной # сервер будет отказывать в соединении всем подчиненным серверам, а # подчиненный сервер - отказывать в соединении головному серверу. # Таким образом, опускать установку значения server-id можно лишь в # случае резервного копирования с использованием двоичного журнала. server-id = 1 # Раскомментируйте эту опцию, для включения логгирования всех запросов # Заметтьте - тока на время отладки! Потом надо закомментить и # рестартануть MySQL! # Файл должен существовать, с соответствующими правами на него: # touch /var/log/mysql.log # chown mysql:wheel /var/log/mysql.log # chmod 640 /var/log/mysql.log log = /var/log/mysql.log
# Указывает местоположение двоичного журнала обновлений, # в котором будут вестись записи. #log-bin=mysql-bin
[mysqldump] # Если задан этот параметр, то обработчик таблицы при выполнении # удаления не будет объединять индексы - в некоторых случаях это # может ускорить данную операцию quick # Максимальная величина пакета, посылаемого/принимаемого с сервера max_allowed_packet = 16M
[mysql] # Отключает автоматическое рехеширование. rehash следует использовать # для получения хеша таблиц и полей. Это обеспечивает более # быстрый старт mysql. no-auto-rehash # Опция, которую рекомендуется раскомментить начинающим :) # Разрешает выполнять только операции UPDATE и DELETE, используя ключи. #safe-updates
[isamchk] key_buffer = 8M sort_buffer_size = 8M
[myisamchk] key_buffer = 8M sort_buffer_size = 8M
[mysqlhotcopy] # Допускать простой длительностью interactive_timeout секунд (вместо # wait_timeout секунд) перед закрытием данного соединения. interactive-timeout
# P.S. Большинство текста - это из мануала по MySQL 4.0, за который # мы не так давно воевали на www.mysql.com (его убирали на некоторое # время, типа он по старой версии, потому не актуален... # но - отвоевали, вернули :))))
C таким конфиг-файлом mysqld занимает в 6 раз меньше памяти, чем без него. Итак, запускаем:/usr/home/lissyara/>echo 'mysql_enable="YES"' >> /etc/rc.conf /usr/home/lissyara/>/usr/local/etc/rc.d/mysql-server.sh start Starting mysql. /usr/home/lissyara/> /usr/home/lissyara/>ps -axj | grep mysqld mysql 44512 1 44510 504 0 S p0 0:00,08 /bin/sh /usr/local/bin mysql 44530 44512 44510 504 0 SN p0 0:00,15 /usr/local/libexec/mys mysql 44531 44530 44510 504 0 SN p0 0:00,00 /usr/local/libexec/mys mysql 44532 44531 44510 504 0 SN p0 0:00,00 /usr/local/libexec/mys mysql 44533 44531 44510 504 0 SN p0 0:00,00 /usr/local/libexec/mys root 44548 507 44547 504 2 S+ p0 0:00,02 grep mysqld /usr/home/lissyara/>
Так много процессов - потому как с тредами (на самом деле он один...).
С 5-кой разобрались. Теперь пример установки, для самой старой версии mysql, что есть в портах - 3.23./usr/home/lissyara/>cd /usr/ports/databases/mysql323-server/ /usr/ports/databases/mysql323-server/>make && make install && make clean ===> Vulnerability check disabled, database not found
You may use the following build options:
WITH_CHARSET=charset Define the primary built-in charset (latin1). WITH_XCHARSET=list Define other built-in charsets (may be 'all'). WITH_OPENSSL=yes Enable secure connections. WITH_LINUXTHREADS=yes Use the linuxthreads pthread library. WITH_PROC_SCOPE_PTH=yes Use process scope threads (try it if you use libpthread). BUILD_OPTIMIZED=yes Enable compiler optimizations (use it if you need speed). BUILD_STATIC=yes Build a static version of mysqld. (use it if you need even more speed). WITHOUT_INNODB=yes Disable support for InnoDB table handler.
===> Extracting for mysql-server-3.23.59.n.20050301_3 ^C /usr/ports/databases/mysql323-server/>
Чтож, опции, в большинстве своём, точно такие же, как и у 5.0. Соответсвенно правим файл /etc/make.conf (приведено без комментов, ибо нового ничё нет - смотрите предыдущий листинг)# Для некоторых, особо тупых приложений, лучше указать версию MySQL, # что используется, тут. Но - для совсем тупых не поможет и это. DEFAULT_MYSQL_VER=323
# Директория где лежат порты PORTSDIR?= /usr/ports
# для сервера .if ${.CURDIR} == ${PORTSDIR}/databases/mysql323-server BUILD_OPTIMIZED=yes BUILD_STATIC=yes # Единственный пункт, по которому нужны, наверно, пояснения. # Просто без него у меня не заводилось... #WITHOUT_INNODB=yes .endif # для клиента .if ${.CURDIR} == ${PORTSDIR}/databases/mysql323-client .endif
После рихтовки /etc/make.conf снова запускаем компиляцию:/usr/ports/databases/mysql323-server/>make && make install && make clean
Которая по окочании установки клиента вываливается с ошибкой, похожей на ту, что и у mysql 5.0:===> Installing ldconfig configuration file ===> Compressing manual pages for mysql-client-3.23.59.n.20050301_2 ===> Registering installation for mysql-client-3.23.59.n.20050301_2 ===> Returning to build of mysql-server-3.23.59.n.20050301_3 Error: shared library "mysqlclient.10" does not exist *** Error code 1
Stop in /usr/ports/databases/mysql323-server. /usr/ports/databases/mysql323-server/>
Лечение тоже самое - перезагрузка, или/usr/home/lissyara/>/sbin/ldconfig -m /usr/local/lib/mysql /usr/home/lissyara/>
После чего всё нормально доинсталлируеся. Можно создавать конфиг /usr/local/etc/my.cnf# Этот конфигурационный файл сделан на основе файла для маленьких # систем - /usr/local/share/mysql/my-small.cnf. # # Вообще, конфигурационный файл можно положить в несколько мест: # /etc/my.cnf # /var/db/mysql/my.cnf # /usr/local/etc/my.cnf # В любом из них mysqld его найдёт, и достанет из него настройки. # Самое корректное место, если судить по стартовому скрипту, это # директория где лежат базы данных - /var/db/mysql/my.cnf.
# Опции для всех клиентов MySQL [client] # Пароль для подключения к БД #password = your_password # Порт на котором висит MySQL port = 3306 # Сокет MySQL socket = /tmp/mysql.sock
# Опции MySQL-сервера [mysqld] # Порт port = 3306 # Адрес, который будем слушать (если вам не нужно подключаться к # MySQL с других машин, то оставьте здесь 127.0.0.1) bind-address = 127.0.0.1 # Где лежит сокет socket = /tmp/mysql.sock # Не использовать средства системных блокировок. skip-locking
# Вообще не слушать порты TCP/IP. Это может применяться для большей # безопасности, если все процессы, соединяющиеся с MySQL висят на томже # хосте, что и mysqld. Все взаимодействия с mysqld будут осуществляться # через Unix-сокеты, или именованые каналы. # Заметтьте, что использование этой опции под форточками, без включчения # именованных каналов (используйте опцию "enable-named-pipe") сделает # работу MySQL бесполезной - ибо с mysqld никто не сможет соединиться :) skip-networking # Если Вы используете InnoDB, то закомментируйте эту опцию skip-innodb # С этой опцией MySQL не будет инициализировать библиотеку Berkeley DB, # что позволит сэкономить большое количество памяти. skip-bdb # Hекоторое уникальное число между 2 и 2^32-1. Значения server-id должны # быть различными на каждом сервере, участвующем в репликации. Если # значение server-id не определено, оно будет установлено в 1, если # также не определено значение master-host, оно будет установлено в 2. # Обратите внимание, что если значение server-id опущено, то головной # сервер будет отказывать в соединении всем подчиненным серверам, а # подчиненный сервер - отказывать в соединении головному серверу. # Таким образом, опускать установку значения server-id можно лишь в # случае резервного копирования с использованием двоичного журнала. server-id = 1 # Раскомментируйте эту опцию, для включения логгирования всех запросов # Заметтьте - тока на время отладки! Потом надо закомментить и # рестартануть MySQL! # Файл должен существовать, с соответствующими правами на него: # touch /var/log/mysql.log # chown mysql:wheel /var/log/mysql.log # chmod 640 /var/log/mysql.log log = /var/log/mysql.log
# Указывает местоположение двоичного журнала обновлений, # в котором будут вестись записи. #log-bin=mysql-bin
[mysqldump] # Если задан этот параметр, то обработчик таблицы при выполнении # удаления не будет объединять индексы - в некоторых случаях это # может ускорить данную операцию quick
[mysql] # Отключает автоматическое рехеширование. rehash следует использовать # для получения хеша таблиц и полей. Это обеспечивает более # быстрый старт mysql. no-auto-rehash # Опция, которую рекомендуется раскомментить начинающим :) # Разрешает выполнять только операции UPDATE и DELETE, используя ключи. #safe-updates
[isamchk] key_buffer = 8M sort_buffer_size = 8M
[myisamchk] key_buffer = 8M sort_buffer_size = 8M
[mysqlhotcopy] # Допускать простой длительностью interactive_timeout секунд (вместо # wait_timeout секунд) перед закрытием данного соединения. interactive-timeout
Можно заметить, что отличия от 5.0 минимальны - отсутствуют опции буферов, да и всё, пожалуй. Запускаем:/usr/home/lissyara/>echo 'mysql_enable="YES"' >> /etc/rc.conf /usr/home/lissyara/>/usr/local/etc/rc.d/mysql-server.sh start Starting mysql. /usr/home/lissyara/>ps -axj | grep mysql mysql 8848 1 8846 504 0 S p0 0:00,07 /bin/sh /usr/local/bi mysql 8868 8848 8846 504 0 S p0 0:00,06 /usr/local/libexec/my root 8870 507 8869 504 2 L+ p0 0:00,01 grep mysql root 8754 5368 8754 5344 1 S+ p1 0:00,02 tail -f /var/db/mysql /usr/home/lissyara/>
Всё пашет.
Теперь общие вопросы. По дефолту, в MySQL заведено несколько пользователей, типа гостей, и прочих. Я их обычно удаляю - нефига гостям по БД шляться..../usr/home/lissyara/>mysql --database=mysql --execute="SELECT COUNT(*) FROM user" +----------+ | COUNT(*) | +----------+ | 4 | +----------+ /usr/home/lissyara/>mysql --database=mysql --execute="DELETE FROM user \ ? WHERE User=''" /usr/home/lissyara/>mysql --database=mysql --execute="SELECT COUNT(*) FROM user" +----------+ | COUNT(*) | +----------+ | 2 | +----------+ /usr/home/lissyara/>mysql --database=mysql --execute="DELETE FROM user \ ? WHERE Host != 'localhost'" /usr/home/lissyara/>mysql --database=mysql --execute="SELECT COUNT(*) FROM user" +----------+ | COUNT(*) | +----------+ | 1 | +----------+ /usr/home/lissyara/> /usr/home/lissyara/>mysql --database=mysql --execute="UPDATE user SET \ ? Password = PASSWORD('тут ввести пароль рута')" /usr/home/lissyara/>mysql --database=mysql --execute="FLUSH privileges" /usr/home/lissyara/>mysql --database=mysql --execute="SELECT * FROM user" ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO) /usr/home/lissyara/>
Всё. Без пароля к БД не добраться. Вообще, общая рекомендация - если плохо знаете MySQL - либо займитесь изучением, либо поставьте графический интерфейс, типа phpMyAdmin. Я вначале пошёл по второму пути, щас пытаюсь свернуть на первый :))) Единственное - не забывайте его запаролить.
P.S. При проблемах (не запускается), смотрим лог ошибок:/usr/home/lissyara/>tail -f /var/db/mysql/`uname -a | awk '
Обновлено 28.05.2010 13:49
NeTAMS - продолжение (login, bandwith, quota)
11.10.2006 02:15
Администратор
N
NeTAMS - продолжение (login, bandwith, quota)
Автор: schizoid. Оригинал: http://www.lissyara.su/articles/freebsd/traffic_count/netams_bad_3/
Итак, продолжим про НеТАМС. 1. Ограничение скорости в НеТАМС. При установки нетамса, появляется примерно такое окошко#make install Options for netams 3.4.0.r2 [ ] DEBUG Build with debug symbols [ ] BW Build with bandwidth limitation functionality [ ] HASH Build with HASH support
Здесь ставим галочку на против строки BW Build with bandwidth limitation functionality . Если честно, то я так не пробовал. Когда я ставил на сервак, этой опции еще не было, а пересборка производилась таким путем:make distclean && FLAGS=-DHAVE_BW make
Но думаю, что с включенной опцией оно уже умеет делать правильно. Итак нетамс собрался. (Более подробно по начальной настройке нетамса читайте в предыдущей статье).
Из всего конфига нас интересует сервис processor. !!! Строки взятые в квадратные скобки [...] - нужно писать в одну строку !!!service processor lookup-delay 30 flow-lifetime 180 policy oid 0B4940 name ip target proto ip restrict all drop local pass [unit net oid 022222 name stah_all ip 10.0.0.0 mask 255.255.255.0 description "net 10.0.0.0" password 123 no-local-pass acct-policy ip] unit host oid 033333 name server ip 193.16.хх.хх [unit host oid 000001 name eugene ip 10.0.0.1 description "ip 192.168.10.20" email
Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
password 123 bw 256.000K acct-policy ip] [unit host oid 000002 name agent ip 10.0.0.2 description "ip 192.168.10.141" password 123 bw 256.000K acct-policy ip] [unit host oid 000003 name chetkiller ip 10.0.0.3 description "ip 192.168.10.21" password 123 bw 256.000K acct-policy ip] [unit host oid 000004 name sirius ip 10.0.0.4 description "ip 192.168.10.2" password 123 bw 256.000K acct-policy ip] [unit host oid 000005 name TEAC ip 10.0.0.5 description "ip 192.168.10.18" password 123 bw 256.000K acct-policy ip]
Как видим, ограничение скорости включается весьма просто, простым добавлением bw 256.000K. Так же есть возможность организации асинхронного канала ([bw { speed in speed out | speed } ]). Например: !!! Строки взятые в квадратные скобки [...] - нужно писать в одну строку !!![unit host oid 000001 name eugene ip 10.0.0.1 description "ip 192.168.10.20" email
Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
password 123 bw 256.000K in 128.000K out acct-policy ip]
Вот собственно и все.
2. Сервис квота в НеТАМС.Основные свойства: 1. Хранение информации о квотах клиентов в базе SQL. В настоящий момент поддерживается MySQL и Postgres. 2. Возможность задания политики учета (контроля), параметров оповещения по умолчанию. 3. Возможность задания всех параметров квот по трафику индивидуально для каждого юнита. Это величины входящего, выходящего и суммарного трафика начиная с момента начала часа, дня, недели и месяца. 4. Возможность задания порога "мягкого срабатывания" в процентах от "жесткой" квоты индивидуально для каждого юнита. 5. Возможность гибкого управления параметрами оповещения при срабатывании и возвращении квоты.
Сервис квота в конфиге включается строчками:service quota policy ip notify soft {owner} notify hard {owner} username notify return {owner}
Опишем опции. policy ip - Задает политику учета (acct-policy), которая будет использоваться при проверке квот. Это политика по умолчанию для всех, существует возможность переопределить ее для конкретного юнита. Если не указано, используется первая политика из определенных policy XXX сервиса processor. Секции notify задают кому будет слаться оповещение о превышении квоты (soft - мягкая квота, hard - жестакая квота,return - восстановление работы, когда период действия квоты закончился). Нужно что бы в описании юнита присутствовал его e-mail (опция email
Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
). Здесь {owner} - владелец юнита, username - имя или OID пользователя (администратора). Далее, задаем квоту:netamsctl "service quota && set name eugene policy ip day 5M sum && exit"
Здесь мы задали юниту eugene суммарную дневную квоту в 5Мб при полиси ip. Здесь я не все опции показал, многие из них установлены по-умолчанию:soft_treshold 80 - порог мягкой квоты delay 10 - Интервал времени между периодическими проверками всех юнитов на наступление момента рабатывания квоты. Задается в секундах. notify_soft 1 - сообщение шлется владельцу юнита notify_hard 1 - сообщение шлется владельцу юнита notify_return 1 - сообщение шлется владельцу юнита
Также можно указать и другие временные интервалы ([hour ... ], [day ...], [week ...], [month ...]), amount - значение квоты (в байтах, но можно использовать модификаторы K, M, G), {in|out} - направление квотируемого трафика, {sum} - суммарный трафик (в обоих направлениях).
Просмотреть установленную квоту можно либо на страничке статистики (только для админа), либо командой netamsctl "show quota".
Отменить установленную квоту можно так:netamsctl "service quota && set name eugene poliсy ip day 0 sum && exit"
Вот и все.
3. Сервис login. В кратце - это веб-морда для пользователя, с помощью которой он может заблокировать/разблокировать свой аккаунт. Настраивается так:service login storage 1 set no name eugene password 123456 inact 3000 abs 0 relogin yes
При рестарте нетамса, создастся еще одна таблица в базе netams. Здесь опции: unit_oid - Идентификатор (OID) юнита, является уникальным ключом к базе данных password - Пароль пользователя. Никогда не пытайтесь поменять его извне программы путем прямой записи в SQL. inact - Величина таймаута неактивности для данного пользователя abs - Величина абсолютного таймаута для данного пользователя last_changed - Время (в формате UNIXTIME) последнего изменения записи last_opened_time - Время (в формате UNIXTIME), когда был в последний раз предоставлен доступ юниту last_opened_ip - IP-адрес, с которого был предоставлен доступ юниту last_opened_mac - MAC-адрес, с которого был предоставлен доступ юниту def_state - Режим доступа этого юнита по умолчанию (например, сразу после старта программы). 0 означает отсутствие доступа, 1 означает разрешения доступа. curr_state - Текущий режим доступа этого юнита. 0 означает отсутствие доступа, 1 означает разрешения доступа. К сожалению, по наступлении таймаута не сбрасывается (баг).
Теперь настраиваем апач для понимания cgi скриптов:LoadModule cgi_module libexec/apache2/mod_cgi.so ... ScriptAlias /cgi-bin/ "/usr/local/www/cgi-bin/" <Directory "/usr/local/www/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory> ... AddHandler cgi-script .cgi AddHandler cgi-script .pl
Перегружаем апач. Далее идем в /usr/ports/net-mgmt/netams/work/netams-х.х.х/cgi-bin (правда если не делали clean при установке, иначе нуно будет залезть внуть пакета). Тут нам понадобятся 3 файла:-rwxr-xr-x 1 root wheel 479 16 фев 02:13 config.cgi -rwxr-xr-x 1 root wheel 3707 16 фев 02:30 login.cgi -rwxr-xr-x 1 root wheel 3267 21 июн 2005 netams_api.pl
Копируем все это счастье в /usr/local/www/cgi-bin-dist, и подправляем под свою конфигурацию. А именно:# #----------------------------------------------------------------------------- # $Id: config.cgi,v 1.5 2005/04/06 16:21:49 anton Exp $
# Data required to do a script login, change this # login to netams $sc_host="localhost"; $sc_port=20001; $sc_user="LOGIN"; $sc_passwd="PASSWORD";
#login to database $mysql_host="localhost"; $mysql_login="netams"; $mysql_password="PASSWORD"; $mysql_dbname="netams";
#log events $log_to_events="yes";
#URL to statistic $statistic_url="/stat";
Ну в прнципе и все. Еще в login.cgi есть описание картинки, которая отображается в веб-морде. Там можно изменить путь к любой своей картинке, подходящей по размеру ;). Я заменил на свою:<tr align=center><td width=100%><img src="/stat/images/logo_sm.jpg" width="376" height="60" alt="" border="0" align=left>
Ну вот вроде и все, пробуем заходить по адресу http://my.domen.ru/cgi-bin/login.cgi с логином/паролем, что указаны в set no name eugene password 123456 inact 3000 abs 0. Т.е. логин admin, пароль 123456.
Должно все получиться, иначе смотрим логи апача :)
P.s.: есть мысль сделать доступ к веб-морде по протоколу https, но пока не доходят руки. Когда дойдут - опишу ;)
P.p.s: выяснилось, что веб-мордие от версии 3.4.0 не работоспособно, берите или от версии 3.3.5 или 3.4.1. P.p.p.s: Синтаксис выше приведенных команд касается NeTAMS версии 3.3.5. Для 3.4.х он немного отличается.
Обновлено 28.05.2010 18:18
|
Прокси-сервер SQUID
07.10.2006 12:30
Администратор
Автор: lissyara. Оригинал: http://www.lissyara.su/archive/squid_old/
Прокси-сервер - это программа которая выполняет роль "прокладки" между браузером пользователя и WWW сервером. Через него проходят все запросы пользователя по протоколу http и ответы серверов пользователю. Он может фильтровать проходящий траффик по тем или иным признакам, а так же разграничивать доступ к интернету по протоколу http (в случае если используется непрозрачный прокси-сервер). SQUID - пожалуй, самый лучший прокси под UNIX платформу. Есть сборки и для win32, но, на мой взгляд, это уже совсем не то :) Очень богатая функциональность: — Поддержка протоколов HTTP, FTP, SSL, HTCP, CAPR — Каскадирование серверов — возможность прозраного проксирования — поддержка протокола SNMP — кэширование DNS-запросов Собираем, операционка - FreeBSD4.11. Обновляем дерево портов и приступаем:/root/>cd /usr/ports/www/squid /usr/ports/www/squid/>make && make install && make clean
Появляется синенькое окошко с кучей опций. Я выбрал: SQUID_UNDERSCORES - разрешил запрещённый символ подчёркивания(_) в именах - мало ли идиотов в интернете... SQUID_CHECK_HOSTNAMES - пусть проверяет имена. SQUID_RCNG - стартовый скрипт squid Он качает много-много патчей и собирается (впрочем, если выпустят новую версию - то патчей первое время не будет :)). После чего топаем в /usr/local/etc/squid и редактируем squid.conf до такого состояния (все настройки даны для прозрачного прокси-сервера, у "непрозрачного" будут отсутствовать пункты httpd_accel_*):http_port 3128 icp_port 0 hierarchy_stoplist cgi-bin ? acl QUERY urlpath_regex cgi-bin \? no_cache deny QUERY cache_mem 128 MB maximum_object_size 8092 KB maximum_object_size_in_memory 512 KB cache_dir ufs /usr/local/squid/cache 2048 64 256 cache_access_log /var/log/squid/access.log cache_log /var/log/squid/cache.log cache_store_log /var/log/squid/store.log cache_mgr admin@my_domain.ru visible_hostname mail.my_domain.ru tcp_outgoing_address 222.222.222.222 refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 20% 4320 redirect_program /usr/local/etc/squid/redirector.pl redirect_children 10
acl all src 0.0.0.0/0.0.0.0 acl allowed_sites dstdomain \ "/usr/local/my_doc_smb/squid/allowed_sites.conf" acl limited_IP src \ "/usr/local/my_doc_smb/squid/limited_IP.conf" acl localhost src 127.0.0.0/8 acl our_networks src 192.168.0.0/24 #acl denied_sites dstdomain \ #"/usr/local/my_doc_smb/squid/denied_ext.conf" #http_access deny denied_sites http_access allow allowed_sites http_access deny limited_IP http_access allow our_networks http_access allow localhost http_access deny all
httpd_accel_host virtual httpd_accel_port 80 httpd_accel_uses_host_header on
coredump_dir /usr/local/squid/cache pid_filename /usr/local/squid/logs/squid.pid
Это - самый минимум конфигурации, для прозрачного проксирования, и списков людей, которым можно посещать лишь малое количество сайтов (сайты описаны в файле allowed_sites.conf, а ip компов в файле limited_IP.conf), и списка сайтов на которые ходить нельзя никому (denied_ext.conf). Файлы выглядят примерно так:/usr/local/my_doc_smb/squid/allowed_sites.confwww.yandex.ru mail.yandex.ru www.ya.ru www.mail.ru
/usr/local/my_doc_smb/squid/limited_IP.conf192.168.0.8 192.168.0.56 192.168.0.89
/usr/local/my_doc_smb/squid/denied_ext.confwww.sex.com www.tetki.ru www.soska.ru www.porewo.com
По остальным цифирькам: cache_mem - сколько памяти под кэш потратит (реально в 2.5 раза больше зажрёт. Любит он оперативку. У меня в точно такой конфигурации занимает 297 мегов памяти, примерно через день - когда наберёт объектов в память) maximum_object_size - максимальный размер объекта сохраняемый на диск (частенько неслушается и сохраняет обекты раза в 2-3 большие) maximum_object_size_in_memory - максимальный размер объекта хранимого в оперативке cache_dir - директория для кэша. Должна существовать и юзер от которого работает сквид должен иметь право писать в неё. Там же - ufs - тип файловой системы на которой расположена папка кэша, 2048 - максимальный размер кэша, 64 - число директорий первого уровня 256 - число директорий второго уровня (на директориях экономить не советую, сам столкнулся - кончились папки, но лимит по размеру кэша ещё не был достигнут, инет в итоге работает, но жутко тормозит. Как на модеме хреновеньком.... На 10-ти мегабитной-то линии....) cache_access_log - местоположение файла логов доступа пользователей к инету - кто, куда, сколько. cache_log - лог собственно сквида - результаты запусков-остановок, результаты работы с кэшем. cache_store_log - лог что сохранено в кэше на диске cache_mgr - е-майл администратора, выводится при ошибках или если доступ к странице запрещён. visible_hostname - видимое снаружи имя хоста tcp_outgoing_address - внешний адрес сервера redirect_program - программа редиректор (занимается анализом запрашиваемых URL и может производить с ними какие-то действия, у меня раньше, таким макаром был прикручен антивирус на проверку входящего http-траффика, а щас висит скрипт срезающий порнуху, от антивиря пришлось отказаться - примерно 30-40% лишнего траффика было, т.к. сайты нынче в основном динамические...) redirect_children - число процессов программы-редиректора Затем идут ACL-ы, разрешающие или запрещающие пользование http и поддержка прозрачного проксирования. ACL denied_sites закомментирован, можно пользоваться им самим, но я предпочитаю натравить на него внешнюю программу-редиректор, тогда можно будет вносить в него не сайты целиком, а ключевые слова по которым будет резаться URL - типа sex, deffki, porewo.... Если в запросе будет такое слово (неважно, в середине пути, в имени сервера, или названии файла) то не такой адрес пользователя не пустят. Можно таким макаром зарезать всю графику, например, написать jpg, jpeg, png, gif и всё - графики больше нет :) Можно резать флэши, файлы с нежелательными расширениями, да что угодно.... Учтите, строки типа acl allowed_sites dstdomain "/usr/local/my_doc_smb/squid/allowed_sites.conf" - это одна строка, просто у меня в листинге конфига не влезло и я её так перенёс. coredump_dir - директория куда будет писаться дамп программы в случае критической ошибки и последующего "выпадания в корку" pid_filename - имя файла где хранится идентификатор запущенного squid`a Файлы с запретами и разрешениями (/usr/local/my_doc_smb/squid/allowed_sites.conf, /usr/local/my_doc_smb/squid/limited_IP.conf, /usr/local/my_doc_smb/squid/denied_ext.conf) так странно лежат по причине, что из локалки у меня к ним открыт доступ по самбе, просто мне их так удобней редактировать :) Создаём файлы, папки и запускаем squid:/usr/local/etc/squid/>mkdir -p my_doc_smb/squid /usr/local/etc/squid/>mkdir -p mkdir /var/log/squid /usr/local/etc/squid/>touch /usr/local/my_doc_smb/squid/allowed_sites.conf /usr/local/etc/squid/>touch /usr/local/my_doc_smb/squid/limited_IP.conf /usr/local/etc/squid/>touch /usr/local/my_doc_smb/squid/denied_ext.conf /usr/local/etc/squid/>touch /usr/local/etc/squid/redirector.pl /usr/local/etc/squid/>chmod +x redirector.pl /usr/local/etc/squid/>chown -R squid:wheel /var/log/squid/ /usr/local/etc/squid/>echo 'squid_enable="YES"' >> /etc/rc.conf /usr/local/etc/squid/>squid -z 2005/09/20 14:51:04| aclParseAclLine: WARNING: empty ACL: acl 2005/09/20 14:51:04| aclParseAclLine: WARNING: empty ACL: acl 2005/09/20 14:51:04| aclParseAclLine: WARNING: empty ACL: acl 2005/09/20 14:51:04| Creating Swap Directories
Всё нормально, не считая ругани на пустые файлы ACL. На это можно не обращать внимания, или забить туда какие-ньть адреса. Тогда он ругаться перестанет. Вот содержимое файла /usr/local/etc/squid/redirector.pl#!/usr/bin/perl
$0 = 'redirect' ; $| = 1 ;
open (IN_FILE, "/usr/local/my_doc_smb/squid/denied_ext.conf") || die $!; my @tmp_data = <IN_FILE>; chomp @tmp_data; push @banners, map { qr /\Q$_\E/ } grep { ! /^\s*$/ } @tmp_data; close IN_FILE;
while (<>) { ($url, $who, $ident, $method) = /^(\S+) (\S+) (\S+) (\S+)$/ ; $url = 'http://mail.my_domain.ru/zaglushka.jpg' if grep ($url=~/$_/i, @banners) ; print "$url $who $ident $method\n" ; }
Это простенький перловый скрипт, перебирающий переданный ему URL на соответствие шаблонам лежащим в файле denied_ext.conf, и если они подходят, то вместо этого УРЛа он отдаёт другой - http://mail.my_domain.ru/zaglushka.jpg по которому лежит мелкий рисунок серого цвета (белый неудобно - у меня до кучи он баннеры режет и белые дыры на страницах не смотрятся вообще...) Ну, а теперь пристегните ремни, сейчас мы попробуем взлететь со всем этим хозяйством (копирайт из старого-старого анекдота):/usr/local/etc/squid/>../rc.d/squid.sh start Starting squid. 2005/09/20 15:28:35| aclParseAclLine: WARNING: empty ACL: acl allowed_sites 2005/09/20 15:28:35| aclParseAclLine: WARNING: empty ACL: acl limited_IP 2005/09/20 15:28:35| aclParseAclLine: WARNING: empty ACL: acl denied_sites /usr/local/etc/squid/>ps -ax | grep squid 73072 ?? Ss 0:00.00 /usr/local/sbin/squid -D 73074 ?? D 0:04.75 (squid) -D (squid) 73087 p0 D+ 0:00.00 grep squid /usr/local/etc/squid/>ps -ax | grep perl 73075 ?? Is 0:00.03 redirect (perl) 73076 ?? Is 0:00.03 redirect (perl) 73077 ?? Is 0:00.03 redirect (perl) 73078 ?? Is 0:00.03 redirect (perl) /usr/local/etc/squid/>sockstat | grep perl squid squid 73074 14 tcp4 127.0.0.1:3248 127.0.0.1:4480 squid squid 73074 15 tcp4 127.0.0.1:3922 127.0.0.1:2536 squid squid 73074 16 tcp4 127.0.0.1:2393 127.0.0.1:3906 squid squid 73074 21 tcp4 *:3128 *:* squid squid 73074 22 udp4 *:3401 *:* squid squid 73072 4 dgram syslogd[83]:3 squid perl 73076 0 tcp4 127.0.0.1:4371 127.0.0.1:1506 squid perl 73076 1 tcp4 127.0.0.1:4371 127.0.0.1:1506 squid perl 73075 0 tcp4 127.0.0.1:1596 127.0.0.1:2215 squid perl 73075 1 tcp4 127.0.0.1:1596 127.0.0.1:2215
Всё нормально. Добавляем правило в файрволл (ipfw), до divert natd:fwd 127.0.0.1,3128 tcp from 192.168.0.0/24 to any 80 via fxp0
Где fxp0 - внешний интерфейс, и всё, можно работать. Если на ходу возникает необходимость переконфигурить squid то перезапускать необязательно, можно дать команду/usr/local/etc/squid/>squid -k reconfigure
или/usr/local/etc/squid/>killall -1 squid
этого вполне достаточно. Заполняйте файлы с разрешениями-запретами, и пользуйтесь. Клиентов настраивать не нужно - достаточно указать шлюзом по-умолчанию машину со squid - всё остальное сделает ipfw - перекинет пакеты на squid.
Обновлено 28.05.2010 13:51
Самба как контроллер домена без использования LDAP
07.10.2006 00:27
Администратор
Самба как контроллер домена без использования LDAP
Автор: lissyara. Оригинал: http://www.lissyara.su/articles/freebsd/programms/samba_as_pdc_without_ldap/
Это - обновление старой одноимённой статьи. Как и старая - эта полностью копи-пастная - всё работает "из коробки" =) Причина обновления - недоработки старой статьи, кривости в некоторых местах (дополнительные параметры пользователя не редактировались). Ну и столкнулся с практической реализаций решения - попросили сделать в одной конторе. Задача - поднять домен с целью централизованного хранения учётных записей пользователей, выполнения каких-то скриптов при логине и т.п. Больше оно и не может - ибо уровень домена - NT4.
Система - FreeBSD 7.2-STABLE. Ставим самбу:server$ cd /usr/ports/net/samba3 server$ make install clean
В вылезшем окошке выбираем следующие опции:[X] WINBIND With WinBIND support [X] ACL_SUPPORT With ACL support [X] SYSLOG With Syslog support [X] QUOTAS With Disk quota support [X] UTMP With UTMP accounting support [X] POPT With system-wide POPT library [X] PCH With precompiled headers optimization
Рисуем конфиг /usr/local/etc/smb.conf:# [global] workgroup = SRO netbios name = SERVER server string = SAMBA Domain Controller For SRO
# Скрипт добавления пользователя add user script = /usr/local/etc/samba/add_user_script.sh "%u" # Скрипт удаления пользователя delete user script = /usr/sbin/pw userdel "%u" -r # Скрипт переименованя пользователя # (следующие две строки - на самом деле одна. невлезает ..) rename user script = /usr/local/etc/samba/rename_user_script.sh "%uold" "%unew" # Скрипт перезапуска самбы (Вообще, в man smb.conf, предлагается # ребутить или класть всю машину. Перебор, по моему... Хотя - # у меня это не работает. Такчто - пофиг.) shutdown script = /usr/local/etc/samba/shutdown_script.sh # Скрипт добавления новой группы add group script = /usr/sbin/pw groupadd "%g" # Скрипт удаления группы delete group script = /usr/sbin/pw groupdel "%g" # Скрипт добавления пользователя в группу # (следующие две строки - это одна, в ширину сайта на вписывается) add user to group script = /usr/local/etc/samba/add_user_to_group_script.sh "%g" "%u" # Скрипт установки первичной группы для пользователя set primary group script = /usr/sbin/pw usermod "%u" -g "%g" # Скрипт удаления пользователя из группы # (следующие две строки - это одна, в ширину сайта на вписывается) delete user from group script = /usr/local/etc/samba/delete_user_from_group_script.sh "%g" "%u" # Скрпит для добавления аккаунта компьютера add machine script = /usr/local/etc/samba/add_machine_script.sh "%u" # Скрипт проверки пароля (чтобы не пихали 12345 и прочее. Должен вернуть 0 # если пароль нормальный, и что-то другое - если нет. Пароль передаётся # на стандартный ввод скрпита) check password script = /path/to/password/check/script.sh # Скрпит - чё елать при получении сообщений по winpopup (из man`a) message command = /bin/mail -s 'message from %f on %m' root < %s; rm %s
# added by lissyara 2009-09-04 in 08:50 passdb backend = tdbsam:/usr/local/etc/samba/passdb.tdb # added by lissyara 2009-09-04 in 09:36 display charset = koi8-r unix charset = koi8-r dos charset = koi8-r
# Где лежат скрпиты, выполняемые доменными компами при загрузке #logon script = scripts\logon.bat logon script = net_map.bat domain logons = Yes os level = 85 preferred master = Yes domain master = Yes idmap uid = 5000-9999 idmap gid = 5000-9999
# Кого не пускать # в итоге она у меня раскомментирована, но настройку # я делал с закомменченой. # настоятельно рекомендую расккомментить, после настройки и введения # самой машины в домен #invalid users = root
#interfaces = 192.168.120.253/24 security = user # Включаем поддержку WINS wins support = yes # Указываем виндовый WINS из другого домена - на время, пока он ещё жив # wins server = 192.168.0.251 dns proxy = yes time server = True
# Перемещаемые профили (если не указать эти пункты пустыми - # профили у пользователей будут перемещаемые) # logon path = \\lissyara\profiles\%U logon path = logon home = template homedir =
# логгинг # log level = 10 passdb:10 auth:10 winbind:10 # log level = 6 log file = /var/log/samba/log.%m
# added by lissyara 2009-09-04 in 16:22 MSK admin users = "@SRO\Domain Admins"
[IPC$] path = /tmp
[print$] comment = Printer Drivers Share path = /usr/home/samba/drivers
[netlogon] path = /nethome/samba/netlogon read only = no browseable = yes
[profiles] path = /nethome/samba/profiles browseable = yes create mask = 0600 directory mask = 0700 read only = no guest ok = yes
Набор шар - опционален, обязательны лишь первые три. Далее - рисуем описанные в конфиге скрипты по управлению пользователями и группами, но, не забываем добавить в /etc/rc.conf такую строку:samba_enable="YES"
Скрипт добавления пользователя для компьютера добавляемого в домен - add_machine_script.sh:#!/bin/sh
# скрипт добавления машины /usr/sbin/pw useradd "$1" -d /dev/null \ -s /sbin/nologin -L "russian" -m \ -g computers -c "computer_account"
# отладка echo "added komp '$@' in `date +%Y-%m-%d` `date +%H:%M:%S`" \ >> /tmp/`basename $0`.log
Скрипт добавления пользователя - add_user_script.sh:#!/bin/sh
# скрипт добавления пользователей #/usr/sbin/pw useradd "$1" -d /usr/home/samba/profiles/"$1" \ # -s /sbin/nologin -L "russian" -m -g ntusers -c "$1" /usr/sbin/pw useradd "$1" -d /dev/null \ -s /sbin/nologin -L "russian" -m -g ntusers -c "$1" # отладка echo "added user '$@' in `date +%Y-%m-%d` `date +%H:%M:%S`" \ >> /tmp/`basename $0`.log
Добавление пользователя в группу - add_user_to_group_script.sh:#!/bin/sh
/usr/sbin/pw groupmod "$1" -m "$2"
# отладка echo "added user '$2' to group '$1' ($@) in `date +%Y-%m-%d` \ `date +%H:%M:%S`" >> /tmp/`basename $0`.log
Скрипт для удаления пользователя из группы - delete_user_from_group_script.sh:#!/bin/sh
/usr/sbin/pw groupmod $1 -d $2
echo "deleted user '$2' from group '$1' ($@) in `date +%Y-%m-%d` \ `date +%H:%M:%S`" >> /tmp/`basename $0`.log
Скрипт переименовывания пользователя - rename_user_script.sh:#!/bin/sh
/usr/sbin/pw usermod $1 -l $2
echo "renamed user '$1' --> '$2' ($@) in `date +%Y-%m-%d` \ `date +%H:%M:%S`" >> /tmp/`basename $0`.log
Скрипт перезапуска сервиса - shutdown_script.sh:#!/bin/sh
# Перезапукаем самбу (в бакгроунде - обязательно!) /usr/local/etc/rc.d/samba restart &
В принципе, все эти скрипты не обязательны. Все они состоят из одной строки, и прекрасно вставляются в конфиг самбы. Вот тока логгировать так проще, при отладке и т.п. Ну и потом по-быстрому глянуть - чё происходило на машине - тоже можно. Так что - ваш выбор - что хотите логгировать - через скрипты, что не хотите - пямо в конфиг команду вписывайте. На мой взгляд - как мимнимум - добавление/удаления пользователей, тоже самое для модификации групп пользователя.
Написанные скрипты делаем исполняемыми и запускаем самбу:server$ chmod +x /usr/local/etc/samba/*.sh server$ /usr/local/etc/rc.d/samba restart
Заводим пользователя root в самбе (в принципе, опять же, не обязательно - можно дальше действовать от административного пользователя, котрый и будет позднее постоянно использоваться. Но - на этом этапе так будет прощще):server$ smbpasswd -a root New SMB password: Retype new SMB password: Added user root.
Рисуем скрипт добавления нужных системных групп, и маппинга виндовых групп на системные:#!/bin/sh #!/bin/bash #### Keep this as a shell script for future re-use
pw groupadd ntadmins pw groupadd ntusers pw groupadd computers
net groupmap add ntgroup="Domain Admins" unixgroup=ntadmins rid=512 type=d net groupmap add ntgroup="Domain Users" unixgroup=ntusers rid=513 type=d net groupmap add ntgroup="Domain Guests" unixgroup=nobody rid=514 type=d net groupmap add ntgroup="Domain Computers" unixgroup=computers type=d
Как вы его обзовёте и куда положите - ваше дело. Использоваться он будет лишь один раз. Запускаем:server$ sh samba_group.sh Successfully added group Domain Admins to the mapping db as a domain group Successfully added group Domain Users to the mapping db as a domain group Successfully added group Domain Guests to the mapping db as a domain group No rid or sid specified, choosing a RID Got RID 3007 Successfully added group Domain Computers to the mapping db as a domain group
Добавляем в администраторов будущего домена нужных пользователей (они, разуммется должны уже быть в системе. Я добавляю рута и nik - человек который будет на том конце провода заниматься машинками с виндой):pw groupmod ntadmins -m root pw groupmod ntadmins -m nik server$ id nik uid=1001(nik) gid=0(wheel) groups=0(wheel),1982(ntadmins) server$
Зачем рута? Просто все кому делал первым делом пытались залезть на виндовые машины и порулить доменом именно им. (с учётом что я не описываю как заводил того же nik в самбе - так же как и рута - вполне наверно логично...) Вводим контроллер домена в домен:server$ net join server Password: Joined domain SRO. server$
Всё. Для верности можно рестартануть самбу и пытаться ввести в домен машины/залогиниться на них юзерами (опять же - если дословно по статье сделано - то только root получиться. ибо в самбе пока больше нет других пользователей).
Оговорки и примечания. В общем - повторяюсь то же что и к предыдущей статье - при удалении пользователя из самбы - грохается системная учётка. Делайте проверку, или юзайте отдельную учётку. При наличии в системе учётки совпадающей по логину с создаваемой - новйо не создаётся - используется существующая. Сразу отвечаю на впорос - почему не самба 3.3 а 3.0. В 3.3 скрипты, по какой-то причине, выполняются от обычного пользователя, который в винде галки ставит - nik в данном случае. Естессно они не работают. Либо sudo мутить, и ловить остальные глюки, либо - использовать проверенное решение. Я предпочёл последнее. Для администрирования качаем утилиты http://support.microsoft.com/kb/173673/sr-cs/
Обновлено 28.05.2010 13:52
|