Назад
Пример 3. Домен Samba+dhcp на Alt Linux
Samba-3 от простого к сложному
Дальше

Пример 3. Домен Samba+dhcp на Alt Linux


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

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

Пример основан на Главе 2. книги Samba-3 в примерах.

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 update
    apt-get dist-upgrade
    

    Без обновления пакет Samba-3.4.8. имеет шансы при установке выдавать ошибки и не установиться.

    Я не смог собрать из исходников новую Samba, поэтому я воспользовался любезно предоставленной сборкой Василия Терешко с сайта http://end.kiev.ua/linux/alt/tolmi-5.1/i586/RPMS.tolmi-5.1/. Скачиваем отсюда следующие пакеты и устанавливаем в представленном ниже порядке командой:

    apt-get install имя_пакета
    
    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
    

    Например:

    apt-get install ctdb-1.0.113-alt2.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, причем его пароль можно и желательно задать отличный от пароля 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 не должна будет что-либо показать.

    Теперь создадим наших пользователей, как мы делали это в примере 2, соответственно сотрудников бухгалтерии помещаем в группу buhgroup, сотрудников финансового отдела в группу fingroup.

    Таблица 2.1. Список сотрудников фирмы

    Имя сотрудника Учетная запись Пароль Имя личной папки Каталог на файл-сервере Рабочая станция
    Иван Иваныч director dirIvan1 director /firmafiles win7boss
    Петр Авдеич finansist finPetr2 finansist /firmafiles/finansist winXPfin
    Зоя Федоровна buhgalter buhZoya3 buhgalter /firmafiles/buhgalter winXPbuh
    Василий Николаич glfinansist glfinVas22 glfinansist /firmafiles/finansist win7glfin
    Елена Викторовна glbuhgalter glbuhEl33 glbuhgalter /firmafiles/buhgalter win7glbuh

    Согласно таблице добавим пользователей:

    # 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.
    

    Иван Иваныча добавляем командой

    # 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
    

    Данный пользователь будет являться администратором домена, но не администратором вашего сервера.
    (к началу страницы)

    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
    

    (к началу страницы)

    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 = scripts\login.bat                                                
    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
    

    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
    

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

    Теперь назначим серверам 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. Если вы допустили ошибку в файле /etc/dhcp/dhcpd.conf, сервер dhcp не запустится, и также сообщит о строке, в которой что-то не так.
    (к началу страницы)

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

    Введение в домен клиентов с Windows XP происходит как обычно, подробнее можно почитать здесь. Проверьте, что демон nmb запущен, этот демон обрабатывает процессы регистрации имен и требования по разрешению (имен). Перед введением в домен компьютера с установленной Windows 7 следует немного модифицировать реестр. Создайте файл win7toSamba.reg следующего содержания:

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\servic es\LanmanWorkstation\Parameters]
    "DomainCompatibilityMode"=dword:00000001
    "DNSNameResolutionRequired"=dword:00000000
    

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

    После стандартной процедуры (я ввожу в домен от имени второго администратора odmin) появиться сообщение об ошибке, показанное на рисунке 3.1.

    Рисунок 3.1. Сообщение о несуществующем домене

    Сообщение о несуществующем домене

    Не обращаем внимание, жмем Ок, после чего нам предлагается перезагрузиться, чтобы изменения вступили в силу. Перезагружаемся, после этого компьютер с WINDOWS7 также благополучно входит в домен.

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

    10. Выводы

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

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

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

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

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

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

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

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

    Назад
    Пример 2. Одноранговая сеть. Персональные общие папки
    Содержание
    Дальше
    Пример 3. Домен Samba+dhcp на Alt Linux

  •