Ключевые слова:netbsd, bsd, samba, domain, pdc, windows, win, (найти похожие документы)
From: Key <http://www.unixtalk.ru>
Date: Mon, 22 Oct 2005 14:31:37 +0000 (UTC)
Subject: PDC для сети Windows XP используя NetBSD 2.0.2 и Samba 3.14a.
Оригинал: http://www.unixtalk.ru/showthread.php?t=27
0. Преамбула.
-------------
Нелюбители моих разглагольствований могут спокойно проскипать этот
раздел и переходить к пункту 1. :)
Я админю корпоративную сетку из 15 компьютеров под управлением Windows
XP (из них 3 - ноутбуки под Home, остальные - Professional). Сеть
подключена к интернету посредством шлюза на Slackware 9.1 (iptables,
Exim, Squid + SARG + rejik3, локальный dns-сервер, локальный ftp).
Также в сети находится терминальный сервер для 1C на Windows 2003
Server. Как вы понимаете, в сети не было Primary Domain Controller
(PDC), что превращало её администрирование в тихий ад. Особенно много
проблем было с shared-папками, которые сами-собою исчезали, затем
снова появлялись, вдруг cтановились недоступными для некоторых
пользователей и так далее, и тому подобное... Плюс ко всему, для
терминального сервера понадобилась машина, на которую можно было бы
скидывать ежедневную "горячую копию" БД. Все это привело к принятию
решения о покупке еще одного сервера для доменного контроллера и
backup'a для win2003. К сожалению, оборудование выбирал и покупал не
я, что привело к некоторым последствиям...
Купленный сервер имел следующие характеристики: P4 3GHz, 1GB RAM, 4IDE
160GB + материнская плата от MSI с on-board LAN (RealTek 8169) на
чипсете i915(P/G). С этой-то платой и начались все проблемы. На неё
ничего не хотело вставать. Linux 2.6.11.6 пропатченный до 2.6.12 (на
тот момент самый свежий) вставал, если в конфигурации PCI в ядре
прописать PCI=Direct. И все бы хорошо, но только после этого шина PCI
вообще отказывалась работать. Симптоматика следующая: например сетевая
карта(как встроенная, так и любая другая) поднималась ifconfig'om, но
пакеты через неё не шли. Аналогичная ситуация происходила и с другими
устройствами (flash-диск: видим устройство, но примонтировать не
можем). Активное googl'енье и раскопки форумов не помогли, а время на
установку было ограничено и не позволяло как следует разобраться с
этой проблемой. Я попробовал FreeBSD: 4.11 висла при загрузке ядра,
5.3 не видела ide-контроллеров. Ситуация складывалась, скажем так,
пренеприятнейшая ;).
В последней надежде, уже отчаившись, я вставил в этот злосчастный
сервер дискету g4u (дистрибутив для клонирования дисков, основанный на
NetBSD). И... оно загрузилось, обнаружило диски и подняло сеть!
Времени было совсем мало и я полез на сайт NetBSD. Приятно удивил
размер дистрибутива(170Mb) - траффик-то у нас не резиновый. Рискну...
Я около двух лет серьезно занимаюсь Linux'ом (у меня дома Gentoo) и
немного знаком с FreeBSD, но NetBSD увидел в первый раз. :) Все что
написано ниже - результат активного наступания на множество граблей.
Ни в коем случае не утверждается, что это руководство во всем
правильное и _оптимальное_. Это - всего лишь попытка заполнить ту
пустоту руководств по NetBSD на русском языке и предназначно для таких
как я - чтобы не лишний раз не ошибаться при решении подобной задачи.
Я вам уже надоел, не так ли? Что ж, теперь можно приступать собственно
к солюшену:
"Let the game begins!" <Blind Guardian>
1.
Я скачал свежую версию NetBSD 2.0.2 отсюда:
ftp://ftp.netbsd.org/pub/NetBSD/iso/2.0.2/i386cd.iso. Я не буду
описывать процесс установки, он очень хорошо изложен в официальном
руководстве к NetBSD (можно найти на http://www.netbsd.org, есть перевод
от ruNetBSD).
Будем считать, что вы уже поставили саму систему. Маленькое замечание:
при установке я все делал по доке (только немного изменил
размеры предлагаемых разделов соответсвенно моим подребностям: swap
сделал 1Gb, /var - 2Gb, /home - 140GB). Устанавливал я через ftp.
Ставил все пакеты, кроме x-вых. Время выбрал - UTC, регион
Europe/Moscow.
2.
Сразу после установки отредактировал /etc/fstab:
...
/dev/wd0g /home ffs rw,userquota,softdep 1 2
...
Опция usrquota означает включение дисковых квот для пользователей (я
ограничил доступное дисковое пространство для пользоватльских
сетевых дисков и профайлов). softdep - включение Soft-Dependences, что
позволяет ускорить работу с диском. Собственный опыт показал,
что разница по скорости с softdep и без них огромная.
3.
Следующим шагом, я изменил /etc/rc.conf следующим образом:
if [ -r /etc/defaults/rc.conf ]; then
. /etc/defaults/rc.conf
fi
# If this is not set to YES, the system will drop into single-user mode.
#
rc_configured=YES
sshd=YES
hostname=shaman.my-domain.ru
# Network Configuration
#
auto_ifconfig=yes
ifconfig_re0="inet 192.168.0.7 netmask 255.255.255.0" defaultroute=192.168.0.1
# Add local overrides below
#
wscons=YES
sshd=YES включает автоматическую загрузку SSH при старте системы,
hostname задает имя хоста, строчки после комментария
'Network Configuration' задают автоматическре поднятие сетевого
интерфейса при загрузке. Сетевые интерфейся можно просмотреть
через `ifconfig -a`. (называются они не как в linux'e eth0 eth1 ..., а
согласно имени карты, для RealTek'a это re0, re1 и.т.д.)
4.
После этого я отредактировал файл /etc/hosts:
::1 localhost localhost.
127.0.0.1 localhost localhost.
192.168.0.7 shaman.my-domain.ru shaman
5.
Сделав все это, я решил, что для нормальной работы мне все-таки не
хватает некоторых полезных приложений и скачал с
ftp://ftp.netbsd.org/pub/NetBSD/packages/2.0/i386/ALL/ следующие пакеты:
bash-3.0pl16.tgz
jed-0.99.16nb1.tgz (glib2-2.6.3.tgz, libslang-1.4.9nb3.tgz)
links-2.1.0.17.tgz
perl-5.8.6nb3.tgz
setquota-0.1.tgz
Я поставил их с помощью pkg_add *.tgz. При установке позникали
Warning'и, что версия пакета несоовествует версии системы (2.0.0 вместо 2.0.2),
но это никоим образом не повлияло на дальнейшую работу. С помощью chsh
перевел root'a на /usr/pkg/bin/bash, а также добавил в /etc/profile
строчку: export PS1='\u@\h:\w\$', но это кому как нравится...
6.
После всего вышеперечисленного я добавил пользователя:
useradd -G users,wheel -m -s /usr/pkg/bin/bash key
wheel - группа, пользователи которой могут становится суперюзерами
(выполнять команду su).
7.
Собственно на этом настройка NetBSD закончилась, и начинается настройка
Samb'ы.
Необходимо скачать последнюю самбу с официального сайта (на тот момент
это была samba 3.14a), распоковать в отдельную папку и
собрать следующим образом (из под пользователя):
$./configure --prefix=/usr --with-datadir=/usr/share --with-sys-quotas \
--with-configdir=/etc/samba --with-lockdir=/var/run/samba $make $su -c 'make install'
8.
Для samb'ы я использую следующий конфиг (поместите его в
/etc/samba/smb.conf и _внимательно_ изучите комментарии, если вы ранее
не сталкивались с samb'ой или не ставили её под BSD-системы):
[global]
# Рабочая группа.
workgroup = WORKGROUP
# Имя сервера netbios
name = SHAMAN
interfaces = re0, lo
bind interfaces only = Yes
passdb backend = tdbsam
pam password change = Yes
passwd chat = *New*Password* %n\n *Re-enter*new*password*%n\n*Password*changed*
username map = /etc/samba/smbusers
unix password sync = No
log level = 1
syslog = 0
log file = /var/log/samba/%m
max log size = 50
smb ports = 139 445
# У меня в локальном DNS-сервере не прописаны имена для компьютеров пользователей
name resolve order = hosts
wins bcast time server = Yes
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'
# Следующая строчка для автоматичесого добавления машины прекрасно работает в linux,
# но не работает в *BSD т.к. имя пользователя в команде useradd не должно
# содержать знака '$'. Поэтому вручную добавляем каждую машину с помощью
# команды `useradd -s /bin/false -d /tmp имя_машины`, а затем используя
# vipw добавляем к имени '$'. Криво, но работает.
#
add machine script = /usr/sbin/useradd -s /bin/false -d /tmp '%u'
# Тажке можно использовать патч на useradd отсюда:
# http://mail-index.netbsd.org/netbsd...10/15/0010.html
# , но я не стал мучиться с пересборкой, т.к. компьютеров у меня в сети мало и
# прописывать вручную их нетрудно.
shutdown script = /home/samba/scripts/shutdown.sh
abort shutdown script = /sbin/shutdown -c
# в logon.bat происходит синхронизация часов.
logon script = scripts\logon.bat
logon path = \\%L\profiles\%U
logon drive = X:
logon home = \\%L\%U
domain logons = Yes
preferred master = Yes
wins support = Yes
utmp = Yes
map acl inherit = Yes
# IPC необходимо для нормальной работы Windows-домена:
# browse network, browse folder и прочее.
[IPC$]
path = /tmp
hosts allow = 192.168.0.0/24, 127.0.0.1
hosts deny = 0.0.0.0/0
# Это - диски X: пользователей.
[homes]
comment = Home Directories
valid users = %S
create mask = 0711
directory mask = 0755
read only = No
browseable = No
# здесь лежит logon.bat и другие нужные скрипты.
[netlogon]
comment = Network Logon Service
path = /home/samba/netlogon
guest ok = Yes
locking = No
# Это - место для профайлов (C:\Documents And Settings\имя_пользователя)
[profiles]
comment = Profile Share
path = /home/samba/profiles
create mask = 0711
directory mask = 0755
read only = No
profile acls = Yes
# Это - общая папка пользователей, куда они могут сваливать все, что хотят.
[common]
comment = Common Share
path = /home/common
read only = No
guest ok = Yes
# Это - "грубая эмуляция" обычных shared-папок. Криво, зато в одном месте и
# с ноутбуков (не включенных в домен) доступно.
[shares]
comment = Shares folder
path = /home/shares
create mask = 0777
directory mask = 0777
read only = No
guest ok = Yes
# Для доступа с ноутбуков, создаем пользователя (например) mobile, даем ему квоту
# побольше (edquota -u mobile), задаем пароль (smbpasswd mobile; passwd mobile)
# и даем пользователям login/пароль. Подключаем сетевой диск:
# \\ip_вашего_сервера\shares, вводим логин/пароль, ставим галочку "подключать при
# загрузке"
Вдогонку к этому файлу, необходимо создать еще файл /etc/samba/smbusers,
который содержит следующее:
####
# User mapping file
####
# File Format
# -----------
# Unix_ID = Windows_ID
root = Administrator
####
# End of File
####
Что переопределит пользователя root как windows'кого Administrator.
9.
Установим samba-пароль для root'a:
#smbpasswd -a root
New SMB password:
Retype new SMB password:
#
10.
Для автоматического запуска samb'ы пр загрузке, надо добавить
следующие строчки в /etc/rc.local:
...
echo "Starting Samba..."
/usr/sbin/smbd -D
/usr/sbin/nmbd -D
...
11.
Теперь необходимо создать все директории, которые указаны в smb.conf
и задать для них правильные права ;). Я сделал это с помощью
следующего скрипта (/etc/samba/mkdirs.sh):
#!/bin/sh
#mkdirs.sh
mkdir -p /home/common
mkdir -p /home/shares
chgrp -R wrkusers /home/common
chgrp -R wrkusers /home/shares
chmod -R 777 /home/common /home/shares
mkdir -p /home/samba
mkdir -p /home/samba/{netlogon/scripts,profiles}
chown -R root.wheel /var/spool/samba
chown -R root.wheel /home/samba
chgrp -R wrkusers /home/samba/profiles
chmod a+rwxt /var/spool/samba
Далее:
#cd /etc/samba/
#chmod +x mkdirs.sh
#./mkdirs.sh
12.
Попробуем запустить samb'y:
#/usr/sbin/smbd -D
#/usr/sbin/nmbd -D
13.
С помощью с следующего скрипта (/etc/samba/initgroups.sh) я создал
и переопределил unix-группы пользователей как windows-группы
пользователей. Здесь также создается отдельная группа пользователей
для работы с доменом, т.к. включать пользователей домена в группу
users не рекомендуется.
#!/bin/sh
# initgroups.sh
# По многочисленным советам разных doc, рекомедуется
# все же создавать отдельную группу для всех пользователей
# дмена...
groupadd wrkusers
net groupmap modify ntgroup="Domain Admins" unixgroup=wheel
net groupmap modify ntgroup="Domain Users" unixgroup=users
net groupmap modify ntgroup="Domain Guests" unixgroup=nobody
net groupmap add ntgroup="WRK Users" unixgroup=wrkusers type=d
Далее:
#cd /etc/samba
#chmod +x initgroups.sh
#./initgroups.sh
Updated mapping entry for Domain Admins
Updated mapping entry for Domain Users
Updated mapping entry for Domain Guests
No rid or sid specified, choosing algorithmic mapping
Successfully added group WRK Users to the mapping db
14.
На этом шаге, необходимо перезагрузиться для включения квот,
softdeps и проверки: запустились ли samba и ssh, поднялись ли сетевые
интерфейсы.
#reboot
Проверка квот - довольно-таки длительное дело на большом (~140GB как у
меня) разделе. Наберитесь терпения.
15.
Для автоматизации добавления пользователя в домен я использую
следующий скрипт (/etc/samba/adduser.sh):
#!/bin/sh
# adduser.sh
# Используйте:
# adduser.sh имя_пользователя
# добавим пользователя
useradd -m -G accounts -c "$1" "$1"
# зададим ему unix- и samba- пароли
passwd $1 smbpasswd -a $1
# создадим необходимы директории - для shared-папок и профайлов
mkdir /home/samba/profiles/$1
mkdir /home/shares/$1
chgrp wrkusers /home/shares/$1
chmod u+rw,g+rw,o+rw /home/shares/$1
chown $1.wrkusers /home/samba/profiles/$1
chmod ug+wrx,o+rx,o-w /home/samba/profiles/$1
# задаем квоты для пользователя.
# вместо jed - ваш любимый редактор
export EDITOR=jed edquota -u $1
Далее:
#chmod +x /etc/samba/adduser.sh
Теперь, для добавления нового пользователя в домен, достаточно
вызвать:
#/etc/samba/adduser.sh имя_пользователя
16.
---
Добавляем машины в домен:
#useradd -s /bin/false -d /tmp имя_машины
А затем, с помощью vipw изменяем их имена, добавляя в конец имени
символ '$'.
17.
Для синхронизации по времениw windows-машин и сервера, я создаю
файл logon.bat (/home/samba/netlogon/logon.bat):
rem LOGON.BAT echo off net time \\shaman /set /yes
С помощью утиллиты todos (её легко найти в интернете, в т.ч., если мне
не изменяет память, на сайте opennet.ru или
здесь: http://www.ftp.nsk.su/cgi-bin/bbs2html?pub/networks)
преобразую logon.bat к формату dos:
#todos /home/samba/netlogon/logon.bat
18.
---
Все! Сделаем несложную проверку:
#ps ax | grep mbd
root 349 0.0 0.0 2432 4 ?? IW Fri05PM 0:00.00 /usr/sbin/smbd
root 539 0.0 0.1 2468 1012 ?? Ss Fri05PM 0:00.46 /usr/sbin/smbd
root 574 0.0 0.0 912 4 ?? IW Fri05PM 0:00.00 /usr/sbin/nmbd
#smbclient -L shaman -U%
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.14a]
Sharename Type Comment --------- ---- -------
IPC$ IPC IPC Service (Samba 3.0.14a) netlogon Disk Network Logon
Service profiles Disk Profile Share common Disk Common Share shares
Disk Shares folder ADMIN$ IPC IPC Service (Samba 3.0.14a)
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 3.0.14a] Server Comment
---------
------- SHAMAN Samba 3.0.14a Workgroup Master ---------
------- WORKGROUP SHAMAN #
Если все так, то ура! - PDC на Samba 3.14a и NetBSD 2.0.2 работает!
18.
Проблемы и решения.
П: В linux'e есть команда killall. А в NetBSD такой, к сожалению, нет.
Р: Этот простой скрипт заменяет killall -9:
#!/bin/sh
ps -aux | grep $1 | grep -v grep | awk '{print$2}' | xargs kill -9
19. Заключение.
Все оказалось значительно проще чем я ожидал :). Сейчас uptime этого
сервера - 121 день. Его скоро от пыли надо чистить, а отключать жалко ;).
Это единственный сервер, к которому я подхожу только для того, чтобы
добавить нового пользователя.
Да и напрямую строчки запуска самбовых демонов в rc.conf добавлять не стоит - лучше сделать скрипт для запуска/останова/перезапуска самбы, положыть его в /etc/rc.d и как его и добавить в rc.conf
Есть вопрос. Юзверя влетают нормально, НО. Под winxp sp2 pro, есть проблема. Если локально юзверь доменный не объявлен админом, то у него не работает куча свойств. типа того что : раб.стол отображается неверно, англ.язык только, дефолтный принтер не меняется.... точнее меняется, релогин - и опять все по-старому.... не подскажете че править?