Пришла пора менять сервер на более мощный (появились новые задачи). При настройке возникла проблема с подключением разных клиентов к новой версии Самбы.
Серверная samba
И на старом, и на новом серверах используются дистрибутивы GNU/Linux с бинарными пакетами — это облегчает установку и регулярное обновление ПО.
Поскольку разграничение доступа к файловому серверу не нужно, используется гостевой вход и база пользователей samba пустая.
Ключевые параметры smb.conf на старом сервере (smbd version 3.2.5):
[global] security = share dos charset = CP866 guest account = smbguest invalid users = root [files] path = /srv/files comment = Files browseable = yes writable = yes public = yes guest only = yes
На новом сервере Самба уже четвёртой версии, и у неё довольно много изменений. Самое важное для описанной конфигурации:
- нет режима security=share при сборке по умолчанию
Скопировал /etc/samba/smb.conf на новый сервер, закомментировал security=share (по умолчанию используется security=user) и запустил nmbd и smbd.
Клиенты на Linux
Подключение к ресурсу «files» старого сервера в /etc/fstab:
//srv/files /srv/files cifs rw,guest,ip=192.0.2.2,uid=1001,gid=users
При попытке подключить ресурс files нового сервера с теми же опциями получаем ошибку:
# mount -t cifs -o rw,ip=192.0.2.17,uid=1001,gid=users,guest //host-17/files /srv/host17files mount: block device //host-17/files is write-protected, mounting read-only mount: cannot mount block device //host-17/files read-only
Попытки найти правильные параметры окончились неудачей, пришлось гуглить.
Оказалось, что cкомпилированная в /sbin/mount подддержка cifs не поддерживает новые версии самбы, и нужно использовать /sbin/mount.cifs (по умолчанию не установлен). У установленных дистрибутивов Ubuntu и Altlinux этот файл содержится в пакете cifs-utils (версии программы 6.0 и 5.7 соответственно). После установки пакета монтирование стало проходить без ошибок.
Клиенты на Windows
При подключении к старому серверу работал анонимный вход.
При попытке подключиться к новому серверу получаем запрос логина-пароля.
Причина такого поведения в том, что Windows сначала пытается залогиниться на сервер с учётными данными пользователя Windows, и только при неудаче использует гостевой вход, в то же время в самбе в режиме security=user по умолчанию сделано так, что при попытке входа с неизвестным пользователем она не переключается на гостевой вход (за это отвечает параметр «map to guest = Never», такое значение по умолчанию).
Решение простое: нужно указать «map to guest = Bad User» в глобальной секции smb.conf.
В конфигурации, отличающейся от описанной, такое значение параметра может вызвать отказ в подключении — если используется парольный вход и логин совпадает с имеющимся в базе пользователей самбы. Для такого случая есть другие варианты параметра, или можно воспользоваться советом, чтобы имена пользователей не совпадали.

