1. Port: samba-3.0.28,1 Path: /usr/ports/net/samba3 2. Port: cups-base-1.3.5_2 Path: /usr/ports/print/cups-base 3. Port: cups-pstoraster-8.15.4_1 Path: /usr/ports/print/cups-pstoraster 4. Port: cups-samba-6.0 Path: /usr/ports/print/cups-samba 5. Port: cups-smb-backend-1.0 Path: /usr/ports/print/cups-smb-backend 6. Port: heimdal-1.0.1 Path: /usr/ports/security/heimdal
Список составили, теперь можно и приступать. Самое первое установим heimdal-1.0.1 для того что бы можнобыло проводить аутентификацию основанную на Kerberos 5. Переходим в порт с /usr/ports/security/heimdalmake config и выбираем опцию "[X] LDAP Use OpenLDAP as the KDC backend". Устанавливаем и создаём конфиг krb5.conf, который выкладываем в /etc. Этот конфиг можно взять, если распоковать сам пакет heimdal-1.0.1 он так и называется krb5.conf, вам необходимо будет установить в нём свой домен. Мой конфиг:
[libdefaults] default_realm = OSKOL.IMPEXBANK.RU clockskew = 300 v4_instance_resolve = false v4_name_convert = { host = { rcmd = host ftp = ftp } plain = { something = something-else } } [realms] OSKOL.IMPEXBANK.RU = { kdc = 10.178.1.10 admin_server=10.178.1.10 } [domain_realm] .oskol.impexbank.ru. = OSKOL.IMPEXBANK.RU.
Всё с настройкой Kerberos закончили. Далее устанавливаем пакет samba-3.0.28,1. Его можно установить через sysinstall, но я предпочитаю ставить из портов, заходим в порт /usr/ports/net/samba3 выполняем make config и отмечаем соответствующие пункты:
[X] LDAP With LDAP support [X] ADS With Active Directory support [X] WINBIND With WinBIND support [X] ACL_SUPPORT With ACL support [X] FAM_SUPPORT With File Alteration Monitor [X] SYSLOG With Syslog support [X] QUOTAS With Disk quota support [X] DNSUPDATE With dynamic DNS update [X] POPT With system-wide POPT library
После установки самбы приступим к составлению конфигурации для введения unix машины в домен Windows.Для более точной конфигурации можно воспользоваться man smb.confКонфиг:
[global] workgroup=Impex server string =FreeBSD netbios name=unix netbios aliases=freebsd samba auth methods=winbind security =ADS hosts allow =10.178.1., 127. log file = /var/log/samba/log.%m max log size =0 log level=0 syslog=0 password server =10.178.1.10 realm = OSKOL.IMPEXBANK.RU encrypt passwords=yes socket options=SO_RCVBUF=8192 SO_SNDBUF=8192
TCP_NODELAY IPTOS_LOWDELAY client signing=yes idmap uid=10000-15000 idmap gid=10000-15000 winbind use default domain=yes winbind enum users=yes winbind enum groups=yes display charset = koi8-r unix charset = koi8-r dos charset = cp866 #template homedir=/home/IMPEX/users #template shell=/bin/csh interfaces=re0 lo0 bind interfaces only=yes nt acl support=yes map acl inherit=yes inherit acls=no inherit owner=no inherit permissions=no acl check permissions=true acl map full control=false block size=4096 client ntlmv2 auth=yes #minut deadtime=10 dns proxy=no follow symlinks=no getwd cache=yes hide dot files=yes hide special files=yes keepalive=0 max connections=20 wide links=no load printers=yes printing=cups printcap name=cups disable spoolss=no use client driver=no cups server=10.178.1.79:631 [public] path=/server/share #read list="@IMPEX\Domain Users" #write list="@IMPEX\Domain Admins" comment="пВЭЙЕ ТЕУХТcЩ" create mask=1775 directory mask=1775 browseable=yes available=yes read only=no admin users="@IMPEX\Domain Admins" [printers] comment="All printers" path=/var/spool/samba public=yes guest ok=yes writable=no printable=yes browseable=yes read only=yes [print$] comment="Printer Drivers" path=/usr/local/share/cups/drivers browseable=yes guest ok=no read only=yes write list="@IMPEX\Domain Admins" Read list="@IMPEX\Domain Users"
Ещё забыли одну вещь сделать, идём в /etc и редактируем файл nsswitch.conf. Приводим файл к такому виду:
group: files winbind group_compat: nis hosts: files dns networks: files passwd: files winbind passwd_compat: nis shells: files #services: compat #services_compat: nis #protocols: files #rpc: files
Ну что конфигурацию самбы составили, можно теперь пробовать вводить машину с FreeBSD в домен. Делается это довольно просто: 1. Необходимо получить билет Kerberos от PDC: man kinit kinit 'имя юзера домена' пр:
kinit user@exemple.ru
После того как билет получен вы увидите: kinit: NOTICE: ticket renewable lifetime is 1 week 2. Посмотреть полученный билет пожно командой klist пр:
unix# klist Credentials cache: FILE:/tmp/krb5cc_0 Principal: atrium@OSKOL.IMPEXBANK.RU Issued Expires Principal Oct 20 13:45:50 >>>Expired<<< krbtgt/OSKOL.IMPEXBANK.RU@OSKOL.IMPEXBANK.RU
Oct 20 13:46:47 >>>Expired<<< pdc$@OSKOL.IMPEXBANK.RU
Oct
20 13:46:47 >>>Expired<<< pdc$@OSKOL.IMPEXBANK.RU
3. Далее запускаем самбу, к стати стоит добавить в /etc/rc.conf следующие строки - smbd_enable="YES" nmbd_enable="YES" winbindd_enable="YES" /usr/local/etc/rc.d/samba start 4. Выполняем пару команд: man net net ads join -U 'логин юзера' пр:
net ads join -U Администратор Joined 'Unix' to realm 'OSKOL.IMPEXBANK.RU'
5. Всё можно проверить командами, если все предыдущие операции прошли успешно, а команды проверки не работают сделайте 'shutdown -r now': man wbinfo
wbinfo -u wbinfo -g
Так же нам необходимо отредактировать файл /etc/pam.d/login. Советую сделать бэкап файла. Если что либо случится, т.е допустим не будет пускать в систему, то загрузитесь в однопользовательском режиме 'boot -s' и скопируйте бэкап в /etc/pam.d
# $FreeBSD: src/etc/pam.d/login,v 1.17 2007/06/10 18:57:20 yar Exp $ # # PAM configuration for the "login" service # # auth #auth sufficient pam_self.so no_warn #auth include system #account #account requisite /usr/lib/pam_securetty.so #account required /usr/lib/pam_nologin.so #account include system # session #session include system # password #password include system auth required pam_nologin.so no_warn auth sufficient /usr/local/lib/pam_winbind.so auth sufficient pam_opie.so no_warn no_fake_prompts auth requisite pam_opieaccess.so no_warn allow_local auth required pam_unix.so no_warn try_first_pass account sufficient /usr/local/lib/pam_winbind.so account required pam_unix.so session required pam_permit.so
Перзагружаем комп 'shutdown -r now' и проверяем 'wbinfo -u' - должен показать юзеров домена. Если всё отлично, то давайте ещё настроим ACL, эта возможность позволит выставлять галочки на доступ через Windows (хотя надо ли оно :-)). Включаем поддержку acl для файловой системы на которой у нас будут крутиться шары, я делаю отдельную файловую систему с точкой монтирования /server и в ней располагаю все файлы необходимые для ftp, samba, apache или чего ещё :) так проще управлять (в принципе кому как). Для включения поддержки acl в файле /etc/fstab к файловой системе добавить флаг acls. Это вариан самый простой но у него есть свои недостатки:
(HANDBOOK)
ACL включаются во время монтирования флагом acls, который добавляется к /etc/fstab. Этот флаг также можно сделать постоянным с помощью tunefs(8), изменив флаг ACL в заголовке файловой системы. Вообще говоря, использование флага в суперблоке предпочтительно по нескольким причинам:1. Постоянный ACL флаг не может быть изменен путем перемонтирования системы (mount(8) -u), а только через umount(8) и mount(8). Это означает, что ACL нельзя включить на корневой файловой системе после загрузки. Это также означает, что вы не можете изменить флаг на используемой файловой системе.2. Установка флага в суперблоке приводит к постоянному монтированию файловой системы с включенным ACL, даже если нет записи в fstab или при смене порядка устройств. Это предотвращает случайное монтирование файловой системы без ACL, которое может повлечь за собой проблемы с безопасностью.
Если Вас все перечисленные недостатки не пугают, то приступим /etc/fstab:
# Device Mountpoint FStype Options Dump Pass# /dev/ad0s1b none swap sw 0 0 /dev/ad0s1a / ufs rw 1 1 /dev/ad0s1h /home ufs rw 2 2 /dev/ad0s1g /server ufs rw,acls 2 2 /dev/ad0s1d /tmp ufs rw 2 2 /dev/ad0s1e /usr ufs rw 2 2 /dev/ad0s1f /var ufs rw 2 2 /dev/acd0 /cdrom cd9660 ro,noauto 0 0
Далее следует пересобрать ядро с 2 новыми опциями. Для ознакомления можно почитать в/usr/src/sys/ufs/ufs два файла Readme.acls и Readme.extattr:
options UFS_EXTATTR options UFS_EXTATTR_AUTOSTART
После того как пересобрали ядро можно заниматься и acl, только имеется несколько моментов - если у вас файловая система UFS2 то пересборки ядра с указанными опциями будет достаточно, а если у вас файловая система UFS1 то необходимо выполнить два действия:
mkdir -p /server/.attribute/system cd /server/.attribute/system extattrctl initattr -p / 388 posix1e.acl_access extattrctl initattr -p / 388 posix1e.acl_default
Где вместо '/server' указывается ваша точка монтирования на которой включёы списки контроля доступа (alc). Для работы с acl из FreeBSD вам понадобятся две команды. Советую почитать маны:
getfacl - получение списков setfacl - установка и удаление списков
При установки прав для пользователя домена из FreeBSD указывайте его полное имя: пр:
setfacl -nm u:atrium@example.ru:rwx /файл или папка
Так вроде со всем разобрались у нас остался только cups (Common UNIX Printing System) - cups.org:Его можно установить в качестве опции к самбе или отдельно, будем устанавливать отдельно, для этого заходим в /usr/ports/print/cups-base и выполняем уже хнакомые команды make; make install; make clean. Установили cups, теперь нам необходимо установить ещё /usr/ports/print/cups-pstoraster, /usr/ports/print/cups-samba, /usr/ports/print/cups-smb-backend. Приступаем к конфигурированию, все файлы конфигурации для cups находятся в /usr/local/etc/cups. Приводим файл cupsd.conf к виду:
LogLevel error MaxLogSize 1m HostNameLookups no AccessLog /var/log/cups/access_log ErrorLog /var/log/cups/error_log PageLog /var/log/cups/page_log Listen localhost:631 Listen ip:631 Listen /var/run/cups.sock DataDir /usr/local/share/cups FontPath /usr/local/share/cups/fonts TempDir /var/spool/cups/tmp RequestRoot /var/spool/cups ServerAdmin admin@osk.impexbank.ru ServerName unix.oskol.impexbank.ru ServerTokens none KeepAlive off MaxClients 100 Timeout 300 ConfigFilePerm 0640 Browsing On BrowseOrder allow,deny BrowseAllow all BrowseAddress @LOCAL BrowseInterval 30 Printcap /etc/printcap PrintcapFormat bsd ReloadTimeout 60 SystemGroup wheel <Location /> Allow All # Allow shared printing and remote administration... Order allow,deny Allow @LOCAL </Location> <Location /admin> Encryption IfRequested Allow ip admin # Allow remote administration... Order allow,deny Allow @LOCAL </Location> <Location /admin/conf> Encryption IfRequested Allow ip admin # Allow remote access to the configuration files... Order allow,deny Allow @LOCAL </Location> <Policy default> <Limit Send-Document Send-URI Hold-Job Release-Job
Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription
Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job
Cancel-Current-Job Suspend-Current-Job Resume-Job CUPS-Move-Job> Allow all </Limit> <Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default> Allow all </Limit> <Limit Pause-Printer Resume-Printer Enable-Printer
Cancel-Current-Job
Suspend-Current-Job Resume-Job CUPS-Move-Job> Allow all </Limit> <Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default> Allow all </Limit> <Limit Pause-Printer Resume-Printer Enable-Printer
Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs
Release-Held-New-Jobs Deactivate-Printer Activate-Printer
Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After CUPS-Accept-Jobs CUPS-Reject-Jobs> Allow all </Limit> <Limit Cancel-Job CUPS-Authenticate-Job> Allow all </Limit> <Limit All> Allow all </Limit> </Policy>
Не забудте подставить вместо ip адрес на котором будет крутится cups, а вместо ip admin адрес компа за которым сидит админ. Далее нам необходимо подправить несколько опций в файлах:
mime.convs: application/octet-stream application/vnd.cups-raw 0 - mime.types: application/octet-stream
Все эти настройки можно найти в официальном руководстве к самбе. После того как произвели все настройки в /etc/rc.conf добавляем строку:
cupsd_enable="YES"
Перезапускаем компьютер и заходим по адресу ip:631 или localhost:631. Вы увидите графический интерфейс, после того как вы добавите принтеры, у меня они были сетевые необходимо чтобы win клинетам при поключении принтера в автоматическом режиме устанавливались драйвера, для этого сушествует утилитка для экспорта принтеров в самбу cupsaddsmb, если с помощью неё не получится попоробуйте скрипт, который я вам предлагаю:
#!/bin/sh #Скрипт добавления драйвера принтера в самба из cups #--------------------------- #| ВАЖНО!! #--------------------------- #--------------------------- #Первый параметр - имя драйвера принтера должно совпадать с именем ppd файла #Второй параметр - имя хоста #Третий параметр - логин и пароль NAME_DRIVER="$1" HOST="$2" LP="$3" #Выполнение rpcclient -d 4 -U ''$LP'' -c 'adddriver "Windows NT x86" \ "'$NAME_DRIVER':pscript5.dll:'$NAME_DRIVER'.ppd:\ ps5ui.dll:pscript.hlp:NULL:RAW:pscript.ntf,cups6.ini,cupsps6.dll,cupsui6.dll"' \ $HOST 2>/tmp/add_driver_error.log 1>/tmp/add_driver_successfully.log echo "" echo "Результат работы"; echo "---------------------"; tail -n 1 /tmp/add_driver_successfully.log rpcclient -N -d 4 -U ''$LP'' -c "setdriver $NAME_DRIVER $NAME_DRIVER" \ $HOST 2>>/tmp/add_driver_error.log 1>>/tmp/add_driver_successfully.log tail -n 1 /tmp/add_driver_successfully.log echo "--------------------------------------------------------------------------"; echo "Вывод ошибок работы скрипта $0 сохранён в /tmp/add_driver_error.log"; echo "--------------------------------------------------------------------------"; echo "Вывод работы скрипта $0 сохранён в /tmp/add_driver_successfully.log" echo "--------------------------------------------------------------------------";
Не забудте создать папку W32X86 с правами 777 и скинуть в неё драйвера (файлы указаны в скрипте), эта папка должна находится в [$print] (самба). Всё с настройками закончили, эта статья не пошаговое руководство, поэтому с некоторыми моментами вам стоит разобраться самим.