Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> программы —> Samba & CUPS & AD & ACL

Samba & CUPS & AD & ACL

Автор: atrium.


Здравствуй уважаемый читатель, надеюсь эта статья поможет тебе хоть немного в приобретении опыта работы с такой прекрасной ОС как FreeBSD. Сегодня мы будем настраивать сервер SAMBA в качестве файлового сервера с вводом его в домен и CUPS в качестве принтсервера для win клиентов. Вся настройка производилась на FreeBSD 7.0, представленные конфиги рабочие и протестированные в собственной сети.

   Составим список пакетов, которые на понадобяться в работе:
          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/heimdal
make config и выбираем опцию  "[X] LDAP      Use OpenLDAP as the KDC backend". Устанавливаем и создаём конфиг krb5.conf, который выкладываем в /etc. Этот конфиг можно взять, если распоковать сам пакет  heimdal-1.0.1  он так и называется krb5.conf, вам необходимо будет установить в нём свой домен. Мой конфиг:
   
[libdefaults]
        default_realm = EXAMPLE.RU
        clockskew = 300
        v4_instance_resolve = false
        v4_name_convert = {
                host = {
                        rcmd = host
                        ftp = ftp
                }
                plain = {
                        something = something-else
                }
        }

		[realms]
        EXAMPLE.RU = {
                kdc = ip pdc
                admin_server=ip pdc
        }
		[domain_realm]
        .example.ru. = EXAMPLE.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 =192.168.1., 127. 
    	log file = /var/log/samba/log.%m
    	max log size =0
	log level=0
	syslog=0
    	password server =ip dpc
    	realm = EXAMPLE.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=ip:631

	[public]
	path=/server/share
	#read list="@TEST\Domain Users"
	#write list="@TEST\Domain Admins" 
	comment="пВЭЙЕ ТЕУХТcЩ"
	create mask=1775
	directory mask=1775
	browseable=yes
	available=yes
	read only=no
	admin users="@TEST\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="@TEST\Domain Admins"
	Read list="@TEST\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@EXAMPLE.RU

Issued           Expires        Principal
Oct 20 13:45:50  >>>Expired<<<  krbtgt/EXAMPLE.RU@EXAMPLE.RU
Oct 20 13:46:47  >>>Expired<<<  pdc$@EXAMPLE.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 join PDC_IP -U 'логин юзера'
       пр:

net ads join -U Администратор
Joined 'Unix' to realm 'EXAMPLE.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, которое может повлечь за собой проблемы с безопасностью.
(HANDBOOK)

Если Вас все перечисленные недостатки не пугают, то приступим /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@EXAMPLE.RU
		ServerName unix.EXAMPLE.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 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] (самба).
   
   Всё с настройками закончили, эта статья не пошаговое руководство, поэтому с некоторыми моментами вам стоит разобраться самим.



размещено: 2008-10-30,
последнее обновление: 2009-03-06,
автор: atrium


adre, 2008-10-30 в 9:06:37

=) только хотел подобное что-то установить, быстрее дело пойдет ...

linked, 2008-10-30 в 9:45:48

>команды проверки не работают сделайте 'shutdown -r now'
Автор! Что это за бред?

lissyara, 2008-10-30 в 9:48:17

Сразу бред....
У меня например, давно прошло пионерство по поводу - всё без ребута, аптайм немеряный.
Зато потом через полгода, когда свет рубанут и УПС не вытянет - от весело бегать - потому что в автозапуске ничё нету, всё руками непойми как.
Лучше ребутнуться один раз и убедиься тоо всё взлетело как надо

linked, 2008-10-30 в 10:34:15

lissyara, говоришь ты правильно, но это не было упомянуто в контексте. Такой шаг вообще обязательный, когда собираешься обновлять удаленную систему, но здесь, прости господи...
Еще одно замечание автору (heimdal-оставим для форума :)) - затри реальный домен. За такое в банке тебе по головке не погладят.

Oloremo, 2008-10-30 в 10:37:10

Хм, а если систему нельзя ребутать?
Ты же говориш, что систему нужно занать - вот и нужно уметь делать так, что бы всё работало без ребута.

Когда я собираю свежий сервер, после всех настроек я всегда делаю ребут, что бы убедится, что всё работает как надо после перезагрузки. Но когда сервер уже работает и хоть от части "в бою", то там редко до ребутов для проверки.  

nikll, 2008-10-30 в 10:55:49

а heimdal то зачем приплёл сюда? во фрях встроеннтый керберос есть, возможности которого с легкостью перекрывают твои требованния, полистай статьи по сайту....

atrium, 2008-10-30 в 14:30:22

По поводу ребута, дело в том, что один раз после выполнения всех операций команда wbinfo -u не показывала юзеров, помогла только перезагрузка. Я не говорю что это обязательно, без ребута и так всё работает, но всякое бывает :)

GR, 2008-10-30 в 23:31:17

To: nikll, 2008-10-30 в 10:55:49

>а heimdal то зачем приплёл сюда? во фрях встроеннтый керберос есть,

Причём в 7-ке этот встроенный и есть Heimdal Kerberos 5  :)

Dorlas, 2008-10-31 в 14:47:51

Иногда reboot действительно необходим.

В связке OpenLDAP+SAMBA+nss_ldap+smbldap-tools без ребута после правки nsswitch.conf SAMBA ни в жизнь не запуститься правильно - будет при запуске писать:
adding domain info for failed with NT_STATUS_UNSUCCESSFUL

Сегодня полдня провел в экспериментах (раз 9 каталог ldap сносил нафиг - думал, smbldap-tools глючит. Ан нет - сделал начисто по WiKi - не работает. Ребутнул - полетело....

Oloremo, 2008-10-31 в 15:33:08

Толька два дня назад делал схожее в FreeBSD 7.0-p5.
Правлю nssswitch.conf - моментально всё находит из LDAP.

Никаких ребутов.

finger, 2008-10-31 в 16:34:06

Да все круто только вот что то AD ни как не хочет работать хоть убей.... Уже всю голову изломал.... Бесит эта надпись ADS support not compiling...

MASiKk, 2008-12-02 в 18:42:04

ADS support not compiling...

Перекомпиль самбу с поддержкой AD и ражуйся

(Всё перекомпиль с поддержкой АД :))

Спрозин, 2013-01-23 в 11:25:45

"Посмотреть полученный билет пожно командой"



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.072 секунд
Из них PHP: 42%; SQL: 58%; Число SQL-запросов: 86 шт.
У Вас отключено GZIP-сжатие в браузере. Размер страницы 54914