Домашний файловый сервер (GNU/Linux) работал на третьей Самбе. Доступ к файлам был сделан полностью публичный анонимный, поскольку посторонних пользователей нет принципиально и защищаться не от кого.
Пришла пора менять сервер на более мощный (появились новые задачи). При настройке возникла проблема с подключением разных клиентов к новой версии Самбы.
И на старом, и на новом серверах используются дистрибутивы GNU/Linux с бинарными пакетами — это облегчает установку и регулярное обновление ПО.
Поскольку разграничение доступа к файловому серверу не нужно, используется гостевой вход и база пользователей samba пустая.
Ключевые параметры smb.conf на старом сервере (smbd version 3.2.5):
На новом сервере Самба уже четвёртой версии, и у неё довольно много изменений. Самое важное для описанной конфигурации:
Скопировал /etc/samba/smb.conf на новый сервер, закомментировал security=share (по умолчанию используется security=user) и запустил nmbd и smbd.
Подключение к ресурсу «files» старого сервера в /etc/fstab:
При попытке подключить ресурс files нового сервера с теми же опциями получаем ошибку:
Попытки найти правильные параметры окончились неудачей, пришлось гуглить.
Оказалось, что cкомпилированная в /sbin/mount подддержка cifs не поддерживает новые версии самбы, и нужно использовать /sbin/mount.cifs (по умолчанию не установлен). У установленных дистрибутивов Ubuntu и Altlinux этот файл содержится в пакете cifs-utils (версии программы 6.0 и 5.7 соответственно). После установки пакета монтирование стало проходить без ошибок.
При подключении к старому серверу работал анонимный вход.
При попытке подключиться к новому серверу получаем запрос логина-пароля.
Причина такого поведения в том, что Windows сначала пытается залогиниться на сервер с учётными данными пользователя Windows, и только при неудаче использует гостевой вход, в то же время в самбе в режиме security=user по умолчанию сделано так, что при попытке входа с неизвестным пользователем она не переключается на гостевой вход (за это отвечает параметр «map to guest = Never», такое значение по умолчанию).
Решение простое: нужно указать «map to guest = Bad User» в глобальной секции smb.conf.
В конфигурации, отличающейся от описанной, такое значение параметра может вызвать отказ в подключении — если используется парольный вход и логин совпадает с имеющимся в базе пользователей самбы. Для такого случая есть другие варианты параметра, или можно воспользоваться советом, чтобы имена пользователей не совпадали.
Пришла пора менять сервер на более мощный (появились новые задачи). При настройке возникла проблема с подключением разных клиентов к новой версии Самбы.
Серверная 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.
В конфигурации, отличающейся от описанной, такое значение параметра может вызвать отказ в подключении — если используется парольный вход и логин совпадает с имеющимся в базе пользователей самбы. Для такого случая есть другие варианты параметра, или можно воспользоваться советом, чтобы имена пользователей не совпадали.