ДМИТРИЙ ГАЛЫШЕВ
Миграция с Windows на Linux
Сначала давайте выясним для себя, зачем нам это нужно? Если ваш сервер работает под управлением Windows и никаких нареканий к стабильностии скорости его работы нет, не стоит ничего менять. Как известно лучшее – враг хорошего. К сожалению, везет далеко не всем.
Данная статья предназначена в первую очередь для тех, кто, считая, что «качественный продукт не может быть бесплатным», доверил управление своими серверами дорогой операционной системе и вынужден периодически смотреть на «синий экран смерти», терять время на перезагрузки и иногда на восстановление самой ОС.
Приведем сравнение операционных систем Microsoft Windows NT и Linux по нескольким критериям, не претендуя на детальное сравнение, которому посвящено уже много статей.
Windows NT:
- Является коммерческим ПО, за использование каждой его копии необходимо платить.
- Производитель обещает бесплатную техническую поддержку зарегистрированных пользователей, но не несет ответственности за потери данных, произошедшие из-за ошибок в коде ОС, и полученный ущерб в случае чего придется доказывать в суде.
- В комплект поставки входит операционная система, утилиты администрирования, набор простых игр, www- и ftp-сервер IIS.
- Нужные вам утилиты, не входящие в состав OС, приобретаются отдельно.
- Документация к системе приобретается отдельно.
- Выполнение отдельных задач клиентом на сервере невозможно.
Linux:
- Является свободно распространяемым ПО, и, имея одну копию, вы можете использовать ее на любом количестве компьютеров и тиражировать без ограничений.
- Ядро ОС и поставляемые с ним программы вы используете на свой страх и риск без каких-либо гарантий. Это не значит, что техническая поддержка отсутствует – вы можете обратиться за ней к автору программы.
- В дистрибутив входит комплект интернет-утилит как серверной, так и клиентской направленности, инструменты для разработки сетевого взаимодействия с другими ОС, игры и многое другое.
- Если какого-то нужного вам пакета нет в дистрибутиве, вы можете бесплатно получить его с сайта разработчика.
- В состав каждого дистрибутива входит комплект документации по ОС и всем установленным программам.
- Пользователи могут не только выполнять задачи на сервере, но и планировать их выполнение в свое отсутствие.
Если вы хотите узнать больше, обратитесь к статье «Microsoft Windows NT Server 4.0 против UNIX» Джона Кирха, сетевого консультанта и сертифицированного специалиста Microsoft (Windows NT) на http://www.linux.org.ru/books/unix-nt.html. Статья датирована 1998 годом, и с тех пор многое изменилось, но расстановка сил осталась прежней.
Управление Linux основано не на «интуитивно понятном интерфейсе», а на правке различных конфигурационных файлов после чтения документации, которая написана в основном на английском языке, хотя переводов с каждым годом становится больше и больше. Если вы нелюбознательны или нетерпеливы, эта ОС не для вас. Не испугались? По прежнему полны решимости? Ну что же, начнем осваивать новую ось. В любом случае договоримся, что все работающие сервера остаются работать до тех пор, пока к ним обращается хотя бы один пользователь.
Для начала рассмотрим задачу освобождения сервера под управлением Windows NT от обязанностей основного контроллера домена (PDC). Основное преимущество доменной структуры – выполнение скриптов, определенных администратором для выполнения при входе и выходе пользователя домена. Также, с помощью Samba, мы возьмем на себя задачи файл-сервера – предоставление коллективного доступа к своим файлам и папкам.
Применить здесь понятие «к ресурсам» было бы не совсем корректно, так как к ресурсам относятся время процессора, память и так далее. Удаленные пользователи могут использовать и их, но Windows NT такой возможности не предусматривает.
Системы Microsoft Windows 3.11, 9х и NT используют для предоставления совместного доступа к файлам, папкам и принтерам протокол Server Message Block (SMB). В Linux за работу с SMB отвечает пакет Samba. О нем его создатели пишут следующее: «Вот короткий список того, что делает Samba. Для многих сетей можно сказать коротко: «Samba предоставляет полноценную замену серверам Windows NT, Warp, NFS или Netware».
- SMB сервер для предоставления доступа к файлам и принтерам, клиентам с рабочих станций Windows 95, Warp Server и подобным.
- Сервер имен NetBIOS, который ко всему прочему поддерживает список доступных компьютеров в сети. Samba может выступать в роли главного обозревателя вашей сети.
- SMB клиент позволяет пользоваться ресурсами других компьютеров сети (как файлами, так и принтерами) из UNIX, Netware и других ОС.
- Расширение клиента «tar» позволяет делать резервные копии удаленных ресурсов.
- Утилиты командной строки, поддерживающие некоторые возможности администрирования NT, которые могут быть использованы в Samba, NT workstation и NT server.
Вы можете получить больше информации на нашем сайте: http://samba.org/samba.
Если Samba еще не установлена, обращаемся к компакт-диску с дистрибутивом и устанавливаем все пакеты, содержащие в имени слово «samba». Типичные настройки обычно описаны в файле /etc/samba/smb.conf-sample и подходят большинству пользователей.
Рассмотрим его поподробнее. Файл состоит из секций, которые определяются именем в квадратных скобках.
В секции [global] объявляются общие переменные, влияющие на работу демонов.
В секции [homes] предоставляется возможность монтирования удаленными пользователями своих личных папок, находящихся на сервере.
Секция [printers] открывает доступ ко всем установленным в системе принтерам.
Переименуем файл /etc/samba/smb.conf-sample в smb.conf и начнем его править под себя.
Полезными могут оказаться «подстановочные переменные», которые при чтении заменяются актуальными для сеанса значениями. Например, «%u» будет заменено именем подключающегося пользователя, а «%L» – NetBIOS-именем сервера. Полный список этих переменных Вы найдете в man-руководстве к smb.conf.
Вот некоторые глобальные параметры, на которые стоит обратить внимание:
- workgroup – задает имя рабочей групппы или домена, в который входит компьютер.
- hosts allow – список компьютеров и сетей, которым разрешен доступ, разделенный пробелами.
- guest account – имя пользователя с правами гостя. По умолчанию – это nobody. Пользователь должен быть зарегистрирован в системе. Можно указать с помощью параметра username map файл, содержащий толкование передаваемых клиентом имен для сервера. Файл будет читаться построчно; в строке слева от знака «=» должно стоять имя, воспринимаемое сервером, справа – соответствующее ему имя, которое может передавать клиент. Например, если в файле содержится строка nobody = guest pcguest пользователям guest и pcguest будет предоставлен доступ как пользователю nobody.
- security – один из важных параметров конфигурации – модель аутентификации.
- security = user – для получения списка ресурсов пользователь должен быть опознан сервером. Будьте внимательны: по умолчанию ресурсы, открытые гостям, не будут доступны тем, кого сервер «не знает».
- security = share – получение списка ресурсов не требует аутентификации. Клиент посылает запрос при подключении к конкретному ресурсу.
- security = server – с точки зрения клиента, эта модель ничем не отличается от первой. Разница в том, что полученные имя/пароль Samba попытается проверить на доверенном сервере (например, НТ). Если попытка провалится, для этого соединения модель сменится на «user».
- security = domain – отличается от предыдущей тем, что аутентификация происходит на PDC или BDC. Пароли должны передаваться в зашифрованном виде.
- encrypt passwords – шифрование паролей. По умолчанию этот параметр выставлен в «no» и пароли передаются по сети открытым текстом.
- interfaces – привязка к конкретным интерфейсам. Можно указать имя интерфейса со звездочкой вместо номера, тогда привязка будет ко всем найденным интерфейсам этого типа. Также можно указать просто IP-адрес или пару IP/маска сети.
- local master – определяет, претендовать ли на роль локального обозревателя сети.
- os level – так называемый «уровень» ОС. Для справки: у НТ-сервера этот параметр равен 32, у PDC – 64. Максимальное значение – 255.
- domain master – определяет, претендовать ли на роль основного обозревателя домена. Если сеть состоит из нескольких сегментов, то локальные обозреватели каждого сегмента будут синхронизировать свои списки с ним.
- preferred master – сообщает демону nmbd, что он является приоритетным обозревателем рабочей группы или домена, и это вынуждает его устраивать выборы при запуске, а в случае проигрыша – каждые 6 минут.
- wins support – включает поддержку Samba-сервером WINS – Windows Internet Naming Service, службы определения адресов, сопоставляющей имена компьютеров в сети Microsoft с адресами IP.
- wins server – указывает IP-адрес WINS-сервера сети. Этот параметр не может указывать на свой IP, т.е. используется только в случае, когда wins support = no.
- domain logons – позволяет Samba выступать в роли контроллера домена.
- logon path – указывает на каталог, где будут храниться профили пользователей.
Из параметров, применимых к конкретным разделяемым ресурсам, следует отметить:
- comment – краткое описание ресурса, выводимое большинством клиентов рядом с его именем.
- path – реальное расположение разделяемого ресурса в файловой системе сервера.
- browseable – определяет, будет ли выдаваться имя ресурса на запрос о доступных ресурсах сервера.
- writeable – определяет, возможна ли запись или модификация файлов ресурса пользователем.
- guest ok – разрешает доступ к ресурсу всем пользователям сервера. (См. глобальный параметр security).
- valid users – список пользователей, которым разрешен доступ к ресурсу. Как и в любой список пользователей в файле smb.conf можно добавлять и группы, предварив имя группы символом «@».
- write list – список пользователей, которым разрешена запись и модификация файлов ресурса. Значение параметра writeable для этих пользователей не учитывается.
- create mask – стандартная UNIX-маска, определяющая права доступа к вновь создаваемому файлу. Directory mask определяет права доступа к вновь создаваемому каталогу.
Полный список опций, употребляемых в файле, находится в man-руководстве к smb.conf. После редактирования рекомендуется проверить его на предмет ошибок и противоречий с помощью программы testparm. Если ошибки есть, она сообщит о них и, скорее всего, подскажет причину их возникновения.
Сначала настраиваем Samba как обычного сетевого клиента – она не должна претендовать ни на роль локального обозревателя, ни тем более – контроллера домена. Если таковые уже есть, то присваиваем значение «no» параметрам local master, domain master и preferred master.
Если разграничения доступа еще нет, самое время подумать о нем. В большинстве случаев несложно определить группы пользователей, работающие с определенными группами файлов. Например, бухгалтерия работает с базами бухгалтерской программы и не интересуется проектами программистов.
Мне не известен сколько-нибудь реальный способ переноса базы пользователей из Windows NT в Linux, поэтому придется делать это вручную. Неудобно, но в этом есть свои положительные стороны – найдется несколько неиспользуемых учетных записей, а также можно будет перераспределить пользователей по группам.
На момент написания статьи Samba (версии 2.2.5) имеет собственную базу пользователей, но не поддерживает пользователей, не имеющих учетной записи в системе. Разработчики обещают со временем перейти на независимую базу пользователей, но пока придется пользователей заводить сначала в системе. Пользователям, у которых не будет доступа к терминалу сервера (в идеале всем, кроме администратора) назначаем /bin/false в качестве командного интерпретатора и блокируем учетную запись, после чего прописываем их в базе Samba командой smbpasswd дважды: с ключом «-a» – для занесения в базу, с ключом «-e» – для снятия блокировки с записи.
Хорошо, если новая операционная система ставится на специально купленный сервер, еще лучше, если сервер куплен с предустановленной нужной нам ОС. Но как быть, если сервер один и нельзя его трогать до тех пор, пока все пользователи не смогут получить гарантированный доступ к своим файлам? Придется использовать любой доступный компьютер как «временный сервер». На него ставим тот же дистрибутив, что предполагаем ставить на основной сервер, и постепенно перенесем все ресурсы, предоставляемые старым сервером.
Какая машина справится с этой работой зависит от предполагаемой нагрузки. Достоверно известно, что Celeron 700/196 Мб RAM/30 Гб HDD в состоянии обслуживать 15 клиентов, интенсивно работающих с большим количеством файлов при средней нагрузке ~10%.
Разделяемые SMB ресурсы делим на:
- Общедоступные (папка с драйверами и дистрибутивами программ, «помойка»).
- Доступные группе (папки с данными, с которыми работает ограниченное количество лиц, например папка с базами бухгалтерской программы).
- Домашние (папки привилегированных пользователей, доступные только им).
Наиболее часто допускаемая ошибка на этапе переноса данных – невнимательность к атрибутам вновь перенесенных файлов. Владельцем для них лучше всего назначить пользователя root, а группу-владельца – ту, что будет с этими файлами работать. Ну и не забыть позволить перезаписывать файлы членам группы-владельца.
Необходимо пройтись по пользователям и проверить доступ с их рабочих станций к новому серверу: чтение/запись в папку; чтение/запись в файлы, созданные другими членами группы, а также членами групп, имеющих смежный доступ в папку; отсутствие доступа в неразрешенные папки.
Если в вашей сети используются домены, проверьте smb.conf сервера:
Шифрование паролей должно быть включено.
[global]
...
encrypt passwords = yes
...
Сервер должен поддерживать вход пользователей в домен и предоставлять разделяемый ресурс NETLOGON.
[global]
...
domain logons = yes
...
[netlogon]
path = /usr/local/samba/lib/netlogon
read only = yes
write list = ntadmin
Сервер должен быть главным обозревателем домена.
[global]
...
domain master = yes
...
Если все в порядке, можно добавлять рабочие станции в домен.
Рабочие станции, функционирующие под управлением Windows NT/2000, используют так называемые «машинные» учетные записи – метод проверки подлинности рабочей станции (не пользователя), чтобы избежать входа в домен рабочей станции с таким же именем NetBIOS и получения прав пользователя домена. Рабочие станции, функционирующие под управлением Windows 9x/Me, таких учетных записей не используют, поэтому не могут считаться полноправными членами домена.
Существует два метода создания «машинных» учетных записей – ручной и автоматический.
Первый метод подразумевает выполнение вручную трех команд на сервере для каждой рабочей станции домена:
root# useradd -g 100 -d /dev/null -c <имя_машины> -s /bin/false <имя_машины>$
root# passwd -l <имя_машины>$
root# smbpasswd -a -m <имя_машины>
Вместо <имя_машины> подставляется NetBIOS-имя рабочей станции домена.
Второй метод рекомендован разработчиками Samba как более безопасный и требует лишь добавления в секцию [global] строки:
add user script = /usr/bin/adduserscript %u
Это подразумевает, что в каталоге /usr/bin существует скрипт adduserscript примерно следующего содержания:
#!/bin/sh
/usr/sbin/useradd -d /dev/null -g 100 -s /bin/false -m $1
После этого с добавляемой рабочей станции заходим в домен как привелигированный пользователь (root, если не указан другой параметром admin user), и создаем учетную запись рабочей станции домена. Пока это не сделано, попытки зайти как обычный пользователь провалятся, даже если пользователь существует.
После того, как вся нагрузка будет перенесена на «временный» сервер, а старый сервер – выключен, подождем денёк-другой возникновения проблем и только послеэтого начинаем установку Linux на основной сервер. После установки системы конфигурационные файлы и файлы пользователей просто переносятся с «временного» сервера.
Итак, все готово, начинаем. Прикидываем время на переброску всех необходимых файлов со старого сервера на новый и объявляем профилактику на нужное время плюс 10 минут на неожиданности (если мы не допустили оплошностей при подготовке, работа возобновится как только файлы будут скопированы).
Старому серверу меняем NetBIOS-имя и перезапускаем Samba. Новому присваиваем имя старого. Перезапускаем Samba.
Все. Можем переходить к замене любимого лакомства для Nimda и CodeRed – Microsoft Information Server на самый популярный в Интернете www-сервер Apache, прокси-сервер Squid и ftp-сервер proftpd.
Но это уже немного другая история...