Статья напечатана в журнале
Традиционное видео для дочитавших до конца
Администрирование даже сравнительно небольшой сети настроенной как рабочая группа может замотать любого даже самого трудолюбивого администратора. Постоянно возникающие проблемы с доступом, пропавшими файлами и сетевыми ресурсами, бесконтрольность пользователей способная обесценить любую систему безопасности и прочие проблемы. Выход из такой ситуации только один — взять все под свой контроль, то есть установка контролера домена. Решить ее с минимальным бюджетом можно только использовав Linux с пакетом Samba.
Не смотря на все, я бы советовал несколько раз подумать, подводных камней здесь предостаточно, по поводу использования Samba, а лучше дождаться версии 4.0 которая вот вот уже должна появится.
Установка Samba
Коротко пакет Samba
Для установки контролера домена был выбран дистрибутив Ubuntu 6.06 LTS. В Debian, ALTLinux и других дистрибутивах использующих apt, процесс будет выглядеть аналогично. Установка Samba в других дистрибутивах будет, отличается, только командами установки пакетов. Настройка же везде одинакова. Для установки сервера Samba в Ubuntu достаточно ввести команду:
$ sudo apt-get install samba
Для установки пакета с документацией можно добавить samba-doc. Если потребуется еще и клиент, то добавляем пакет smbclient. Единственное, но. В репозитарии на момент написания статьи была версия 3.0.22, вероятно кто-то захочет использовать последнюю доступную. Для того чтобы не возиться с зависимостями, вводим:
$ sudo apt-get build-dep samba-common
Затем распаковываем архив, заходим внутрь каталога и конфигурируем.
$ tar xzvf samba-3.0.28.tar.gz
$ cd samba-3.0.28
$ ./autogen.sh
$ ./configure —prefix=/usr —with-ads —enable-cups
То есть, устанавливаем в каталог /usr, включаем поддержку Active Directory (по умолчанию auto, но если не будет каких, то пакетов лучше пусть ругается, чем потом разбираться, почему оно не работает), и поддержку печати. Остальное будет добавлено автоматически. Затем следует стандартные «make; sudo make install». Вот собственно и все премудрости.
Конфигурационный файл Samba
Конфигурационный файл сервера традиционный для Unix систем. Это обычный текстовый файл (с подробными комментариями на английском внутри). Для того чтобы задействовать большинство параметров достаточно только раскомментировать или подправить соответствующую строчку. Файл /etc/samba/smb.conf не исключение. Он состоит из именованных разделов, начинающихся из имени раздела заключенного в квадратные скобки. Внутри каждого раздела находится ряд параметров в виде параметр=значение. Файл конфигурации содержит четыре специальных раздела: [global], [homes], [printers] и отдельные ресурсы (shares). Как следует из названия раздел [global] содержит глобальные настройки, которые будут действительны для всех. Некоторые затем можно переопределить в секциях отдельных ресурсов. Параметров много, некоторые, если не указаны явно будут использованы значением по умолчанию. На самых интересных остановлюсь более подробно. При установке из исходных текстов и в некоторых дистрибутивах сначала необходимо переименовать шаблон из smb.conf-sample в smb.conf.
Итак, открываем файл в любимом текстовом редакторе и заполняем:
[global]
workgroup = WORKGROUP # название рабочей группы в сети Windows
netbios name = server.com # имя сервера в сети
server string = Samba Server %v # комментарий, который виден в окне свойств просмотра сети
security = ADS
# Значений у security может быть много: user — на уровне пользователя; share — на уровне ресурсов;
# server можно использовать при хранении базы паролей на другом SMB-сервере.
# В случае если сервер является членом домена, используется значение security = domain.
##auth methods = winbind
passdb backend = smbpasswd:/etc/samba/smbpasswd
# этот параметр позволяет указать, кто и где будет хранить пароли, возможно использование
# нескольких систем, при этом они указываются через пробел, новые пользователи по умолчанию
# будут добавляться в первый. Через «:» указывается место хранения, если оно отлично от
# используемого по умолчанию. Так smbpasswd хранит пароли в файле /etc/samba/smbpasswd,
# поэтому его можно опустить.
# Кроме этого возможны параметры tdbsam,ldapsam, nisplussam, xmlsam и mysql.
# Разрешаем доступ к Samba только с определенных интерфейсов и адресов
hosts allow = 192.168.1.0/24 127.0.0.0/8
interfaces = eth0, lo
bind interfaces only = yes
# Чтобы сделать Samba PDS, обязательно включаем следующие параметры
local master = yes
os level = 65
domain master = yes
preferred master = yes
domain logons = yes
# командный файл, который будет выполнен при успешной регистрации пользователя
logon script = login.bat
logon path =
# Включаем WINS
wins support = yes
name resolve order = wins lmhosts host bcast
dns proxy = no
# разрешаем Samba быть для Windows клиентов сервером времени
time server = yes
# Займемся кодировкой
unix charset = utf8
dos charset = cp1251
display charset = cp1251
# эта секция нужна, если сервер будет управляться удаленно
add user script = /usr/sbin/useradd -m %u
delete user script = /usr/sbin/userdel -r %u
add group script = /usr/sbin/groupadd %g
delete group script = /usr/sbin/groupdel %g
add user to group script = /usr/sbin/usermod -G %g %u
add machine script = /usr/sbin/useradd -s /bin/false -d /dev/null -M %u
passwd program = /usr/bin/passwd %u
passwd chat = «*Новый пароль:*» %n\r «*Новый пароль (снова):*» %n\r \ «*Пароль изменен*»
# Усилим безопасность
encrypt passwords = true
null passwords = no
hide unreadable = yes
hide dot files = yes
map to guest = Bad User
invalid users = root guest admin @wheel
# Журналы
log file = /var/log/samba/log.%m
max log size = 1000
syslog only = no
syslog = 0
panic action = /usr/share/samba/panic-action %d
# в этой секции описывается, где взять профиль по умолчанию для новых пользователей
# и где искать командный файл,
[netlogon]
path = /home/samba/netlogon
read only = yes
browseable = no
guest ok = no
Сетевые ресурсы и принтеры
Создаем ресурс, в котором будут находиться документы:
[docs]
comment = Documentations # комментарий, который виден в окне свойств сети
path = /home/samba/docs
available = yes
browseable = yes # определяет, выводить ли ресурс в списке просмотра.
writable = yes # разрешает или no — запрещает запись
create mode = 0750 # права доступа для вновь созданных файлов
directory mode = 0775 # тоже, но только для каталогов
При желании можно добавить и CD/DVD привод:
[cdrom]
comment = DVD-ROM
writable = no
locking = no
path = /media/cdrom
public = yes
preexec = /bin/mount /media/cdrom
postexec = /bin/umount /media/cdrom
И в /etc/fstab:
/dev/scd0 /media/cdrom iso9660 defaults,noauto,ro,user 0 0
С помощью SAMBA можно организовать возможность сетевой печати. Для этого в секции [global] необходимо дописать следующие строки:
load printers = yes
printcap name = cups # описание принтеров
disable spoolss = Yes
show add printer wizard = No
printing = cups # система печати
Далее каждый принтер описывается аналогично дисковому ресурсу с единственным исключением, параметр printable = yes. Например:
[printers]
path = /tmp # указывает на каталог, в который помещаются задания на печать
browseable = yes
printable = yes
read only = yes
После создания файла необходимо протестировать его с помощью утилиты testparm. При тестировании будут выведены все установки даже те, которые установлены по-умолчанию поэтому внимательно просмотрите результат. Хотя стоит помнить, что с ее помощью можно обнаружить лишь синтаксические ошибки, а не логические. Поэтому нет никакой гарантии, что описанные в файле сервисы будут корректно работать. Но если программа не ругается, можете надеяться, что при запуске файл будет загружен без проблем. У меня были выданы следующие ошибки:
ERROR: pid directory /var/run/samba does not exist
WARNING: passdb expand explicit = yes is deprecated
В первом случае создаем каталог «sudo mkdir /var/run/samba». Заодно создаем и остальные каталоги, описанные в файле:
$ sudo mkdir -p /home/samba/{netlogon,docs}
Чтобы убрать вторую, добавляем в секцию global параметр:
passdb expand explicit = no
Обрати внимание на надпись «Server role: ROLE_DOMAIN_PDC». Это значит, что Samba настроен на работу как PDC, чего собственно мы и хотели добиться.
Теперь создаем файл login.bat, который будет выполнен при регистрации пользователей. В нашем примере в нем содержаться команды для автоматического монтирования сетевого диска и синхронизации часов:
$ sudo mcedit /home/samba/netlogon/login.bat
net time \\grinder.com /set /yes
net use h: \\grinder.com\docs
Помните, этот файл должен быть в стиле Windows, то есть с ВК/ПС в конце строки. Лучше его подготовить в Блокноте, а затем скопировать в Linux систему.
Если установка Samba производилась из пакетов, то стартовые скрипты уже готовы. Запускаем сервер:
$ sudo /etc/init.d/samba start
Команда «ps ax | grep mbd» должна показать наличие процессов. Вывод «nestat -a» должен показать наличие открытых портов (135, 139) характерных для Windows систем. C помощью следующей команды получаем список ресурсов сервера:
$ smbclient -L localhost -U user%password
Если после всех перечисленных действий так и не удалось организовать доступ к ресурсам SAMBA, то в дальнейшей настройке помогут такие утилиты, как ping для проверки доступности узла в сети, nmblookup (для запроса имен NetBIOS) или уже на крайний случай tcpdump. И конечно же журналы, расположенные в /vat/log/samba. В них в большинстве случаев можно найти решение. Не стоит забывать и про права доступа. Ведь назначив для пользователя каталог /gde/to/w/glubine, пользователь должен зайти и в предыдущие каталоги (право на выполнение).
Заводим пользователей
Установив необходимую конфигурацию необходимо создать учетные записи пользователей. В нашем случае данные об аунтентификации пользователей SAMBA будут записаны в файл /etc/samba/smbpasswd, в котором содержатся имена и зашифрованные пароли пользователей. Пользователи Windows обязательно должны иметь учетную запись на Linux компьютере. Так как механизм шифрования в сетях Windows-машин не совместим со стандартными Unix механизмами, то для заполнения файла паролей используется отдельная утилита — smbpasswd:
$ sudo useradd -s /bin/false -d /home/samba/sergej sergej
$ sudo smbpasswd -a sergej
$ sudo smbpasswd -е sergej
В этом примере добавляется новый пользователь sergej с фиктивной оболочкой (возможны варианты /sbin/nologin, /dev/null) и домашним каталогом /home/samba/sergej. Затем создается пароль для пользователя sergej и последним шагом включаем доступ пользователя, так как по умолчанию отключен. Если осмотреть сейчас в файл /etc/samba/smbpasswd можно увидеть новую запись. Весьма желательно создать в cron задание, которое периодически создавало резервную копию этого файла.
В системах Windows по умолчанию имеется несколько групп имеющих четко заданную роль. Это Domain Admins, Administrators, Users, Guests и прочие. Чтобы это все работало, необходимо сопоставить группы Windows и Linux. Для просмотра имеющихся в домене групп используем команду:
$ sudo net groupmap list
System Operators (S-1-5-32-549) -> -1
…
Domain Admins (S-1-5-21-497369389-3960344947-4188168368-512) -> -1
Domain Guests (S-1-5-21-497369389-3960344947-4188168368-514) -> -1
Domain Users (S-1-5-21-497369389-3960344947-4188168368-513) -> -1
И так далее. Знак «-1» указывает, что пока ни одна группа не сопоставлена. Обратите внимание на цифры. Этот так называемые sambaPrimaryGroupSID и sambaSID (SID — security identifier в Windows является некий аналог UID в Linux, уникальный для всей сети). Получить его можно командой:
$ sudo net getlocalsid
Эти цифры могут пригодиться. Последние последние три цифры «Domain Admins» -> 513 это так назваемый RID (relative identifier), уникальный идентификатор пользователя домена. Его рекомендуется указывать при сопоставлении пользователей. Чтобы управлять доменом, нам нужно сопоставить группу Linux c «Domain Admins». Можно использовать уже имеющиеся группы, а можно создать специальную для работы в домене, чтобы затем было бы легче разобраться:
$ sudo groupadd domain_admins
$ sudo net groupmap modify ntgroup=»Domain Admins» unixgroup=domain_admins
Можно и так:
$ sudo net groupmap add sid=S-1-5-21-497369389-3960344947-4188168368-512 unixgroup=domain_admins type=domain
Аналогичные команды вводим при сопоставлении других пользователей, только включаем их в Domain Users. Помните, Windows не допустит, чтобы имя пользователя совпадало с именем группы. Можно сопоставить нескольких пользователей Windows одному пользователю Linux для этого создается файл /etc/smbusers.map. В нем отдельной строкой задается каждое сопоставление:
пользователь_ Linux = user_win1 user_win2 user_winN
А в секции [global] добавь строку username map = /etc/smbusers.map. Команда на создание новой доменной группы практически аналогична:
$ sudo net groupmap add ntgroup=»Sales» unixgroup=domain_sales type=d
Парметр type определяет тип группы и может принимать два значения: d (domain global) или l (domain local). Для удаления доменной группы вводим «net groupmap delete» с указанием не нужной группы. Компьютеры в отличие от Windows 2003 при использовании Samba также следует заносить вручную. Для этого стоит создать еще одну группу (например, domain_computers), пользователи, входящие в которую и будут компьютерами:
$ sudo groupadd domain_computers
$ sudo useradd -G domain_computers -s /bin/false -d /dev/null comp1$
$ sudo passwd -l comp1$
$ sudo smbpasswd -a -m comp1
При добавлении системного пользователя значок «$» в конце имени обязателен. Добавляем пользователя sergej в группу domain_admins и проверяем:
$ sudo net rpc group members «Domain Admins» -U sergej%password
Теперь добавляем компьютер в домен:
$ sudo net rpc join -Usergej%password
Проверить подключение можно командой «net rpc testjoin». Пользователи созданы по умолчанию группа «Domain Admins» имеет права только на раздачу привилегий. Список всех розданных привилегий можно просмотреть командой:
$ sudo net rpc rights list accounts -U sergej%password
А список возможных привилегий, так:
$ sudo net rpc rights list -U sergej%password
SeMachineAccountPrivilege Add machines to domain
SePrintOperatorPrivilege Manage printers
SeAddUsersPrivilege Add users and groups to the domain
SeRemoteShutdownPrivilege Force shutdown from a remote system
SeDiskOperatorPrivilege Manage disk shares
SeBackupPrivilege Back up files and directories
SeRestorePrivilege Restore files and directories
SeTakeOwnershipPrivilege Take ownership of files or other objects
Чтобы иметь возможность работать по полной, сначала нужно дать самим себе все привилегии:
$ sudo net rpc rights grant «server.com\Domain Admins» SeMachineAccountPrivilege SePrintOperatorPrivilege SeAddUsersPrivilege SeRemoteShutdownPrivilege SeDiskOperatorPrivilege SeBackupPrivilege SeRestorePrivilege SeTakeOwnershipPrivilege -U sergej%password
Successfully granted rights.
Вот собственно и все теперь мы имеем контролер домена под управлением Linux, пользователей обладающих необходимыми правами и доступные сетевые ресурсы. Хочется также напомнить, что имеются графические инструменты позволяющие упростить в некоторых случаях настройку Samba.
Это SWAT входящий в состав SAMBA (требуется установить пакет swat) и универсальный инструмент Webmin. Последний кроме контроля и основных настроек имеет еще ряд полезных возможностей, например, автоматически конвертировать пользователей и группы Linux в Windows. Успехов.
Переменные в Samba
В секции global возможно использование различных переменных для более гибкой настройки работы сервера, после установки соединения вместо них подставляются реальные значения. Например, в директиве log file = /var/log/samba/%m.log , параметр %m помогает определить отдельный лог-файл для каждой клиентской машины. Наиболее употребительные переменные, используемые в секции global:
%a — архитектура ОС на клиентской машине (возможные значения Win95, Win NT, UNKNOWN и т.д.)
%m — NetBIOS-имя компьютера клиента.
%L — NetBIOS-имя сервера SAMBA.
%v — версия SAMBA.
%I — IP-адрес компьютера клиента.
%T — дата и время.
%u — имя пользователя использующего сервис.
%H — домашняя директория пользователя %u.
Также для более гибкой настройки применяется директива include использующая приведенные выше переменные . Например include = /etc/samba/smb.conf.%m и теперь при запросе с компьютера sales при наличии файла /etc/samba/smb.conf.sales конфигурация будет взята из этого файла, если отдельного файла для какой, то машины не будет для работы с ней будет использован общий файл. Также имеется интересная возможность создания виртуального сервера. Для этого используется параметр netbios aliases.
netbios aliases = sales accounting admin
И указываем серверу для каждого виртуального сервера использовать свой конфигурационный файл.
include = /etc/samba/smb.conf.%L
И теперь в окне обозревателя сети будет видны три сервера: sales, accounting, admin.
//
Grinder, не сочти меня за ламера, но что такое PDC?
//
Ой, я и забыл. PDC это главный контролер домена. У меня есть статьи и видео по установке PDC под Win2k3, но на пингвиньем сайте пока не хоца выкладывать статьи.
//
Оно и понятно: сайт ведь пингвинний
//
Да пока и так куча материала, нужно его перебирать.
//
—
И теперь в окне обозревателя сети будет видны три сервера: sales, accounting, admin.
—
Будет виден один сервер с NETBIOS именем, и расшаренные папки? Разве не так?
//
доброго времени суток! не подскажите как подключить автоматически второй сетевой диск определенной группе?