Автор Тема: Домен на Alt Linux на Samba+dhcp для Windows XP-7. Samba-3 в примерах. Пример 3.  (Прочитано 12766 раз)

Оффлайн greyzy

  • Завсегдатай
  • *
  • Сообщений: 277
    • http://samba-doc.ru
Пример 3. Alt Linux и домен на Samba+dhcp для Windows XP-7

1. Особенности данного примера
2. Начальные условия
3. Установка Samba-3.4.8.
4. Настройка сервера dhcp
5. Заводим учетные записи пользователе и групп будущего домена
6. Второй администратор домена
7. Создание общих ресурсов
8. Конфигурирование сервера Samba
9. введение в домен клиентов Windows XP и Windows 7
10. Выводы


Продолжение этой ветки http://forum.altlinux.org/index.php/topic,7625.0.html

Директор Иван Иваныч хороший директор, и через какое-то время дела фирмы пошли в гору, штат сотрудников стал расширяться, в фирме образовалось две структуры, бухгалтерских отдел и финансовый отдел. А сотрудников стало уже почти 50 человек, а через год их может стать около сотни. Посовещавшись, вы с директором решили внедрить домен, при такой сети это позволить гораздо успешнее и проще управлять сетью. Так же будет отныне решено использовать сервер dhcp, что в такой сети будет являться хорошим решением, а также позволить пользователям ноутбуков не беспокоиться, когда их настройки были перенастроены при подключении к сетям ваших деловых партнеров.

1. Особенности данного примера

Особенности данного примера состоят в следующем:

- в качестве серверной ОС используется Alt Linux 5 KDE (desktop);

- установка на Alt Linux 5 KDE (desktop) новой Samba-3.4.8., которая позволит ввести в домен компьютеры под управлением Window 7 (идущая с Alt Linux 5 KDE (desktop) Samba-3.0.37. не позволит этого сделать);

- масштабируемость;

- внедрение сервера dhcp, что является хорошим решением в большой сети, плюс удобство для мобильных пользователей;

- простота управления;

2. Начальные условия

- имя домена firma, имя сервера altserver, NetBIOS имя aserver, его ip будет статическим 192.168.1.7 и 192.168.2.7;

- будут две подсети, бухгалтерия 192.168.1. , экономисты 192.168.2.;

- использование dhcp и wins, dns пока не трогаем;

- всем клиентам будет назначен динамический ip-адрес, сетевой принтер будет получать ip-адрес согласно своему mac-адресу;

- каждому пользователю будет создан и доступен персональный общий ресурс, а также будут созданы два ресурса для каждого отдела (бухгалтеры и финансисты);

- пользователь director будет владельцем всех ресурсов.

3. Установка Samba-3.4.8.

Предварительно делаем обновление системы, для этого подключаем нужный репозиторий и выполняем команду:
apt-get && apt-get dist-upgrade
Без обновления пакет Samba-3.4.8. имеет шансы при установке выдавать ошибки и не установиться.

Я не смог собрать из исходников новую Samba, поэтому я воспользовался любезно предоставленной сборкой Василия Терешко с сайта http://end.kiev.ua/linux/alt/tolmi-5.1/i586/RPMS.tolmi-5.1/. Я скачал отсюда следующие пакеты и установил:
ctdb-1.0.113-alt2.i586.rpm
ctdb-devel-1.0.113-alt2.i586.rpm
libtalloc-2.0.0-alt1.i586.rpm
libtalloc-devel-2.0.0-alt1.i586.rpm
samba-common-3.4.8-alt1.i586.rpm
samba-3.4.8-alt1.i586.rpm
samba-client-3.4.8-alt1.i586.rpm

Если все прошло хорошо, проверьте, что пакет samba-3.4.8-alt1.i586.rpm нормально установился:
rpm -qa samba
samba-3.4.8-alt1
Пока отложим дальнейшее конфигурирование сервера Samba, и займемся сервером dhcp.

4. Настройка сервера dhcp

Выполните команду hostname, откликом должно быть:
# hostname
altserver.localdomain

Внесите в файл /etc/sysconfig/network запись
HOSTNAME = altserver.firma.org
Так как ваш сервер будет обслуживать два сегмента сети (это опционально! для примера), пользователи могут захотеть получить доступ из одного сегмента в другой, поэтому будет лучше включить маршрутизацию, для этого в файле /etc/net/sysctl.conf исправьте значение параметра

net.ipv4.conf.lo.forwarding = 0
на
net.ipv4.conf.lo.forwarding = 1
перезапустите сеть:
service network restart
Установите сервер dhcp:
apt-get install dhcp-server
Настройка сервера dhcp в альтлинукс осуществляется в файле /etc/dhcp/dhcpd.conf. После установки пакета dhcp-server вы найдете в этой директории файл dhcpd.conf.sample. Давайте исправим этот файл под наши задачи.

Для наших задач сервер должен:

- выдавать адреса для двух подсетей, причем диапазон будет находиться в пределах .31-.230, практика показывает, что полезно бывает оставить место под статические адреса (сканеры, принтеры, управляемые свичи и т.п.);

- также предположим, что у нас есть сетевой принтер со своей сетевой картой, и мы укажем серверу dhcp всегда назначать ему один и тот же адрес, делается это по привязке к mac-адресу сетевой карты. Mac-адрес вы можете узнать в документации к принтеру, либо зайдя через веб-интерфейс в настройки принтера, как правило, сетевые принтеры имеют такую функцию, в этом примере такой принтер будет называться hp1320n и ему будет назначаться адрес 192.168.1.52.

- точно также предположим, что в подсети финансистов компьютеру Иван Иваныча будет назначаться адрес динамически, но всегда один и тот же - 192.168.2.40.

Перейдите в папку /etc/dhcp/ и получите файл dhcpd.conf:
# cd /etc/dhcp/
# cp dhcpd.conf.sample dhcpd.conf

Теперь приведем файл dhcpd.conf к такому состоянию:
# See dhcpd.conf(5) for further configuration  
#говорим не использовать динамический dns
ddns-update-style none;
#задаем время аренды IP-адреса по умолчанию, в секундах
        default-lease-time 86400;
#задаем максимальное время аренды, если по истечению этого времени
#клиент не сделал запрос на аренду, его ip считается незанятым и
#может быть назначен другому клиенту
        max-lease-time 172800;

#задаем адрес сервера времени
        option ntp-servers              192.168.1.7;
#если есть поддержка NIS, можно задать домен
        option nis-domain               "firma.org";
#задаем имя домена
        option domain-name              "firma.org";
# список dns-серверов, так windows будет спокойнее
        option domain-name-servers      192.168.1.7, 192.168.2.7;
# список wins-серверов
        option netbios-name-servers     192.168.1.7, 192.168.2.7;

# описание первой подсети, сначала идет ее адрес и маска
subnet 192.168.1.0 netmask 255.255.255.0 {
# шлюз, так как клиенты из подсети 192.168.1. будут ходить в подсеть 192.168.2.
        option routers                  192.168.1.7;  
        option subnet-mask              255.255.255.0; #
        range dynamic-bootp 192.168.1.31 192.168.1.230; #

# говорим назначать принтеру один и тот же ip по mac-адресу
        host hp1320n
            {
            hardware ethernet 08:09:55:56:05:58;
            fixed-address 192.168.1.52;
            }
}

subnet 192.168.2.0 netmask 255.255.255.0 {
        option routers                  192.168.2.7;
        option subnet-mask              255.255.255.0;
        range dynamic-bootp 192.168.2.31 192.168.2.230;

        host win7boss
            {
            hardware ethernet 09:10:55:57:58:23;
            fixed-address 192.168.1.40;
            }
}

5. Заводим учетные записи пользователей и групп будущего домена

Сначала добавим пользователя root в базу данных Samba, этот пользователь администратор сервера и будет администратором домена. Перед этим, с учетом того, что я использовал в этом примере пакет от Василия Терешко с сайта http://end.kiev.ua/linux/alt/ создадим папку
# mkdir /var/lib/samba/private
именно там будет храниться база данных паролей, учтите, это нужно лишь для этого пакета, этот путь задается при сборке, и Василий Терешко задал этот путь там, как правило база данных хранится в папке /etc/samba (однако не исключено, что этот путь будет во всех новых сборках).

Теперь уже непосредственно добавляем пользователя root. Это пароль администратора домена Windows. Никогда не удаляйте эту учетную запись с ее паролем из бэкенда паролей после того, как будут инициализированы группы домена Windows.
# smbpasswd -a root
New SMB password:
Retype new SMB password:
tdbsam_open: Converting version 0.0 database to version 4.0.
tdbsam_convert_backup: updated /var/lib/samba/private/passdb.tdb file.
account_policy_get: tdb_fetch_uint32 failed for field 1
/(min password length), returning 0
account_policy_get: tdb_fetch_uint32 failed for field 2
/(password history), returning 0
account_policy_get: tdb_fetch_uint32 failed for field 3
/(user must logon to change password), returning 0
account_policy_get: tdb_fetch_uint32 failed for field 4
/(maximum password age), returning 0
account_policy_get: tdb_fetch_uint32 failed for field 5
/(minimum password age), returning 0
account_policy_get: tdb_fetch_uint32 failed for field 6
/(lockout duration), returning 0
account_policy_get: tdb_fetch_uint32 failed for field 7
/(reset count minutes), returning 0
account_policy_get: tdb_fetch_uint32 failed for field 8
/(bad lockout attempt), returning 0
account_policy_get: tdb_fetch_uint32 failed for field 9
/(disconnect time), returning 0
account_policy_get: tdb_fetch_uint32 failed for field 10
/(refuse machine password change), returning 0
Added user root.

Проверьте, что в системе есть файл присоединения имен пользователей (username map file) (в моем альте он был по умолчанию), который позволяет учетной записи root быть ассоциированным с учетной записью administrator из Windows среды, следующего содержания:
# cat /etc/samba/smbusers
# Unix_name = SMB_name1 SMB_name2 ...
root = administrator admin
nobody = guest pcguest smbguest

Теперь создадим нужные нам группы UNIX и присоединим их к группам windows, тоже сделаем для общеизвестных групп домена Microsoft Windows.

Примечание: под словом присоединим подразумевается to map, и в слэнге это звучить как "примапим", мапить группы, мапить пользователя.

Нужные нам группы это группа пользователей бухгалтерии buhgroup и группа пользователей финансового отдела fingroup.

Сделаем скрипт, который облегчит нам данную задачу, создадим файл:
touch /etc/samba/mapgroup.sh
Заполним его таким содержимым:
#!/bin/sh
#
# файл присоединения групп windows к группам unix /etc/samba/mapgroup.sh
#

# создадим группы бугхалтерии и финансового отдела
groupadd buhgroup
groupadd fingroup

# присоединим общеизвестные Windows Domain Groups к UNIX-группам
net groupmap add ntgroup="Domain Admins" rid=512 unixgroup=root type=d
net groupmap add ntgroup="Domain Users" rid=513  unixgroup=users type=d
net groupmap add ntgroup="Domain Guests" rid=514 unixgroup=nobody type=d

# присоединим группы домена
net groupmap add ntgroup="Buhg staff"  unixgroup=buhgroup type=d
net groupmap add ntgroup="Fin staff" unixgroup=fingroup type=d

Сделаем исполняемым и запустим его:
# cd /etc/samba/mapgroup.sh
# chmod +x mapgroup.sh
# ./mapgroup.sh

Вывод должен быть примерно такой:
# ./mapgroup.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 1001
Successfully added group Buhg staff to the mapping db as a domain group
No rid or sid specified, choosing a RID
Got RID 1002
Successfully added group Fin staff to the mapping db as a domain group

Проверим, какие у нас теперь есть группы:
# net groupmap list
Domain Admins (S-1-5-21-1882585832-1723636817-256479379-512) -> root
Fin staff (S-1-5-21-1882585832-1723636817-256479379-1002) -> fingroup
Domain Users (S-1-5-21-1882585832-1723636817-256479379-513) -> users
Domain Guests (S-1-5-21-1882585832-1723636817-256479379-514) -> nobody
Buhg staff (S-1-5-21-1882585832-1723636817-256479379-1001) -> buhgroup

Примечание: если вам что-то не понравилось, удалить присоединение можно таким скриптом:
#!/bin/sh
#
# файл отсоединения групп windows от групп unix /etc/samba/mapgroupdel.sh
#

# отсоединим общеизвестные Windows Domain Groups к UNIX-группам
net groupmap delete ntgroup="Domain Admins"
net groupmap delete ntgroup="Domain Users"
net groupmap delete ntgroup="Domain Guests"

# отсоединим группы домена
net groupmap delete ntgroup="Buhg staff"
net groupmap delete ntgroup="Fin staff"

Вывод после выполнения скрипта будет такой:
Sucessfully removed Domain Admins from the mapping db
Sucessfully removed Domain Users from the mapping db
Sucessfully removed Domain Guests from the mapping db
Sucessfully removed Buhg staff from the mapping db
Sucessfully removed Fin staff from the mapping db


А команда net groupmap list не должна будет что-либо показать.

Теперь создадим наших пользователей. Вот наши сотрудники:

Имя сотрудникаУчетная записьПарольИмя личной папкиКаталог на файл-сервереРабочая станция
Иван ИванычdirectordirIvan1director/firmafileswin7boss
Петр АвдеичfinansistfinPetr2finansist/firmafiles/finansistwinXPfin
Зоя ФедоровнаbuhgalterbuhZoya3buhgalter/firmafiles/buhgalterwinXPbuh
Василий НиколаичglfinansistglfinVas22glfinansist/firmafiles/finansistwin7glfin
Елена ВикторовнаglbuhgalterglbuhEl33glbuhgalter/firmafiles/buhgalterwin7glbuh

Согласно таблице добавим пользователей:
# useradd -m -G buhgroup -c "Зоя Федоровна" buhgalter
# passwd buhgalter
Enter new password:
Re-type new password:

# smbpasswd -a buhgalter
New SMB password:
Retype new SMB password:
Added user buhgalter.

Соответственно сотрудников бухгалтерии помещаем в группу buhgroup, сотрудников финансового отдела в группу fingroup.

Иван Иваныча добавляем командой
# useradd -m -c "Иван Иваныч" director
# passwd director
Enter new password:
Re-type new password:

# smbpasswd -a director
New SMB password:
Retype new SMB password:
Added user director.

Тем самым не включая его ни в какую группу, что впрочем не помешает ему просматривать все папки , так как он будет владельцем всех общих папок.

В итоге в базе данных Samba у меня такие пользователи:
# pdbedit -L
root:0:System Administrator
buhgalter:501:Зоя Федоровна
director:502:иван Иваныч
finansist:503:Петр Авдеич
glfinansist:504:Василий Николаич
glbuhgalter:505:Елена Викторовна

6. Второй администратор домена

Чтобы еще какой-то сотрудник мог добавлять компьютеры в домен, он должен входить в группу root. Создадим учетную запись такого пользователя (odmin) обычным путем, а затем поместим его в группу root.
# usermod -g 0 odmin
Характеристики этого пользователя:
# id odmin
uid=506(odmin) gid=0(root) groups=0(root)

# pdbedit odmin -v
Unix username:        odmin
NT username:
Account Flags:        [U          ]
User SID:             S-1-5-21-1882585832-1723636817-256479379-1012
Primary Group SID:    S-1-5-21-1882585832-1723636817-256479379-512
Full Name:            Администратор домена
Home Directory:       \\altserver\odmin

Заметьте Primary Group SID:  S-1-5-21-....-512, по виндовым понятиям это SID группы Domain Admins. Данный пользователь будет являться администратором домена, но не администратором вашего сервера.

7. Создание общих ресурсов

Создадим общие ресурсы для групп, для этого создадим скрипт /etc/samba/addfolder.sh такого содержания:
#!/bin/sh
#
#создадим структуру общих папок
#
mkdir -p /firmafiles/{buhfiles,finfiles}
chown -R root:root /firmafiles
chown -R director:buhgroup /firmafiles/buhfiles
chown -R director:fingroup /firmafiles/finfiles
chmod -R -R ug+rwx,o-rxw /firmafiles

Сделаем его исполняемым и выполним:
# chmod +x /etc/samba/addfolder.sh
# cd /etc/samba/
# ./addfolder.sh

В результате получили будущие общие папки, выставили на них владельцев и разрешения:
# ls -l / | grep firmafiles
drwxrwxr-x   4 root root  4096 Jul  8 15:31 firmafiles

# ls -l /firmafiles
total 8
drwxrwxr-x 2 director buhgroup 4096 Jul  8 15:31 buhfiles
drwxrwxr-x 2 director fingroup 4096 Jul  8 15:31 finfiles
« Последнее редактирование: 02.09.2010 14:41:25 от greyzy »

Оффлайн greyzy

  • Завсегдатай
  • *
  • Сообщений: 277
    • http://samba-doc.ru
8. Конфигурирование сервера Samba

Создайте файл smb.conf такого содержания:
[global]
workgroup = FIRMA
netbios name = ASERVER
server string = Server of FIRMA
passwd chat = *New*Password* %n\n*Re-enter*new*password* %n\n *Password*changed*
username map = /etc/samba/smbusers                                              
syslog = 0                                                                      
log file = /var/log/samba/log.%U.%m.%G.%I                                            
max log size = 50                                                              
name resolve order = wins bcast hosts    
interfaces = 192.168.1.7/24, 192.168.2.7/24, 127.0.0.1/24
bind interfaces only = Yes
time server = yes

# так как не касаюсь принтеров, у меня это закомментировано                                  
#        printcap name = CUPS                                                            
#        show add printer wizard = No                                                    
add user script = /usr/sbin/useradd -m -G users '%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 -A '%g' '%u'                      
add machine script = /usr/sbin/useradd -s /bin/false -d /var/lib/nobody '%u'    
logon script =                                              
logon path =                                                                    
logon drive = X:                                                                
                                        
domain logons = Yes
os level = 64
preferred master = Yes
domain master = Yes
wins support = Yes
                        
[homes]
comment = Домашняя директория
valid users = %S
read only = No
browseable = No
browsable = No

#[printers]
#        comment = SMB Print Spool
#        path = /var/spool/samba
#        guest ok = Yes
#        printable = Yes
#        use client driver = Yes
#        browseable = No
#        browsable = No

[netlogon]
comment = Network Logon Service
path = /firmafiles/%U
valid users = %S
read only = No

[buhgroup]
comment = Файлы бухгалтерии
path = /firmafiles/buhfiles
valid users = %G
read only = No

[fingroup]
comment = Файлы фин.отдела
path = /firmafiles/finfiles
valid users = %G
read only = No

Проверьте конфигурационный файл smb.conf утилитой testparm на вопрос возможных ошибок, если они обнаружаться, исправьте.

Cонфигурируйте NSS (диспетчер разрешения имен, name service switch), чтобы обрабатывать разрешение имен, основанное на WINS. До тех пор, пока не используется DNS-сервер, безопасно удалить эту опцию из конфигурации NSS. Отредактируйте файл /etc/nsswitch.conf, (закомментировав верхнюю строку (#) и добавив нижнюю:
# hosts:      files nisplus nis mdns4_minimal [NOTFOUND=return] dns mdns4 fallback
hosts: files wins

Теперь назначим серверам dhcp и samba запускаться при запуске/перезагрузке системы и запустим их:
# chkconfig --level 35 dhcpd on
# chkconfig --level 35 smb on
# chkconfig --level 35 nmb on
# service dhcpd start
Starting dhcpd service: [ DONE ]
# service smb start
Starting SMB services: Starting smbd service: [ DONE ]
# service nmb start
Starting NMB services: Starting nmbd service: [ DONE ]

Проверьте работоспособность сервера Samba теми же способами, которые были представлены в примере 2, п.5 http://forum.altlinux.org/index.php/topic,7625.msg105141.html#msg105141 . Если вы допустили ошибку в файле /etc/dhcp/dhcpd.conf, сервер dhcp не запустится, и также сообщит о строке, в которой что-то не так.

9. введение в домен клиентов Windows XP и Windows 7

Введение в домен клиентов с Windows XP происходит как обычно, подробнее можно почитать здесь http://samba-doc.ru/samba3example/03titbits.html#titbitsvved. Проверьте, что демон nmb запущен, этот демон обрабатывает процессы регистрации имен и требования по разрешению (имен). Перед введением в домен компьютера с установленной Windows 7 следует немного модифицировать его реестр. Создайте файл win7toSamba.reg следующего содержания:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\servic es\LanmanWorkstation\Parameters]
"DomainCompatibilityMode"=dword:00000001
"DNSNameResolutionRequired"=dword:00000000

И запустите (не забываем про администраторские права), нужные сведения будут добавлены.

После стандартной процедуры (я ввожу в домен от имени второго администратора odmin) появиться сообщение об ошибке, показанное на рисунке http://samba-doc.ru/adaptation/adap03.html#ris3.1. Не обращаем внимание, жмем Ок, после чего нам предлагается перезагрузиться, чтобы изменения вступили в силу. Перезагружаемся, после этого компьютер с WINDOWS 7 также благополучно входит в домен.

Примечание: соответствие имен компьютеров и выданных им IP адресов можно увидеть в файле /var/lib/dhcp/dhcpd.leases

10. Выводы

Основные достигнутые результаты:

- При входе пользователя подключается диск X, который ведет в домашнюю папку этого пользователя на сервере ( заметьте, тут самое время внедрять квотирование), также на сервере доступны общие папки, но в зависимости от принадлежности пользователя к бухгалтерам или финансистам (что и правильно);

- Пинг по имени идет в пределах одной подсети (что также правильно, так как сервер WINS не должен заниматься разрешением в других подсетях);

- Пинг по IP идет как в пределах одной подсети, так и из одной в другую, на общие ресурсы в другой подсети заходим по IP (то есть маршрутизация работает);

- пароли Samba и linux разные вещи, пользователи могут менять их как вздумается, на сервере у линукс-пользователей они остаются какие были (во всяком случае мне так показалось);

- Принтеры шарятся.

Из нерешенного:

Общие папки на Windows-компьютерах сети расшариваются, но доступ назначается либо индивидуально, по имени пользователя, либо всей группе Domain USERS, при назначении прав группам buhgroup и fingroup пользователи, входящие в эти группы, доступ в общие папки не имели. Причину этого не выяснил. А в остальном прекрасный вариант для небольшой сети, в которой нужно централизованное управление и не нужен LDAP.


В примере много экспериментального, поэтому возможно что-то сделано не так/не красиво/не тем путем, принимаются замечания и критика, однако у меня это работало :)
« Последнее редактирование: 02.09.2010 10:02:02 от greyzy »