Пришла пора менять сервер на более мощный (появились новые задачи). При настройке возникла проблема с подключением разных клиентов к новой версии Самбы.
Серверная 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.
В конфигурации, отличающейся от описанной, такое значение параметра может вызвать отказ в подключении — если используется парольный вход и логин совпадает с имеющимся в базе пользователей самбы. Для такого случая есть другие варианты параметра, или можно воспользоваться советом, чтобы имена пользователей не совпадали.
Комментарии (7)
Maysoft
15.06.2015 09:30+1нет режима security=share
Соберите с параметром smbsharemodes
Решение простое: нужно указать «map to guest = Bad User» в глобальной секции smb.conf (значение по умолчанию — «Never»).
Если вы не разбираетесь в настройках SAMBA, то могли бы посмотреть в интернете, например, здесь. То есть вы на полном серьезе рекомендуете отклонять запросы с неправильным паролем? Может лучше назначить пользователя при гостевом доступе, например, так:
guest account = nobody
grumbler66rus Автор
15.06.2015 09:501) «соберите» означает, что нужно будет вручную отслеживать обновления безопасности. Спасибо за добрый совет. Мне есть чем заняться и без этого.
2) «guest account» в конфигурации, на которой я искал проблему, указан на специального пользователя. Более того, «guest account = nobody» — это конфигурация по умолчанию.
3) Я в тексте написал: «в самбе в режиме security=user по умолчанию сделано так, что при попытке входа с неизвестным пользователем она не переключается на гостевой вход», возможно, я выразился непонятно, скажите об этом — поясню другими словами.
4) Да, я рекомендую отклонять запросы с неправильным паролем, потому что иначе клиенты с Windows не могут получить гостевой доступ. При этом может возникнуть коллизия: если в самбе есть пользователь, под которым пытается залогиниться windows-клиент, он получит отказ. Но я рассматриваю случай с полностью анонимным входом, база пользователей самбы пуста. Пожалуй, укажу это условие в тексте.
Прежде чем писать «совет», стоило его опробовать самому, тогда стала бы понятна его бессмысленность.Maysoft
15.06.2015 15:59нужно будет вручную отслеживать обновления безопасности
Если вы сейчас не отслеживаете, то с чего вдруг вы начнете отслеживать обновления безопасности? Это ваше личное дело, никто вас не собирается заставлять отслеживать реальные и мнимые угрозы. Это к сборке не имеет никакого отношения, но если вам нужна SAMBA с режимом share, тогда у вас вариантов нет, придется собирать ручками. Другой вопрос, что вы не хотите собирать ручками — это тоже ваше право. Речь же шла об утверждении, что такого режима нет, а он есть, просто вы ищете причины, чтобы его не видеть.
в самбе в режиме security=user по умолчанию сделано так, что при попытке входа с неизвестным пользователем она не переключается на гостевой вход
Я думаю, правильнее выразиться так: чтобы получить гостевой доступ в режиме security=user нужно:
- отклонять запросы с неправильным пользователем|паролем map to guest = Bad User | Bad Password, тогда они будут обрабатываться guest account;
- иметь хотя бы один гостевой ресурс (с параметром quest ok = yes).
grumbler66rus Автор
15.06.2015 17:17Если вы сейчас не отслеживаете, то с чего вдруг вы начнете отслеживать обновления безопасности?
Их отслеживает пакетный менеджер :-D
иметь хотя бы один гостевой ресурс (с параметром quest ok = yes).
Это не обязательно. Гостевой доступ бывает и для того, чтобы посмотреть список ресурсов. Другое дело, что без ресурса с гостевым доступом отдавать гостю список ресурсов обычно нет смысла.
Neuronix
И чо?
grumbler66rus Автор
Инструкция, вот что. Чтобы не искать ответы на два разных вопроса каждый раз.
Neuronix
Это не сложная техническая проблема. Нормальные админы и так знают, что делать. Не для хабра, имхо.