Samba

Установка и конфигурирование Samba

Здесь описан мой опыт в установке и конфигурировании Samba. Я постарался описать 

все процедуры для получения работающих конфигураций. Конечно это не user manual 

- скорее информация к размышлению. Дополнительное описание настроек можно найти 

в документации, прилагаемой к исходным текстам.

Не претендуя на абсолютную истину, с нетерпением жду замечаний и описания 

ошибок, допущенных мной. Буду рад обмениваться опытом по конфигурации Samba. 

Почему мне понадобилась Samba

Первый звонок 

Примерно 2 года назад я установил машину под Linux для обеспечения 

корпоративного выхода в Internet. Сразу встала проблема резервного копирования. 

Дело в том, что файл-сервер с установленным стримером работал под управлением 

Windows NT. Нужно было выбирать: искать клиент NFS для Windows NT или пытаться 

найти другой способ. Тогда же я услышал название Samba. 

Пресловутая совместимость продуктов Microsoft 

В июне 1998 наша компания купила сетевой принтер HP4000N. Сервером печати был 

выбран PDC под WindowsNT3.51sp5. Windows 95 прекрасно работал с этим 

принт-сервером, но в сети, как на грех, были две Windows NT 4.0 Workstation.

Может быть по незнанию (не думаю, что все так плохо на самом деле), но в течение 

месяца, я безуспешно пытался настроить печать из под Windows NT Workstation 

4.0sp3. Система упорно требовала наличия драйверов на принт-сервере. Насильная 

установка сетевого принтера вызывала зависание системы. Устав от бесполезной 

траты нервов, я настроил принт-сервер (используя Linux Slakware 3.5 и Samba 

1.9p18-10). Уже несколько месяцев весь офис (примерно 30 компьютеров) прекрасно 

печатает независимо от операционной системы на компьютере пользователя. 

SysAdmin едет в отпуск (или мечты, которые БУДУТ реальностью) 

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

Прекрасно, если он обладает супер-квалификацией и достаточно суров, чтобы 

выдрессировать пользователей. Тогда один раз настроив систему, он может 

увольняться.

Но я к таким не отношусь; и хотел бы иметь возможность время от времени 

проверять работоспособность системы, находясь вне пределов офиса, и если надо, 

вносить исправления. Как это сделать, если на сервере стоит WindowsNT (и не 

использовать Remote Access, не удобно звонить на модем из другого города или 

страны наример - ведь есть Internet)?

Можно использовать BackOrifice ;-) или воспользоваться Microsoft Unix AddOn 

Pack.

Это прекрасное решение наталкивается на финансовые трудности. Очень трудно 

убедить начальство потратить ~900$ на upgrade Windows NT3.51 до Windows NT4.0 и 

ещеё чуть-чуть на AddOn Pack (не узнавал точно, но думаю не мало), чтобы 

АДМИНИСТРАТОР КОМЬЮТЕРНОЙ СЕТИ ПОЕХАЛ В ОТПУСК. При этом нужно учитывать, что в 

этот комплект входит демон телнета, пароли по сети передаются plain-text. При 

наличии у злоумышленника заинтересованности и snifer все ваши ухищрения по 

безопасности будут сведены к нулю.

Стоит ли городить огород, если возможность удаленного управления давно заложена 

во все UNIX-подобные системы, а развитие средств криптографии позволяет свободно 

распространяемым продуктам (я имею в виду SSH) обеспечить гарантию длительных 

затрат времени и машинных ресурсов для расшифровки сетевого трафика? Можно было 

использовать Samba, но нельзя преуменьшать удобство Windows NT DOMAIN system 

(особенно если рабочие станции в сети сплошной Wintel). И вот появилась Samba 

2.0, с ещё не полной, но достаточно мощной поддержкой WINDOWS NT DOMAIN. Всё 

идёт к тому, что все серверы в нашей компании постепенно будут переведены на 

UNIX-подобные системы. Прошу прощения за столь долгое предисловие. 

Что такое Samba

Samba - свободно распространяемое програмное обеспечение (GPL), позволяющее: 

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

реализаций протокола SMB) на базе открытых систем (OpenVMS, Digital Unix, AIX, 

IRIX, HPUX, Solaris, FreeBSD, NetBSD, Linux, и т.д.); 

б) поддерживать (не полностью) доменную структуру NT DOMAIN; 

1) функции первичного контроллера NT DOMAIN (с некоторыми ограничениями, более 

подробно - "NT DOMAIN support" на сайте Samba Team; 

2) функции участника NT DOMAIN; (с некоторыми ограничениями, более подробно - 

"NT DOMAIN support" на сайте Samba Team; 

в) обеспечивать сервисы WINS (клиент и сервер), TIME-server и т.д. ; 

Рассматривались две конфигурации: 

а) Linux-Samba - Primary DOMAIN Controller с клиентами Windows 9x, Windows NT 

4.0; 

б) Linux-Samba - участник NT DOMAIN с Primary DOMAIN Controller под Windows NT 

Server 3.51 sp5. 

Также были рассмотрены случаи применения encrypted и plain-text passwords и 

опробована конфигурация с поддержкой квотирования дисков. На данный момент 

опробованные конфигурации используются в работе (файл- и принт-серверы). 

Мой опыт в установке и настройке пакета ограничен системами на базе Linux 

Slakware. Самостоятельно были установлены последние стабильные версии версии 

automake, autoconf, make, binutils, egcs. Использовались libc5 стандартной 

поставки Linux Slakware. Пакет shadow был пересобран с поддержкой md5crypt. 

Системы строились с использованием ядер версий 2.0.35 и 2.2.x. В качестве 

системы печати использовался пакет LPRng. Последнюю версию samba- latest.tar.gz 

можно получить на сайте Samba Team. 

Установка

Можно скопировать с ftp-сервера бинарные файлы, скомпилированные под Вашу 

систему или исходные тексты.

При использовании исходных текстов

Конфигурирование и сборка с поддержкой syslog: 

hostname:/usr/src# tar -xvzf samba-2.0.4b.tar.gz

hostname:/usr/src# cd samba-2.0.4b/source

hostname:/usr/src/samba-2.0.4b/source# ./configure --prefix=/usr/local/samba 

--with-syslog 

hostname:/usr/src/samba-2.0.4b/source# make 

hostname:/usr/src/samba-2.0.4b/source# make install

Конфигурирование и сборка с поддержкой syslog и quota:

(должен быть установлен пакет quota из раздела ap1) 

hostname:/usr/src# tar -xvzf samba-2.0.4b.targz 

hostname:/usr/src# cd samba-2.0.4b/source 

hostname:/usr/src/samba-2.0.4b/source# ./configure --prefix=/usr/local/samba 

--with-syslog --with-quota 

host:/usr/src/samba-2.0.4b/source# make 

host:/usr/src/samba-2.0.4b/source# make install

Опция 

--prefix=/usr/local/samba

задаёт путь установки. Для получения полного списка опций: 

host:/usr/src/samba-2.0.4b/source#./configure --help more

После этого копируется файл smb.conf c установками по умолчанию: 

host:/usr/src/samba-2.0.4b/source#cp ../examples/smb.conf.default 

/usr/local/samba/lib/smb.conf

Далее конфигурируется SWAT (Samba Web-based Administrative Tool):

- в файл /etc/inetd.conf добавляеться строка: 

#

swat stream tcp nowait.400 root /usr/local/samba/bin/swat swat

#

- в файл /etc/services добавляеться строка: 

#

swat 901/tcp # Samba web-based administrative tool

#

Затем перезапускаетя daemon inetd. При обращении к http://host:901 при помощи 

браузера, после введения login & password (root), Вы получаете web-интерфейс 

конфигурирования Samba (насколько я знаю - возможна работа с SSL). 

Конфигурации

Primary DOMAIN controller.

Сценарий установки создаёт следующую структуру: 

host:/usr/local/samba#ls -la

total 6

drwxr-xr-x 8 root root 1024 Jun 16 10:34 .

drwxr-xr-x 26 root root 1024 Jun 8 17:06 ..

drwxr-xr-x 2 root root 1024 Jun 10 09:31 bin

drwxr-xr-x 3 root root 1024 May 10 17:24 lib

drwxr-xr-x 6 root root 1024 May 7 13:26 man

drwxr-xr-x 5 root root 1024 May 12 21:16 swat

drwxr-xr-x 3 root root 1024 May 7 14:27 var

host:/usr/local/samba#cd lib

host:/usr/local/samba/lib#ls -la

total 3

drwxr-xr-x 3 root root 1024 May 10 17:24 .

drwxr-xr-x 8 root root 1024 Jun 16 10:34 ..

drwxr-xr-x 2 root root 1024 May 7 13:26 codepages

-rw-r--r-- 1 root root 971 Jun 8 17:06 smb.conf

Дополнительные дирректории

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

Вами - всё можно описать в smb.conf: 

host:/usr/local/samba/lib# mkdir netlogon

host:/usr/local/samba/lib# chown root:root netlogon ; chmod 751 netlogon

host:/usr/local/samba/lib# cd ../ ; mkdir profiles

host:/usr/local/samba# chown root:root profiles ; chmod 751 profiles

host:/usr/local/samba#

При использовании в качестве клиентов Windows NT Workstation или Windows 98, 

имеет смысл создавать [profiles] на квотированном разделе диска. Windows 95 (без 

дополнительных правок в Registry) сохраняет в [profiles] только user.dat

Также следует обратить внимание, что logon-scripts надо создавать с 

использованием Dos- или Windows- редактора текста. 

Plaintext Password

Следует определиться с типом security. Хост, сконфигурированный как PDC, несёт 

функцию авторизации. Значения ключа [security] могут принимать значения [share], 

[user], [server], [domain]. Для каждой из ниже приведённых конфигураций можно 

указать различный тип [security].

Ключ [encrypt password] определяет какой механизм авторизации будет включен. 

Если ключу [encrypt password] присвоено значение "No", то авторизация 

пользователей производится исходя из учётных записей в passwd и shadow. В этом 

случае, пароли прередаются по сети PlainText. Windows 95OSR2, Windows 98, 

Windows NT требуют изменений в registry:

(не рекомендуется для Windows NT) 

Windows 95 OSR2

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VNETSUP]

"EnablePlainTextPassword"=dword:00000001

 

Windows 98

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VNETSUP]

"EnablePlainTextPassword"=dword:00000001

Windows NT

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Rdr\Parameters]

"EnablePlainTextPassword"=dword:00000001

Encripted Password

Все дальнейшие конфигурации рассматриваються для значения ключа [encrypted 

password] = Yes.

При значении ключа [encript passwords] = Yes , авторизация проходит с 

использованием файла smbpasswd. Месторасположение по умолчанию: 

/usr/local/samba/private/smbpasswd

По умолчанию инсталяционный скрипт не создаёт private/smbpasswd. Для внесения 

учётной записи пользователя в файл smbpasswd, нужно: 

1. создать smbpasswd 

host:/usr/local/samba#ls -la

total 6

drwxr-xr-x 8 root root 1024 Jun 16 10:34 .

drwxr-xr-x 26 root root 1024 Jun 8 17:06 ..

drwxr-xr-x 2 root root 1024 Jun 10 09:31 bin

drwxr-xr-x 3 root root 1024 May 10 17:24 lib

drwxr-xr-x 6 root root 1024 May 7 13:26 man

drwxr-xr-x 5 root root 1024 May 12 21:16 swat

drwxr-xr-x 3 root root 1024 May 7 14:27 var

host:/usr/local/samba#mkdir private

host:/usr/local/samba#echo > /private/smbpasswd ; cd private 

host:/usr/local/samba/private# chown root:root smbpasswd ; chmod 600 smbpasswd ; 

cd ../

host:/usr/local/samba/# chown root:root private ; chmod 500 private

2. должна существовать учётная запись Unix: 

Нужно отметить, что файлы passwd и shadow должны содержать учётные записи 

пользователей. При значении ключа [encrypt password] = Yes , учётные записи 

могут иметь вид: 

passwd:

...

username:x:1016:100:MYGROUP User,,,:/home/user_name:/dev/null

...

shadow:

...

username:*:10666:0:99999:7:::

...

3. использовать smbpasswd для создания учётной записи в 

/usr/local/samba/private/smbpasswd 

host:~#/usr/local/samba/bin/smbpasswd -a user_name

Added interface ip=x.x.x.x broadcast=x.x.x.255 netmask=255.255.255.0

New SMB password:

Retype New SMB password:

Addedd user user_name

Password changed for user user_name

host:~#

4. активировать учётную запись (по умолчанию выставляется ключ [account 

disabled]): 

host:~#/usr/local/samba/bin/smbpasswd -e user_name

Added interface ip=x.x.x.x broadcast=x.x.x.255 netmask=255.255.255.0

User user_name enabled 

host:~#

При начальной установке можно использовать скрипт mksmbpasswd.sh, входящий в 

комплект поставки. 

host:~#chmod +x /usr/src/samba-2.0.4b/source/script/mksmbpasswd.sh

host:~#cat /etc/passwd /usr/src/samba-2.0.4b/source/script/mksmbpasswd.sh > \ 

/usr/local/samba/private/smbpasswd

host:~#

Пример рабочей конфигурации Primary Domain Controller (клиенты Windows 9x):

используется тип security = user 

# Samba config file created using SWAT

# Global parameters

workgroup = MYGROUP

netbios name = ASERVER

server string = DOMAIN Controller

security = user

encrypt passwords = Yes

passwd program = /usr/bin/passwd

log file = /usr/local/samba/var/log.%U

max log size = 50

nt acl support = Yes

time server = Yes

socket options = SO_KEEPALIVE SO_BROADCAST TCP_NODELAY SO_RCVBUF=4096 

SO_SNDBUF=4096

load printers = No

character set = KOI8-R

client code page = 866

logon script = %U.bat

logon path = \\%N\Profiles\%U

domain logons = Yes

os level = 33

preferred master = Yes

domain master = Yes

dns proxy = Yes

wins proxy = Yes

wins support = Yes

hosts allow = x.x.x.

[homes]

comment = Home Directories

read only = No

create mask = 0600

browseable = No

[netlogon]

comment = Network Logon Service

path = /usr/local/samba/lib/netlogon

guest ok = No

public = No

locking = No

share modes = No

browseable = Yes

[Profiles]

comment = Users' Profiles

path = /usr/local/samba/profiles

read only = No

browseable = No

[Public]

comment = Public

path = /usr/pub

read only = No

create mask = 0650

Всё! Можно запускать: 

host:~#/usr/local/samba/bin/smbd -D -d2

host:~#/usr/local/samba/bin/nmbd -D -d2

host:~#

Проведя соответствующие настройки в Network Neighbrohood (такие как enable NT 

Domain logon и т.д), можно попробовать зайти в сеть. Для сохранения настроек 

user.dat(для Windows 95) или полного User Profile (для Windows 98) нужно 

сделать: 

host:~#cd /usr/local/samba/profils

host:/usr/local/samba/profiles#mkdir user_name

host:/usr/local/samba/profiles#chown -R user_name:root user_name ; chmod -R 751 

user_name

host:/usr/local/samba/profiles#

Добавление участников Samba PDC

Если в сети есть клиенты Windows NT, необходимо произвести некоторые изменения в 

конфигурации Samba. Также станция с Windows NT, должна быть включена в Samba 

DOMAIN, то есть в smbpasswd должна быть внесена учётная запись mashine account. 

Прежде всего создаём Unix-учётную запись (вносим пользователя с user_name = 

[netbios_name включаемой в NT DOMAIN рабочей станции]+[$], что-то типа 

nt_ws_1$): 

host:~#adduser

Login name for new user (8 characters or less) []: netbios_name$

User id fot netbios_name [defaults to next available]:

Initial groups for netbios_name [users]: nobody

netbios_name$'s home directory [/home/netbios_name]: /dev/null

netbios_name$'s shell [/bin/bash]:

netbios_name$'s account expiry date [MM/DD/YY]:

Ok, I'm about to make a new account. Here's what you entered so far:

New login name: netbios_name$

New UID: [Next available]

Initial group: nobody

Additional groups: [none]

Home directory: /dev/null

Shell: /bin/false

Expiry date: [no expiratron]

This is it... if you want to bail it out, hit Control-C. Otherwise, press

ENTER to go ahead and make the account.

Making new account...

Changing the user information for netbios_name

Enter the new value, or press return for the default

Full Name []:

Room Number []:

Work Phone []:

Home Phone []:

Other []:

Changing password for netbios_name

Enter the new password (minimum of 8, maximum of 127 characters)

Please use a combination of upper and lower case letters and numbers.

New password: some_password_will_be_changed_to-"*-in_shadow_files

Re-enter new password: some_password_will_be_changed_to-"*-in_shadow_files

Done...

host:~#

После этого я правил shadow, меняя зашифрованный пароль на "*".

Следуюший шаг - внесение учётной записи машины в smbpasswd: 

host:~# /usr/local/samba/bin/smbpasswd -a -m netbios_name

Added interface ip=x.x.x.x broadcast=x.x.x.255 netmask=255.255.255.0

Addedd netbios_name$

Password changed for user netbios__name$ 

host:~#

Обратите внимание, что имея Unix-учётную запись netbios_name$, при внесении в 

smbpasswd используем netbios_name. 

Пример рабочей конфигурации Primary Domain Controller (клиенты Windows 9x / 

Windows NT):

используется тип security = user 

# Samba config file created using SWAT

# Global parameters

workgroup = MYGROUP

netbios name = ASERVER

server string = DOMAIN Controller

security = user

encrypt passwords = Yes

passwd program = /usr/bin/passwd

log file = /usr/local/samba/var/log.%U

max log size = 50

nt acl support = Yes

time server = Yes

socket options = SO_KEEPALIVE SO_BROADCAST TCP_NODELAY SO_RCVBUF=4096 

SO_SNDBUF=4096

load printers = No

character set = KOI8-R

client code page = 866

logon script = %U.bat

logon path = \\%N\Profiles\%U

domain logons = Yes

os level = 33

preferred master = Yes

domain master = Yes

dns proxy = Yes

wins proxy = Yes

wins support = Yes

hosts allow = x.x.x.

[homes]

comment = Home Directories

read only = No

create mask = 0600

browseable = No

[netlogon]

comment = Network Logon Service

path = /usr/local/samba/lib/netlogon

guest ok = No

public = No

share modes = No

locking = No

browseable = Yes

[Profiles]

comment = Users' Profiles

path = /usr/local/samba/profiles

read only = No

browseable = No

[Public]

comment = Public

path = /usr/pub

read only = No

create mask = 0650

Всё! Можно запускать: 

host:~#/usr/local/samba/bin/smbd -D -d2

host:~#/usr/local/samba/bin/nmbd -D -d2

host:~#

После этого следует стандартная процедура подключения Windows NT Workstation к 

PDC. Перегружаем Windows NT - можно попробовать зайти! 

NT DOMAIN members

Сначала модифицируeтся файл smb.conf. Ниже приведены рабочие конфигурации файл- 

и принт-сервера (участников NT DOMAIN).

Файл-сервер (пароли шифрованы и проверяются на указанном сервере, выполняющем 

роль Primary DOMAIN controller):

используется тип security = domain. 

# Samba config file created using SWAT

# Global parameters

workgroup = MYGROUP

netbios name = FSERVER1

server string = File-server 1

security = DOMAIN

encrypt passwords = Yes

password server = ASERVER

username map = /usr/local/samba/lib/username.map

log level = 2

log file = /usr/local/samba/var/log.%U

nt acl support = Yes

name resolve order = host wins bcast lmhosts

keepalive = 30

lpq cache time = 30

socket options = SO_KEEPALIVE SO_BROADCAST TCP_NODELAY SO_RCVBUF=4096 

SO_SNDBUF=4096

load printers = No

character set = KOI8-R

client code page = 866

os level = 30

lm interval = 10

dns proxy = No

wins server = x.x.x.x

hosts allow = x.x.x.

wide links = No

[Public]

comment = Varios files

path =/pub/

read only = No

create mask = 0744

Print-сервер (пароли шифрованы, и проверяются на указанном сервер, выполняющем 

роль Primary DOMAIN controller):

используется тип security = domain 

# Samba config file created using SWAT 

# Global parameters 

[global] 

workgroup = MYGROUP

netbios name = PSERVER1 

server string = Print server 

security = DOMAIN 

encrypt passwords = Yes 

password server = ASERVER 

username map = /usr/local/samba/lib/username.map 

log level = 2 

syslog = 2 

log file = /usr/local/samba/var/log.%U 

name resolve order = host wins bcast lmhosts 

keepalive = 60 

lpq cache time = 5 

socket options = SO_KEEPALIVE SO_BROADCAST TCP_NODELAY IPTOS_THROUGHPUT 

SO_RCVBUF=4096 SO_SNDBUF=4096 

load printers = No 

os level = 30 

wins server = x.x.x.x

hosts allow = x.x.x. 

printing = lprng 

wide links = No 

[hp6p] 

print command = /usr/local/bin/lpr -h -r -P%p %s; rm %s 

lpq command = /usr/local/bin/lpq -P%p 

lprm command = /usr/local/bin/lprm -P%p %j 

comment = hp6p Laser Jet 

path = /usr/local/samba/spool/hp6p 

print ok = Yes 

printer name = hp6p 

[hp4000n] 

print command = /usr/local/bin/lpr -h -r -P%p %s; rm %s 

lpq command = /usr/local/bin/lpq -P%p 

lprm command = /usr/local/bin/lprm -P%p %j 

comment = hp4000n Laser Jet 

path = /usr/local/samba/spool/hp4000n 

print ok = Yes 

printer name = hp4000n 

[tek350e] 

print command = /usr/local/bin/lpr -h -r -P%p %s; rm %s 

lpq command = /usr/local/bin/lpq-P%p 

lprm command = /usr/local/bin/lprm -P%p %j 

comment = Tektronix 350 ext 

path = /usr/local/samba/spool/tek350e 

print ok = Yes 

printer name = tek350e 

Должна существовать Unix-учётная запись в passwd и shadow.

Нужно отметить, что файлы passwd и shadow должны содержать учётные записи 

пользователей NT Domain (можно использовать username.map). 

passwd:

...

username:x:1016:300:MYGROUP User,,,:/dev/null:/dev/null

...

shadow:

...

username:*:10666:0:99999:7:::

...

Добавление Samba-box в DOMAIN

После окончания конфигурации (при незапущенных демонах smbd и nmbd) 

производиться добавление Samba-box в NT DOMAIN (используя Server Manager for 

DOMAIN, если PDC - Windows NT Server или рассмотренную выше процедуру). Сначала 

на PDC добавляем Samba-box. Далее используем smbpasswd: 

host:~#/usr/local/samba/bin/smbpasswd -j MYGROUP -r PDC_netbios_name

Added interface ip=x.x.x.x broadcast=x.x.x.255 netmask=255.255.255.0

YYYY/MM/DD hh:mm:ss : change_trust_account_password:

Changed password for domain MYGROUP.

Joined domain MYGROUP.

host:~#

Можно запускать! 

host:~#/usr/local/samba/bin/smbd -D -d2

host:~#/usr/local/samba/bin/nmbd -D -d2

host:~#