Домашний файловый сервер (GNU/Linux) работал на третьей Самбе. Доступ к файлам был сделан полностью публичный анонимный, поскольку посторонних пользователей нет принципиально и защищаться не от кого.
Пришла пора менять сервер на более мощный (появились новые задачи). При настройке возникла проблема с подключением разных клиентов к новой версии Самбы.


Серверная 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)


  1. Neuronix
    14.06.2015 11:27

    И чо?


    1. grumbler66rus Автор
      14.06.2015 11:30
      +1

      Инструкция, вот что. Чтобы не искать ответы на два разных вопроса каждый раз.


      1. Neuronix
        14.06.2015 11:35
        -1

        Это не сложная техническая проблема. Нормальные админы и так знают, что делать. Не для хабра, имхо.


  1. Maysoft
    15.06.2015 09:30
    +1

    нет режима security=share

    Соберите с параметром smbsharemodes
    Решение простое: нужно указать «map to guest = Bad User» в глобальной секции smb.conf (значение по умолчанию — «Never»).

    Если вы не разбираетесь в настройках SAMBA, то могли бы посмотреть в интернете, например, здесь. То есть вы на полном серьезе рекомендуете отклонять запросы с неправильным паролем? Может лучше назначить пользователя при гостевом доступе, например, так:
    guest account = nobody


    1. grumbler66rus Автор
      15.06.2015 09:50

      1) «соберите» означает, что нужно будет вручную отслеживать обновления безопасности. Спасибо за добрый совет. Мне есть чем заняться и без этого.
      2) «guest account» в конфигурации, на которой я искал проблему, указан на специального пользователя. Более того, «guest account = nobody» — это конфигурация по умолчанию.
      3) Я в тексте написал: «в самбе в режиме security=user по умолчанию сделано так, что при попытке входа с неизвестным пользователем она не переключается на гостевой вход», возможно, я выразился непонятно, скажите об этом — поясню другими словами.
      4) Да, я рекомендую отклонять запросы с неправильным паролем, потому что иначе клиенты с Windows не могут получить гостевой доступ. При этом может возникнуть коллизия: если в самбе есть пользователь, под которым пытается залогиниться windows-клиент, он получит отказ. Но я рассматриваю случай с полностью анонимным входом, база пользователей самбы пуста. Пожалуй, укажу это условие в тексте.

      Прежде чем писать «совет», стоило его опробовать самому, тогда стала бы понятна его бессмысленность.


      1. Maysoft
        15.06.2015 15:59

        нужно будет вручную отслеживать обновления безопасности

        Если вы сейчас не отслеживаете, то с чего вдруг вы начнете отслеживать обновления безопасности? Это ваше личное дело, никто вас не собирается заставлять отслеживать реальные и мнимые угрозы. Это к сборке не имеет никакого отношения, но если вам нужна SAMBA с режимом share, тогда у вас вариантов нет, придется собирать ручками. Другой вопрос, что вы не хотите собирать ручками — это тоже ваше право. Речь же шла об утверждении, что такого режима нет, а он есть, просто вы ищете причины, чтобы его не видеть.
        в самбе в режиме security=user по умолчанию сделано так, что при попытке входа с неизвестным пользователем она не переключается на гостевой вход

        Я думаю, правильнее выразиться так: чтобы получить гостевой доступ в режиме security=user нужно:
        1. отклонять запросы с неправильным пользователем|паролем map to guest = Bad User | Bad Password, тогда они будут обрабатываться guest account;
        2. иметь хотя бы один гостевой ресурс (с параметром quest ok = yes).


        1. grumbler66rus Автор
          15.06.2015 17:17

          Если вы сейчас не отслеживаете, то с чего вдруг вы начнете отслеживать обновления безопасности?


          Их отслеживает пакетный менеджер :-D

          иметь хотя бы один гостевой ресурс (с параметром quest ok = yes).


          Это не обязательно. Гостевой доступ бывает и для того, чтобы посмотреть список ресурсов. Другое дело, что без ресурса с гостевым доступом отдавать гостю список ресурсов обычно нет смысла.