Руководство по samba

Состояние перевода: На этой странице представлен перевод статьи Samba. Дата последней синхронизации: 20 марта 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Samba — это реализация сетевого протокола SMB. Она облегчает организацию общего доступа к файлам и принтерам между системами Linux и Windows и является альтернативой NFS.

Создание общих ресурсов описано в разделе #Сервер; подключение к общим ресурсам описано в разделе #Клиент.

Сервер

Установка

Установите пакет samba.

Samba настраивается с помощью файла /etc/samba/smb.conf, который подробно документирован на странице руководства smb.conf(5).

В связи с тем, что пакет samba поставляется без данного файла, вам нужно создать его перед запуском smb.service.

Вы можете воспользоваться документированным примером, как в smb.conf.default из git-репозитория Samba для создания /etc/samba/smb.conf.

Примечание:

  • Значение log file в стандартном файле настроек указывает в место, доступное только для чтения, что будет вызывать ошибки. Можно воспользоваться одним из следующих решений:
    • Задайте расположение, доступное для записи: log file = /var/log/samba/%m.log
    • Используйте бекенд для нефайлового журналирования: замените logging = syslog на syslog only = yes или используйте logging = systemd
  • Если требуется; workgroup, указанная в секции [global], должна соответствовать домашней группе (workgroup) Windows (по умолчанию: WORKGROUP).

Совет: Каждый раз, когда вы изменяете файл smb.conf, запускайте команду testparm(1) для проверки файла на синтаксические ошибки.

Включение и запуск служб

Для работы общего доступа к файлам запустите и включите службу smb.service. Смотрите smbd(8) для более подробной информации.

Если вы хотите, чтобы сервер был доступен по имени хоста NetBIOS, пропишите желаемое имя в опции netbios name в smb.conf и запустите и включите службу nmb.service. Смотрите nmbd(8) для более подробной информации.

Примечание: Использовать nmb.service необязательно, однако он нужен для подключения к Samba-серверу по имени хоста (например, smb://hostname/). Если в вашей сети используются только компьютеры с Windows 10 или новее, также стоит установить демон WSD, чтобы Проводник отображал сервер в просмотре сети.

Настройка межсетевого экрана

Если вы используете межсетевой экран, не забудьте открыть необходимые порты (как правило, 137-139 + 445). Для получения информации о полном списке портов, смотрите использование портов Samba.

Правило UFW

Профиль Ufw для SMB/CIFS доступен в стандартной установке UFW в ufw-fileserver.

Разрешите Samba, выполнив команду ufw allow CIFS от имени root.

Если вы удалили профиль, создайте или отредактируйте файл /etc/ufw/applications.d/samba, добавив следующее:

[Samba]
title=LanManager-like file and printer server for Unix
description=The Samba software suite is a collection of programs that implements the SMB/CIFS protocol for unix systems, allowing you to serve files and printers to Windows, NT, OS/2 and DOS clients. This protocol is sometimes also referred to as the LanManager or NetBIOS protocol.
ports=137,138/udp|139,445/tcp

Затем загрузите этот профиль в UFW, запустив команду ufw app update Samba как root.

После этого можно разрешить доступ к Samba, запустив ufw allow Samba от имени root.

Служба firewalld

Для настройки firewalld, чтобы разрешить Samba в зоне home, выполните:

# firewall-cmd --permanent --add-service={samba,samba-client,samba-dc} --zone=home

Эти три службы таковы:

  • samba: для общего доступа к файлам.
  • samba-client: для просмотра общих ресурсов других устройств по сети.
  • samba-dc: для контроллера домена Active Directory.

Параметр --permanent сделает изменения постоянными.

Использование

Управление пользователями

В следующем разделе описывается создание локальной (tdbsam) базы данных пользователей Samba. Для аутентификации пользователей и других целей Samba также может быть привязана к домену Active Directory, может сама служить контроллером домена Active Directory или использоваться с сервером LDAP.

Добавление пользователя

Для работы Samba требуется какой-нибудь Linux-пользователь — вы можете использовать существующего пользователя или создать нового.

Примечание: Пользователь и группа nobody изначально существуют в системе, используются как гостевой аккаунт (guest account) по умолчанию и могут быть использованы в ресурсах для общего доступа с опцией guest ok = yes, благодаря чему пользователям не понадобится логиниться для доступа к таким ресурсам.

Хотя имена пользователей Samba общие с системными пользователями, Samba использует для них отдельные пароли. Чтобы добавить нового пользователя Samba, воспользуйтесь следующей, заменив пользователь_samba на имя нужного пользователя:

# smbpasswd -a пользователь_samba

Будет предложено задать пароль для этого пользователя.

В зависимости от роли сервера может понадобиться изменить разрешения и атрибуты файлов для аккаунта Samba.

Если вы хотите разрешить новому пользователю только доступ к Samba-ресурсам и запретить полноценный вход в систему, можно ограничить возможности входа:

  • отключить командную оболочку — usermod --shell /usr/bin/nologin --lock пользователь_samba
  • отключить вход по SSH — измените опцию AllowUsers в файле /etc/ssh/sshd_config

См. также рекомендации по повышению защищённости системы.

Просмотр списка пользователей

Список добавленных в Samba пользователей можно посмотреть с помощью команды pdbedit(8):

# pdbedit -L -v
Смена пароля пользователя

Чтобы сменить пароль пользователя, используйте smbpasswd:

# smbpasswd пользователь_samba

Создание общего ресурса для анонимных пользователей

1. Создайте пользователя Linux, который будет использоваться для анонимных пользователей Samba:

# useradd guest -s /bin/nologin

Примечание: Имя пользователя может быть любым допустимым именем Linux, не только «guest». Пользователь не обязательно должен быть пользователем Samba.

2. Добавьте в /etc/samba/smb.conf:

/etc/samba/smb.conf
...
[global]
security = user
map to guest = bad user
guest account = guest

[guest]
    comment = guest
    path = /tmp/
    public = yes
    only guest = yes
    writable = yes
    printable = no

Теперь все анонимные пользователи будут использовать Linux-пользователя guest для доступа к каталогам, указанным в guest.path (в данном примере /tmp/).

Убедитесь, что общие ресурсы корректно настроены в соответствии с секцией Share Definitions из smb.conf.default.

Включение следования по символическим ссылкам

Важно: Включение опции follow symlinks может быть риском для безопасности.

/etc/samba/smb.conf
...
[global]
   follow symlinks = yes
   wide links = yes
   unix extensions = no

После изменений перезапустите службу smb.service.

Примечание: При использовании AppArmor, если символическая ссылка указывает за пределы домашнего каталога пользователя или usershare, понадобится изменить разрешения в профиле AppArmor.

Расширенная конфигурация

Создание ресурсов общего доступа от имени обычного пользователя

Примечание: Это опциональная возможность. Можете пропустить этот раздел, если она вам не нужна.

Usershares — это возможность, позволяющая обычным пользователям добавлять, изменять и удалять собственные ресурсы общего доступа.

  1. Создайте каталог, в котором будут храниться описания пользовательских общих ресурсов:
    # mkdir /var/lib/samba/usershares
  2. Создайте группу для пользователей, которые смогут создавать общие ресурсы:
    # groupadd -r sambashare
  3. Измените владельца каталога на root, а группу на sambashare:
    # chown root:sambashare /var/lib/samba/usershares
  4. Измените разрешения каталога usershares, чтобы только пользователи из группы sambashare могли создавать файлы. Эта команда также устанавливает sticky bit, благодаря которому пользователи не смогут удалять чужие общие ресурсы:
    # chmod 1770 /var/lib/samba/usershares

Задайте эти переменные в конфигурационном файле smb.conf:

/etc/samba/smb.conf
[global]
  usershare path = /var/lib/samba/usershares
  usershare max shares = 100
  usershare allow guests = yes
  usershare owner only = yes

Добавьте вашего пользователя в группу sambashare. Замените ваше_имя_пользователя на имя вашего linux-пользователя:

# gpasswd sambashare -a ваше_имя_пользователя

Перезапустите службы smb.service и nmb.service.

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

Если вы хотите предоставить общий доступ к файлам, находящимся в вашем домашнем каталоге, не забудьте задать доступ как минимум на чтение другим пользователям (chmod a+rX).

Теперь у вас должна появиться возможность настраивать общий доступ samba, используя графический интерфейс. Например, в Thunar или Dolphin вы можете нажать правую кнопку мыши на любом каталоге и предоставить для него общий доступ в сети.

Для настройки общего доступа через командную строку используйте одну из следующих команд:

# net usershare add имя-ресурса абсолютный-путь [комментарий] [пользователь:{R|D|F}] [guest_ok={y|n}]
# net usershare delete имя-ресурса
# net usershare list wildcard-имя-ресурса
# net usershare info wildcard-имя-ресурса

Установка и форсирование прав доступа

Разрешения могут быть применены и к серверу, и к отдельным ресурсам:

/etc/samba/smb.conf
[global]
  ;inherit owner = unix only ; Наследовать владельца родительского каталога для новых файлов и каталогов
  ;inherit permissions = yes ; Наследовать разрешения родительского каталога для новых файлов и каталогов
  create mask = 0664
  directory mask = 2755
  force create mode = 0644
  force directory mode = 2755
  ...

[media]
  comment = Ресурс, доступный для greg и pcusers
  path = /path/to/media
  valid users = greg @pcusers
  force group = +pcusers
  public = no
  writable = yes
  create mask = 0664
  directory mask = 2775
  force create mode = 0664
  force directory mode = 2775

[public]
  comment = Общий ресурс, в котором archie имеет доступ на запись
  path = /path/to/public
  public = yes
  read only = yes
  write list = archie
  printable = no

[guests]
  comment = Ресурс, разрешающий чтение и запись всем пользователям
  path = /path/to/guests
  public = yes
  only guest = yes
  writable = yes
  printable = no

См. smb.conf(5) для более подробной информации о настройке прав доступа.

Ограничение версии протокола для повышения безопасности

Важно: По умолчанию Samba версии 4.11 допускает соединение с использованием устаревшего и небезопасного протокола SMB1. Для этих версий Samba крайне рекомендуется задать опцию server min protocol = SMB2_02 для защиты от ransomware атак. В Samba 4.11 и новее по умолчанию используется SMB2, так что изменения не требуются.

В файле /etc/samba/smb.conf добавьте опции server min protocol и server max protocol для ограничения используемых версий протокола:

/etc/samba/smb.conf
[global]
  server min protocol = SMB2_02
  ; server max protocol = SMB3

См. server max protocol в smb.conf(5) для обзора поддерживаемых протоколов.

Для совместимости со старыми клиентами и/или серверами вам может понадобиться указать client min protocol = CORE или server min protocol = CORE, но имейте в виду, что это делает вас уязвимым в связи с эксплойтами в SMB1, в том числе к ransomware атакам.

Совет: Используйте server min protocol = SMB3_00 если хотите использовать только самый новый протокол SMB3, например с клиентами на Windows 8 и новее.

Клиентам, использующим mount.cifs, может понадобиться указать правильный vers=*, например:

# mount -t cifs //SERVER/имя-ресурса /mnt/точка-монтирования -o username=пользователь,password=пароль,iocharset=utf8,vers=3.1.1

Подробнее см. mount.cifs(8).

Использование шифрования SMB

Нативное шифрование транспорта SMB доступно с версии SMB 3.0. Среди клиентов, поддерживающих такое шифрование, имеются Windows 8 и новее, Windows Server 2012 новее, smbclient в Samba 4.1 и новее.

Для использования шифрования по умолчанию установите параметр server smb encrypt глобально или для отдельных ресурсов. Возможные значения — off, enabled (значение по умолчанию), desired или required:

/etc/samba/smb.conf
[global]
  server smb encrypt = desired

Смотрите smb.conf(5) для более подробной информации, особенно разделы Effects for SMB1 и Effects for SMB2.

Совет: При ручном монтировании ресурса укажите опцию монтирования seal чтобы принудительно включить шифрование.

Отключение общего доступа к принтерам

По умолчанию Samba предоставляет общий доступ к принтерам, настроенным через CUPS.

Если вам это не нужно, используйте следующие опции для отключения:

/etc/samba/smb.conf
[global]
  load printers = no
  printing = bsd
  printcap name = /dev/null
  disable spoolss = yes
  show add printer wizard = no

Запрет определённых расширений файлов в общем ресурсе Samba

Примечание: Использование этой опции влияет на производительность Samba, так как вынуждает проверять все файлы и каталоги на совпадение по мере их сканирования.

Samba предоставляет опцию для блокирования файлов по определённым паттернам, вроде расширений файлов. Её можно использовать для предотвращения распространения вирусов или для того, чтобы пользователи не тратили место на определённые файлы. Более подробную информацию можно найти в smb.conf(5).

/etc/samba/smb.conf
...
[myshare]
  comment = Private
  path = /mnt/data
  read only = no
  veto files = /*.exe/*.com/*.dll/*.bat/*.vbs/*.tmp/*.mp3/*.avi/*.mp4/*.wmv/*.wma/

Увеличение пропускной способности

Важно: Помните, что это может привести к проблемам с подключением и потенциально сломать ваш стек TCP/IP.

Большинству пользователей подойдут настройки по умолчанию. Однако корректное использование ‘socket options’ может улучшить производительность, но ошибки в настройке также могут и ухудшить её. Проверяйте эффекты, прежде чем вносить какие-либо серьезные изменения.

Читайте smb.conf(5) прежде чем применять описанные здесь опции.

Эти опции прописываются в файле /etc/samba/smb.conf в секции [global].

SMB3 multi-channel может улучшить производительности, однако иногда может испортить данные из-за race conditions. В будущих версиях ситуация может улучшиться:

server multi channel support = yes

Ограничение времени бездействия полезно для предотвращения исчерпания ресурсов сервера из-за большого количества неактивных подключений:

deadtime = 30

Использование sendfile улучшает эффективность использования процессора и повышает скорость Samba:

use sendfile = yes

Установка min receivefile size разрешает zero-copy запись непосредственно из буфера сокета в кэш файловой системы (если доступен). Это может улучшить производительность, но требует тестирования:

min receivefile size = 16384

Асинхронное чтение/запись файлов может повысить производительность:

aio read size = 1
aio write size = 1

Увеличение размера буферов приёма/отправки и флаги оптимизации сокетов могут быть полезны для улучшения производительности. Рекомендуется протестировать каждый флаг отдельно, так как они могут вызывать проблемы в некоторых сетях:

socket options = IPTOS_LOWDELAY TCP_NODELAY IPTOS_THROUGHPUT SO_RCVBUF=131072 SO_SNDBUF=131072

Примечание: Для некоторых опций может понадобиться изменить настройки сетевого интерфейса, см. Sysctl#Networking.

Включение доступа для старых клиентов или устройств

Последние версии Samba больше не предлагают старые методы аутентификации и протоколы, которые всё ещё используются некоторыми старыми клиентами (IP-камерами и т.д.). Такие устройства обычно требуют от сервера разрешения аутентификации NTLMv1 и протокола NT1, известного как CIFS. Чтобы эти устройства работали с последней версией Samba, добавьте эти два параметра в секцию [global]:

server min protocol = NT1
ntlm auth = yes

Для анонимного/гостевого доступа достаточно лишь первого параметра. Если старое устройство использует имя и пароль для доступа, то нужен и второй параметр тоже.

Включение поиска Spotlight

Spotlight позволяет поддерживающим его клиентам (например, MacOS Finder) быстро искать общие файлы.

Установите и запустите OpenSearch. Установите fs2es-indexerAUR, настройте каталоги, которые вы хотите индексировать, в /etc/fs2es-indexer/config.yml, и запустите/включите fs2es-indexer.service для периодического индексирования.

Измените smb.conf как описано в Samba wiki и перезапустите smb.service для применения изменений.

Клиент

Установите пакет smbclient, который предоставляет ftp-подобный интерфейс командной строки. Часто используемые команды описаны в smbclient(1).

В качестве легковесной альтернативы (без возможности посмотреть список общих ресурсов и т.д.) можно использовать cifs-utils, который предоставляет команду /usr/bin/mount.cifs.

Некоторые среды рабочего стола также имеют графический интерфейс для доступа к общим ресурсам и управления ими (смотрите #Настройка файлового менеджера).

Примечание:

  • smbclient требует наличия файла /etc/samba/smb.conf (смотрите раздел #Установка); можно просто создать пустой файл командой touch.
  • После установки cifs-utils или smbclient загрузите модуль ядра cifs или перезагрузитесь, чтобы не возникало ошибок монтирования.

Просмотр публичных ресурсов для общего доступа

Чтобы вывести список общедоступных ресурсов на сервере:

$ smbclient -L hostname -U%

Также можно использовать команду $ smbtree -N, которая покажет древовидную диаграмму всех общих ресурсов. Она использует широковещательные (broadcast) запросы и потому не рекомендуется для использования в сетях с большим числом компьютеров, но может быть полезна для проверки правильности имён общих ресурсов. Опция -N (-no-pass) отключает запрос пароля.

Примечание: smbtree использует SMB1 и NetBIOS, что означает, что они должны быть включены на стороне сервера, а на стороне клиента нужно добавить client min protocol = NT1 в smb.conf. Без этого smbtree ничего не выведет.

Имена хостов NetBIOS/WINS

Клиенты Samba обрабатывают имена хостов NetBIOS автоматически по умолчанию (поведение регулируется опцией name resolve order в smb.conf). Другие программы (в том числе mount.cifs) используют Name Service Switch, который не использует NetBIOS по умолчанию.

Пакет smbclient предоставляет драйвер libnss для разрешения имён NetBIOS. Для его использования установите его вместе с пакетом samba (который предоставляет демон winbindd), запустите и включите службу winbind.service и добавьте wins в строку hosts в файле nsswitch.conf(5):

/etc/nsswitch.conf
...
hosts: mymachines resolve [!UNAVAIL=return] files myhostname dns wins
...

Примечание: Из-за текущей ошибки в winbind.service вам нужно вручную изменить файл юнита как описано в этом баг-репорте

Теперь в процессе разрешения имён (например, при использовании mount.cifs или просто ping имя-netbios) демон winbindd будет отправлять запросы с использованием протокола NetBIOS Name Service (NBNS, также известен как WINS).

По умолчанию он отправляет широковещательный (broadcast) запрос в локальную сеть. Если у вас есть WINS-сервер, вы можете добавить wins server = ip-сервера-wins в smb.conf и перезапустить winbind.service, тогда winbindd и другие клиенты Samba станут отправлять unicast-запросы на указанный IP.

Если вы хотите, чтобы разрешение имени локального компьютера (которое указывается в опции netbios name в smb.conf) тоже работало, запустите и включите службу nmb.service, которая будет обрабатывать входящие запросы.

Вы можете протестировать разрешение WINS с помощью nmblookup. По умолчанию он отправляет широковещательные запросы в вашу локальную сеть независимо от значения опции wins server.

Имейте в виду, что WINS использует трафик, приходящий из порта 137.

Отключение поддержки NetBIOS/WINS

Если разрешение имён хостов NetBIOS/WINS не используется, может быть предпочтительно отключение этого протокола:

/etc/samba/smb.conf
[global]
  disable netbios = yes
  dns proxy = no

Затем отключите/остановите winbind.service.

Ручное монтирование

Создайте точку монтирования для ресурса:

# mkdir /mnt/точка_монтирования

Примонтируйте ресурс, в качестве type указав mount.cifs. Не все опции из перечисленных ниже необходимы или желательны:

# mount -t cifs //СЕРВЕР/имя_ресурса /mnt/точка_монтирования -o username=имя_пользователя,password=пароль,workgroup=рабочая_группа,iocharset=utf8,uid=пользователь,gid=группа

Опции uid и gid соответствуют локальному (клиентскому) пользователю/группе, которые получат доступ на чтение и запись по указанному пути.

Примечание:

  • Если используемые uid и gid не соответствуют пользователю на сервере, могут помочь опции forceuid и forcegid. Но имейте в виду, что тогда права доступа, отображаемые на клиенте, могут не соответствовать реальным правам доступа на сервере. Подробности смотрите в разделе File And Directory Ownership And Permissions в mount.cifs(8) § FILE AND DIRECTORY OWNERSHIP AND PERMISSIONS.
  • Для подключения общего ресурса Windows без аутентификации укажите "username=*".

Важно: Использование uid и/или gid может приводить к ошибкам ввода-вывода; вместо этого рекомендуется установить/проверить корректность разрешений и атрибутов файлов.

  • СЕРВЕР — Имя сервера.
  • имя_ресурса — Название каталога с общим доступом.
  • точка_монтирования — Локальный каталог, в который будет примонтирован ресурс.
  • [-o опции] — Смотрите страницу руководства mount.cifs(8) для получения информации.

Примечание:

  • Не используйте слэш / в конце пути. //СЕРВЕР/имя_ресурса/ не будет работать.
  • Если примонтированный вами ресурс работает нестабильно или зависает (freeze), попробуйте включить другую версию протокола SMB, используя опцию vers=. Например, vers=2.0 для Windows Vista.
  • Если при завершении работы системы на примонтированных ресурсах происходят таймауты, смотрите wpa_supplicant#Problem with mounted network shares (cifs) and shutdown.

Хранение пароля от общих ресурсов

Хранение паролей в доступном для чтения файле не рекомендуется. Более безопасным методом является использование файла, например, внутри /etc/samba/credentials:

/etc/samba/credentials/share
username=имя_пользователя
password=пароль

В команде mount замените опции username=myuser,password=mypass на credentials=/etc/samba/credentials/share.

Для безопасности этот файл должен быть доступен только для root:

# chown root:root /etc/samba/credentials
# chmod 700 /etc/samba/credentials
# chmod 600 /etc/samba/credentials/share

Автоматическое монтирование

Примечание: Вам может понадобиться включить службу systemd-networkd-wait-online.service или NetworkManager-wait-online.service (зависит от вашей установки) для корректного запуска системы.

С использованием NetworkManager и GIO/gvfs

NetworkManager может быть настроен на запуск скриптов при изменении состояния сети. Приведённый ниже скрипт использует команду gio, чтобы автоматически монтировать общие ресурсы Samba аналогично тому, как делает ваш файловый менеджер, как описано ниже. Скрипт также безопасно размонтирует их перед отключением сети путём отслеживания событий pre-down и vpn-pre-down. Сделайте скрипт исполняемым после создания.

/etc/NetworkManager/dispatcher.d/30-samba.sh
#!/bin/sh

# Найдите UUID нужного соединения с помощью команды «nmcli con show».
# Поддерживаются все типы соединений NetworkManager: беспроводные, VPN, проводные...
WANTED_CON_UUID="CHANGE-ME-NOW-9c7eff15-010a-4b1c-a786-9b4efa218ba9"

# Пользователь, под которым будет примонтирован общий ресурс
USER="yourusername"
# Путь, который отображается в вашем файловом менеджере, когда вы вручную монтируете нужный общий ресурс
SMB_URL="smb://servername/share"

# Получаем runtime-каталог пользователя. Если его нет, то просто выходим
XDG_RUNTIME_DIR=$(loginctl show-user --property=RuntimePath --value "$USER") || exit 0

if [ "$CONNECTION_UUID" = "$WANTED_CON_UUID" ]; then
    
    # Параметр скрипта $1: название сетевого интерфейса, не используется
    # Параметр скрипта $2: отправленное событие
    
    case "$2" in
        "up")
            su $USER -c "DBUS_SESSION_BUS_ADDRESS=unix:path=$XDG_RUNTIME_DIR/bus gio mount $SMB_URL"
            ;;
        "pre-down"|"vpn-pre-down")
            su $USER -c "DBUS_SESSION_BUS_ADDRESS=unix:path=$XDG_RUNTIME_DIR/bus gio mount -uf $SMB_URL"
            ;;
    esac
fi

Создайте символическую ссылку в каталоге /etc/NetworkManager/dispatcher.d/pre-down, чтобы скрипт получал события pre-down:

# ln -s /etc/NetworkManager/dispatcher.d/30-samba.sh /etc/NetworkManager/dispatcher.d/pre-down.d/30-samba.sh

Примечание: Так как этот скрипт использует пользовательскую шину, он будет работать, только если у указанного пользователя есть активные сеансы. Это означает, что ресурс не будет примонтирован автоматически после загрузки, если соединение с сетью было установлено до того, как вы залогинились.

С помощью записи в fstab

Простой пример cifs записи в fstab с аутентификацией:

/etc/fstab
//СЕРВЕР/имя_ресурса /mnt/точка_монтирования cifs _netdev,nofail,username=имя_пользователя,password=пароль 0 0

Примечание:

  • Пробелы в именах ресурсов должны быть заменены на 40 (восьмеричный ASCII-код для пробелов). Например, //СЕРВЕР/имя ресурса должно быть заменено на //СЕРВЕР/имя40ресурса в /etc/fstab.
  • Чтобы разрешить монтирование простым пользователям без прав root, когда точка монтирования находится в доступном пользователю каталоге (например, домашнем), добавьте опцию users (обязательно с s на конце).

С помощью юнита systemd

Создайте новый файл .mount в каталоге /etc/systemd/system, например mnt-myshare.mount. Смотрите systemd.mount(5) для более подробной информации.

Примечание: Имя создаваемого файла должно соответствовать точке монтирования, которую вы хотите использовать. Например, имя mnt-myshare.mount должно использоваться для точки монтирования /mnt/myshare. В противном случае вы получите ошибку systemd[1]: mnt-myshare.mount: Where= setting does not match unit name. Refusing..

What= путь к общему ресурсу

Where= путь, куда он будет примонтирован

Options= опции монтирования

Примечание:

  • К сетевым точкам монтирования автоматически добавляются After-зависимости remote-fs-pre.target, network.target и network-online.target, а также Before-зависимость remote-fs.target, если не указана опция nofail; иначе используется Wants.
  • Добавьте noauto в Options для отключения автоматического монтирования (если его не будет монтировать какой-нибудь другой юнит).
  • Если в качестве адреса сервера вы хотите использовать имя хоста вместо IP-адреса, добавьте nss-lookup.target в After. Это может предотвратить ошибки монтироваия при загрузке.
/etc/systemd/system/mnt-myshare.mount
[Unit]
Description=Mount Share at boot

[Mount]
What=//server/share
Where=/mnt/myshare
Options=_netdev,credentials=/etc/samba/credentials/myshare,iocharset=utf8,rw
Type=cifs
TimeoutSec=30

[Install]
WantedBy=multi-user.target

Совет:

  • На случай, если удалённая система станет недоступна, добавьте ForceUnmount=true в секцию [Mount], чтобы разрешить принудительное размонтирование.
  • Если общий ресурс имеет группы с доступом только для чтения, добавьте uid=пользователь или gid=группа в Options=, чтобы указать пользователя/группу, которые имеют право на запись.

Для использования mnt-myshare.mount запустите этот юнит и включите его для автоматического монтирования при загрузке системы.

Автомонтирование

Для автоматического монтирования ресурса (при обращении к нему, как autofs) можно использовать следующий блок automount:

/etc/systemd/system/mnt-myshare.automount
[Unit]
Description=Automount myshare

[Automount]
Where=/mnt/myshare

[Install]
WantedBy=multi-user.target

Остановите и отключите юнит mnt-myshare.mount, а вместо него запустите и включите юнит mnt-myshare.automount.

Совет: Добавьте TimeoutIdleSec для включения автоматического размонтирования при бездействии. Подробнее смотрите systemd.automount(5).

smbnetfs

Примечание: для smbnetfs необходима целая (нетронутая?) (intact) установка сервера Samba. Смотрите выше, как это сделать

Для начала удостоверьтесь, что вам доступны все ресурсы, которые вам нужны для монтирования:

$ smbtree -U удаленный_пользователь

Если это не работает, найдите и измените следующую строку в /etc/samba/smb.conf подобным образом:

domain master = auto

Затем перезапустите smb.service и nmb.service.

Если всё работает как нужно, установите пакет smbnetfs.

Затем добавьте следующую строку в файл /etc/fuse.conf:

user_allow_other

Скопируйте каталог /etc/smbnetfs/.smb в вашу домашнюю директорию:

$ cp -a /etc/smbnetfs/.smb ~

Затем создайте ссылку на файл smb.conf:

$ ln -sf /etc/samba/smb.conf ~/.smb/smb.conf

Если для доступа к каким-либо общим ресурсам нужен пароль, измените файл ~/.smb/smbnetfs.auth, прописав в нём пароли для определённых хостов примерно так:

~/.smb/smbnetfs.auth
auth			"хост" "пользователь" "пароль"

Также можно добавить записи для определённых хостов, которые будут монтироваться smbnetfs, если это необходимо. Более подробную информацию можно найти в ~/.smb/smbnetfs.conf.

Если вы используете Dolphin или GNOME Files, можно добавить следующую опцию ~/.smb/smbnetfs.conf, чтобы избежать предупреждений о переполненном диске, так как smbnetfs по умолчанию сообщает, что свободно 0 байт:

~/.smb/smbnetfs.conf
free_space_size 1073741824

Когда вы закончите настройку, необходимо выполнить

$ chmod 600 ~/.smb/smbnetfs.*

В противном случае smbnetfs пожалуется: ‘insecure config file permissions’.

Наконец, чтобы примонтировать сетевое окружение Samba в каталог по вашему выбору, выполните

$ smbnetfs точка_монтирования
Демон

Пакет в Arch Linux также поддерживает дополнительный «общесистемный» режим для smbnetfs. Чтобы его включить, вам необходимо выполнить указанные изменения в каталоге /etc/smbnetfs/.smb.

Затем вы можете запустить и/или включить в автозагрузку демон smbnetfs обычным способом. Общесистемной точкой монтирования является /mnt/smbnet/.

autofs

Смотрите статью Autofs для получения информации об автомонтировщике ядра (kernel-based) Linux.

Настройка файлового менеджера

GNOME Files, Nemo, Caja, Thunar и PCManFM

Чтобы получить доступ к ресурсам samba через GNOME Files, Nemo, Caja, Thunar или PCManFM, установите пакет gvfs-smb, доступный в официальных репозиториях.

Нажмите Ctrl+l и введите smb://имя_сервера/ресурс в панель адреса, чтобы получить доступ к ресурсу.

Примонтированный ресурс, вероятно, будет представлен в файловой системе по пути /run/user/ваш_UID/gvfs или ~/.gvfs.

KDE

Приложения KDE (например, Dolphin) имеют встроенную возможность просмотра ресурсов Samba, в этом случае нет необходимости в дополнительных пакетах. Используйте адрес smb://имя_сервера/имя_ресурса для подключения и просмотра файлов. Для доступа к файлам из приложений, не являющихся частью KDE, можно установить kio-fuse.

Графический интерфейс настроек предоставляется пакетом kdenetwork-filesharing.

Другие графические окружения

Есть несколько полезных программ, но им могут требоваться пакеты, созданные для них. Это может быть сделано с помощью Arch package build system. Хорошая новость заключается в том, что они не нуждаются в особом окружении, устанавливаемом для их поддержки, так что они «тянут» за собой меньше пакетов.

  • pyneighborhoodAUR доступен AUR.
  • Плагины LinNeighborhood, RUmba, xffm-samba для Xffm недоступен в официальных репозиториях или в AUR. Поскольку они не поддерживаются официально (или поддерживаются, но неофициально), они могут быть устаревшими и не работать в полной мере

Советы и рекомендации

Обнаружение общих сетевых ресурсов

Если о других системах в локальной сети ничего не известно, а инструменты вроде smbnetfs не подходят, можно попробовать поискать ресурсы Samba вручную.

Сперва установите пакеты nmap и smbclient.

Используйте nmap для сканирования локальной сети и поиска систем с открытым TCP-портом 445, который используется протоколом SMB. Имейте в виду, что вам может понадобиться использовать опцию -Pn или задать другой тип пинг-сканирования, так как Windows-системы обычно защищены межсетевым экраном.

$ nmap -p 445 "192.168.1.*"
Starting Nmap 7.92 ( https://nmap.org ) at 2022-03-13 12:00 UTC
Nmap scan report for 192.168.1.1
Host is up (0.0011s latency).

PORT    STATE  SERVICE
445/tcp open  microsoft-ds

Nmap scan report for 192.168.1.2
Host is up (0.00011s latency).

PORT    STATE SERVICE
445/tcp open  microsoft-ds

Nmap done: 256 IP addresses (2 hosts up) scanned in 2.45 seconds

Первый результат — другая система; второй — клиент, с которого было выполнено сканирование.

Теперь можно подключиться к этим IP-адресам напрямую, но если вы хотите использовать имена хостов NetBIOS, можно использовать nmblookup(1), чтобы узнать имена NetBIOS. Имейте в виду, что это не будет работать, если NetBIOS отключен на стороне сервера.

$ nmblookup -A 192.168.1.1
Looking up status of 192.168.1.1
        PUTER           <00> -         B <ACTIVE>
        HOMENET         <00> - <GROUP> B <ACTIVE>
        PUTER           <03> -         B <ACTIVE>
        PUTER           <20> -         B <ACTIVE>
        HOMENET         <1e> - <GROUP> B <ACTIVE>
        USERNAME        <03> -         B <ACTIVE>
        HOMENET         <1d> -         B <ACTIVE>
        MSBROWSE        <01> - <GROUP> B <ACTIVE>

Независимо от вывода, смотрите на <20>, который обозначает хост с открытыми сервисами.

С помощью smbclient(1) чтобы посмотреть список доступных ресурсов на сервере. Вместо IP-адреса можно использовать NetBIOS-имя (PUTER в данном примере), если оно доступно. Если будет запрошен пароль, можно просто нажать Enter — список общих ресурсов всё равно отобразится:

$ smbclient -L \192.168.1.1
Sharename       Type      Comment
---------       ----      -------
MY_MUSIC        Disk
SHAREDDOCS      Disk
PRINTER$        Disk
PRINTER         Printer
IPC$            IPC       Remote Inter Process Communication

Server               Comment
---------            -------
PUTER

Workgroup            Master
---------            -------
HOMENET               PUTER

Удалённое управление компьютером Windows

Samba предлагает набор инструментов для взаимодействия с Windows. Они могут пригодиться, если доступ к компьютеру Windows через удалённый рабочий стол невозможен, как показано на некоторых примерах.

Отправка команды shutdown с комментарием:

$ net rpc shutdown -C "comment" -I IPADDRESS -U USERNAME%PASSWORD

Принудительное выключение можно вызвать, заменив -C с комментарием на один -f. Для перезапуска можно добавить -r, за которым следует -C или -f.

Остановка и запуск служб:

$ net rpc service stop SERVICENAME -I IPADDRESS -U USERNAME%PASSWORD

Список доступных команд net rpc:

$ net rpc

Решение проблем

Не удаётся запустить Samba SMB/CIFS сервер

  • Проверьте smb.conf на наличие ошибок с помощью testparm(1).
  • Проверьте корректность прав доступа в /var/cache/samba/ и перезапустите smb.service:
# chmod 0755 /var/cache/samba/msg

Проблемы с разрешениями на SELinux

SELinux по умолчанию не позволяет samba получать доступ к домашним каталогам пользователей. Чтобы решить эту проблему, выполните команду:

# setsebool -P samba_enable_home_dirs 1

Аналогично, samba_export_all_ro и samba_export_all_rw дадут доступ к чтению и записи всех файлов.

Проблемы с разрешениями на AppArmor

Если используется путь к ресурсу, расположенному вне домашнего каталога или каталога usershares, внесите его в белый список в /etc/apparmor.d/local/usr.sbin.smbd. Например:

/etc/apparmor.d/local/usr.sbin.smbd
"/data/" rk,
"/data/**" lrwk,

No dialect specified on mount

Клиент использует неподдерживаемую версию SMB/CIFS, которую сервер не принимает.

Смотрите #Ограничение версии протокола для повышения безопасности.

Клиенты Windows продолжают запрашивать пароль, даже если общие ресурсы Samba созданы с правами гостя

Установите опцию map to guest в секции global в файле /etc/samba/smb.conf:

map to guest = Bad User

С версии Samba 4.10.10 используйте Bad Password вместо Bad User.

Проблемы подключения к Windows 7 — mount error(12): cannot allocate memory

Известная ошибка Windows 7 «mount error(12): cannot allocate memory» может быть исправлена установкой пары ключей в реестре системы Windows:

  • HKLMSYSTEMCurrentControlSetControlSession ManagerMemory ManagementLargeSystemCache (установить значение 1)
  • HKLMSYSTEMCurrentControlSetServicesLanmanServerParametersSize (установить значение 3)

В качестве альтернативы можно запустить командную строку от имени Администратора и выполнить следующее:

reg add "HKLMSYSTEMCurrentControlSetControlSession ManagerMemory Management" /v "LargeSystemCache" /t REG_DWORD /d 1 /f
reg add "HKLMSYSTEMCurrentControlSetServicesLanmanServerParameters" /v "Size" /t REG_DWORD /d 3 /f

Выполните одно из следующих действий, чтобы изменения вступили в силу:

  • Перезагрузите Windows
  • Перезапустите службу на сервере через services.msc
  • Выполните в командной строке net stop lanmanserver и net start lanmanserver; после остановки служба может перезапуститься автоматически

Примечание: Поиск решения в интернете подскажет другое решение, рекомендующее пользователям добавить ключ, изменяющий размер «IRPStackSize». Это неправильное решение для устранения проблемы в Windows 7. Не применяйте его.

Исходная статья.

Проблемы подключения к Windows 10 1709 и новее — «Windows cannot access» 0x80004005

Эта ошибка затрагивает некоторые машины под управлением Windows 10 версии 1709 и более поздних версий. Она не связана с отключением SMB1 в этой версии, а связана с тем, что Microsoft отключила небезопасный вход для гостей в этой версии для некоторых.

Чтобы исправить ситуацию, откройте редактор групповой политики (gpedit.msc). Перейдите к настройке Конфигурация компьютераАдминистративные шаблоныСетьРабочая станция Lanman > Включить небезопасные гостевые входы и включите её. В качестве альтернативы измените следующее значение в реестре:

[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesLanmanWorkstationParameters]
"AllowInsecureGuestAuth"=dword:1

Ошибка: Failed to retrieve printer list: NT_STATUS_UNSUCCESSFUL

Если вы являетесь домашним пользователем, используете samba исключительно для организации общего доступа к файлам с сервера или NAS и не заинтересованы в организации общего доступа к принтерам, вы можете исправить эту ошибку, добавив следующие строки в файл /etc/samba/smb.conf:

/etc/samba/smb.conf
[global]
  load printers = No
  printing = bsd
  printcap name = /dev/null
  disable spoolss = Yes

Перезапустите службу smb.service и проверьте журнал:

# cat /var/log/samba/smbd.log

и больше ошибка не должна появляться.

Не удается предоставить общий доступ к папке

Проблема проявляется в том, что, когда вы пытаетесь предоставить общий доступ к папке через Dolphin (файловый менеджер), и вначале, вроде бы, все работает нормально, после перезапуска Dolphin иконка ресурса исчезла из папки, а в терминале (Konsole) вы видите следующий вывод:

‘net usershare’ returned error 255: net usershare: usershares are currently disabled

Для решения проблемы включите пользовательские общие ресурсы, как это описано в разделе #Создание ресурсов общего доступа от имени обычного пользователя.

И вы используете межсетевой экран (iptables), поскольку не доверяете вашей локальной (школа, университет, отель) сети. Это может происходить по следующей причине: когда smbclient просматривает локальную сеть, он посылает широковещательный запрос на udp-порт 137. Затем серверы сети отвечают вашему клиенту, но, поскольку исходный адрес ответа отличается от адреса назначения, который видел iptables при отправке запроса, iptables не признает ответ как «установленное соединение» («ESTABLISHED») или «относящийся к запросу» («RELATED»), и, следовательно, пакет отбрасывается. Возможное решение — добавление:

iptables -t raw -A OUTPUT -p udp -m udp --dport 137 -j CT --helper netbios-ns

в вашу конфигурацию iptables.

Для Uncomplicated Firewall добавьте nf_conntrack_netbios_ns в конце следующей строки в /etc/default/ufw:

IPT_MODULES="nf_conntrack_ftp nf_nat_ftp nf_conntrack_irc nf_nat_irc"

и затем выполните следующие команды от имени root:

echo 1 > /proc/sys/net/netfilter/nf_conntrack_helper
ufw allow CIFS
ufw reload

Чтобы сделать изменения постоянными, добавьте следующую строку в конце файла /etc/ufw/sysctl.conf:

net.netfilter.nf_conntrack_helper=1

protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE

Вероятно, клиент не имеет доступа к общим ресурсам. Удостоверьтесь, что IP-адрес клиента прописан в строке hosts allow = файла /etc/samba/smb.conf.

Также проблема может быть в том, что клиент использует недопустимую версию протокола. Для проверки попробуйте подключиться с помощью smbclient, вручную указав максимальную версию протокола:

$ smbclient -U <пользователь> -L //<сервер> -m <версия протокола, например SMB2> -W <домен>

Если команда выполнится успешно, создайте файл конфигрурации:

~/.smb/smb.conf
[global]
  workgroup = <домен>
  client max protocol = SMB2

Подключение к серверу завершилось неудачей: (Error NT_STATUS_UNSUCCESSFUL)

Вероятно, вы указываете smbclient неправильное имя сервера. Чтобы узнать его, запустите на сервере команду hostnamectl и найдите строку «Transient hostname».

Подключение к серверу завершилось неудачей: (Error NT_STATUS_CONNECTION_REFUSED)

Убедитесь, что сервер запущен.

Protocol negotiation failed: NT_STATUS_CONNECTION_RESET

Вероятно, на сервере запрещён SMB1. Добавьте опцию client max protocol = SMB2 в /etc/samba/smb.conf.
Или просто добавьте -m SMB2 к команде smbclient.

Правильный пароль не подходит (ошибка 1326)

В Samba 4.5 аутентификация NTLMv1 по умолчанию отключена. Рекомендуется установить последние доступные обновления на клиентах и запретить доступ для неподдерживаемых клиентов.

Если вам всё ещё нужна поддержка очень старых клиентов без поддержки NTLMv2 (например, Windows XP), можно включить NTLMv1, однако это не рекомендуется по соображениям безопасности:

/etc/samba/smb.conf
[global]
  lanman auth = yes
  ntlm auth = yes

Если клиенты NTLMv2 не могут пройти аутентификацию при включенном NTLMv1, создайте на клиенте следующий файл:

/home/user/.smb/smb.conf
[global]
  sec = ntlmv2
  client ntlmv2 auth = yes

Это изменение также влияет на общие ресурсы samba, смонтированные с помощью mount.cifs. Если после обновления до Samba 4.5 монтирование не удаётся, добавьте опцию sec=ntlmssp к команде монтирования, например:

mount.cifs //server/share /mnt/point -o sec=ntlmssp,...

Смотрите mount.cifs(8): ntlmssp — Использовать хэширование паролей NTLMv2, заключённое в Raw NTLMSSP сообщении. По умолчанию в основных версиях ядра до версии 3.8 было sec=ntlm. В версии 3.8 значение по умолчанию было изменено на sec=ntlmssp.

Сопоставление зарезервированных символов Windows

Начиная с ядра 3.18, модуль cifs по умолчанию использует опцию «mapposix». При монтировании ресурса с использованием расширений unix и конфигурации Samba по умолчанию, файлы и каталоги, содержащие один из семи зарезервированных символов Windows : * < > ? , отображаются, но доступ к ним невозможен.

Возможные решения:

  • Использовать недокументированную опцию монтирования nomapposix для cifs
# mount.cifs //server/share /mnt/point -o nomapposix
  • Настроить Samba для переадресации символов стиля mapposix («SFM», Services for Mac) на правильные родные символы с помощью fruit
/etc/samba/smb.conf
[global]
  vfs objects = catia fruit
  fruit:encoding = native
  • Написать своё сопоставление запрещённых символов с помощью catia
/etc/samba/smb.conf
[global]
  vfs objects = catia
  catia:mappings = 0x22:0xf022, 0x2a:0xf02a, 0x2f:0xf02f, 0x3a:0xf03a, 0x3c:0xf03c, 0x3e:0xf03e, 0x3f:0xf03f, 0x5c:0xf05c, 0x7c:0xf07c, 0x20:0xf020

Последний подход (использование catia или fruit) имеет недостаток, заключающийся в фильтрации файлов с непечатаемыми символами.

Папка, к которой открыт доступ через графический интерфейс, недоступна для гостей

Этот раздел предполагает, что:

  1. Общие папки настроены, как описано в разделе #Создание ресурсов общего доступа от имени обычного пользователя
  2. Общая папка создана через графический интерфейс и не пользователем root
  3. Включен гостевой доступ для папки
  4. Служба Samba перезапускалась с момента последнего изменения файла /etc/samba/smb.conf

В качестве примера далее используются следующие значения:

  • Общая папка находится внутри домашнего каталога пользователя (/home/yourUser/Shared)
  • Имя общей папки — MySharedFiles
  • Гостевой доступ открыт только для чтения.
  • Пользователи Windows будут иметь доступ к содержимому общей папки без аутентификации

Проверьте правильность конфигурации samba

Выполните следующую команду из терминала, чтобы проверить правильность настроек:

$ testparm

Проверьте правильность создания общей папки

Выполните следующие команды из терминала:

$ cd /var/lib/samba/usershare
$ ls

Если всё хорошо, должен быть файл с именем mysharedfiles

Посмотрите его содержимое:

$ cat mysharedfiles

Содержимое файла должно быть примерно таким:

/var/lib/samba/usershare/mysharedfiles
path=/home/yourUser/Shared
comment=
usershare_acl=S-1-1-0:r
guest_ok=y
sharename=MySharedFiles

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

Выполните следующую команду из терминала. Если будет запрошен пароль, просто нажмите Enter:

$ smbclient -L localhost

Если всё хорошо, в столбце Sharename должен присутствовать MySharedFiles.

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

$ smbclient -N //localhost/MySharedFiles

Если всё хорошо, должно появиться приглашение samba-клиента:

smb: >

Проверьте, что гость может посмотреть содержимое папки:

smb: > ls

Если появится ошибка NTFS_STATUS_ACCESS_DENIED, то проблема скорее всего связана с правами доступа к каталогам Unix. Убедитесь, что пользователь samba имеет доступ к нужной папке и всем родительским папкам. Это можно проверить, войдя в учётную запись нужного пользователя (например, с помощью sudo) и попытавшись перейти в нужный каталог.

Mount error: Host is down

Такая ошибка может появиться при монтировании общих ресурсов Synology NAS. Для решения проблемы используйте опцию vers=1.0.

Примечание: SMB1 имеет уязвимости в безопасности и уже использовался в успешных атаках вымогательского ПО.

Software caused connection abort

Файловые менеджеры, использующие gvfs-smb, могут выдавать ошибку Software caused connection abort при записи файла на общий ресурс/сервер. Это может быть связано с тем, что на сервере используется SMB/CIFS версии 1, которую многие маршрутизаторы используют для организации общего доступа к USB-накопителям (например, маршрутизаторы Belkin). Для записи на эти общие ресурсы укажите версию CIFS с помощью опции vers=1.0. Например:

/etc/fstab
//СЕРВЕР/имя_ресурса /mnt/точка_монтирования cifs _netdev,guest,file_mode=0777,dir_mode=0777,vers=1.0 0 0

Это также может произойти после обновления Samba до версии 4.11, в которой SMB1 отключен по умолчанию. Его можно включить с помощью следующей опции:

/etc/samba/smb.conf
[global]
client min protocol = CORE

Ошибка аутентификации

Убедитесь в отсутствии пробелов перед именем пользователя в настройках Samba:

~/.samba
username= user
password=pass

Правильно так:

~/.samba
username=user
password=pass

Windows 1709 и новее не видит сервер samba при просмотре сети

В Windows 10 версии 1511 поддержка SMBv1 и, соответственно, обнаружение устройств NetBIOS были отключены по умолчанию. Более новые версии Windows, начиная с версии 1709 («Fall Creators Update»), больше не позволяют установить клиент SMBv1. Это приводит к тому, что хосты с Samba не отображаются в просмотре сети в Проводнике. Хотя проблем с подключением нет и Samba будет работать нормально, пользователи могут захотеть, чтобы их хосты Samba всё-таки отображались. wsddAUR реализует демон Web Service Discovery. Благодаря ему (Samba) хосты, такие как NAS, могут быть обнаружены клиентами Web Service Discovery, такими как Windows. Настройки по умолчанию должны работать для большинства установок, и всё, что вам нужно сделать, это запустить и включить службу wsdd.service.

Настройки по умолчанию (представлять себя, используя имя хоста машины и рабочую группу «WORKGROUP») должна подходить в большинстве случаев. Если нужно, вы можете изменить настройки, передав wsdd дополнительные аргументы, добавив их в /etc/conf.d/wsdd (подробности есть в руководстве wsdd).

wsdd2AUR делает то же самое, но написан на C, а не на Python. По умолчанию он берёт параметры netbios name и workgroup из файла smb.conf.

Файлы из IOS больше не могут копироваться в общий ресурс Samba в Arch Linux, начиная с IOS 14.5

Начиная с IOS 14.5 при попытке передачи данных с устройства под управлением IOS с помощью приложения «Файлы» на общий ресурс samba в Arch Linux возникает ошибка:

The operation couldn't be completed
Operation canceled

Чтобы исправить эту проблему, добавьте следующее в секцию [global] файла smb.conf и перезапустите службу smb.service: [1]

## addition for IOS Files transfer-to server
vfs object = fruit streams_xattr

Смотрите также

  • Samba: An Introduction
  • Официальный сайт Samba
  • Samba 3.2.x HOWTO and Reference Guide (устаревшая, но всё ещё самая подробная документация)
  • Википедия
  • Gentoo:Samba/Guide
  • Debian:Samba/ServerSimple
  • KSMBD — Сервер ядра linux, реализующий протокол SMB3 в пространстве ядра для обмена файлами по сети.
  • Ускорение работы Samba[устаревшая ссылка 2022-09-23 ⓘ]

Contents

  1. Client Access — Browsing SMB shares

    1. Ubuntu Clients
    2. Windows Clients (XP,Server,Vista, Win7)
  2. Samba Client — Manual Configuration

    1. Connecting using CIFS
    2. Connecting using SMBFS (deprecated)

The samba package is a meta-package intended to be installed on file and printer sharing servers. Clients do not need this meta-package (you are acting as a client if you need to access files on another computer). For example, installing samba is not necessary if you only need your Ubuntu system to do any of the following:

  • Access shared folders, drives and printers on a Windows computer (that is, act as a client with Windows servers). To do this, you only need the smbfs plugin. See MountWindowsSharesPermanently for more information.

  • Have your Windows computer use (via a network) a printer that is attached to a Linux computer. CUPS can be configured to make the printer accessible to the network.
  • Share directories between two Linux computers. You can use NFS or setup an SSH server on one computer and access it from other computers using an scp or sftp client, or Places -> Connect to Server… and choose «SSH» as the service type.

Ubuntu Clients

Ubuntu and Gnome make it easy to access files on a Windows network share. Open the Places Menu, then click on Network. You will see a Windows network icon. Double-click to open it. The next window shows all the domains/workgroups found on your network. Inside each domain/workgroup you will see all the computers on the domain/workgroup with sharing enabled. Double-click on a computer icon to access its shares and files.

  • If you want to be able to share folders with nautilus (the file browser), install the nautilus-share package (installed by default in Ubuntu 9.10 Desktop edition):

sudo apt-get install nautilus-share

Alternate: From the menu at the top select «Location» -> «Connect to a server». In the «Service type» pull down select «Windows share». Enter the server ip address in the «Server:» box and the share name in the «Share:» box. Click «Connect» and then «Connect» again on the second dialog box

Alternate 12.04: Double clicking on ‘Windows network’ did not work for me. So I went to ‘Go’ menu in the nautilus file browser and clicked ‘Location’. I got an address bar at the top of the window. I entered «smb://192.168.2.148» (substitute the IP address of your Samba server) — I was presented with user/password window — After typing in user/passwd I was able to see the samba shares on the server and browse the files/folders.

Note: The default installation of Samba does not synchronize passwords. You may have to run «smbpasswd» for each user that needs to have access to his Ubuntu home directory from Microsoft Windows.

Windows Clients (XP,Server,Vista, Win7)

Microsoft Windows clients connect and browse through their corresponding network interface.

Example: XP clients can open Windows Network Neighborhood or My Network Places to browse available SMB shares.

Samba Client — Manual Configuration

This section covers how to manually configure and connect to a SMB file server from an Ubuntu client. smbclient is a command line tool similar to a ftp connection while smbfs allows you to mount a SMB file share. Once a SMB share is mounted it acts similar to a local hard drive (you can access the SMB share with your file browser (nautilus, konqueror, thunar, other).

Connecting to a Samba File Server from the command line

Connecting from the command line is similar to a ftp connection.

List public SMB shares with

smbclient -L //server -U user

Connect to a SMB share with

smbclient //server/share -U user

Enter you user password.

You can connect directly with

smbclient //server/share -U user%password

but your password will show on the screen (less secure).

Once connected you will get a prompt that looks like this :

smb: >

Type «help» , without quotes, at the prompt for a list of available commands.

Connecting using CIFS

CIFS is included in the smbfs package and is a replacement for smbfs (I know, the terminology here is a little confusing).

Reference : http://linux-cifs.samba.org/

As above, install by any method, smbfs, on Ubuntu 12.10, smbfs has been replaced by cifs-utils.

Allow non-root users to mount SMB shares

By default only root may mount SMB shares on the command line. To allow non-root users to mount SMB shares you could set the SUID, but I advise you configure sudo. You should configure sudo with visudo

You may either allow the group «users» to mount SMB shares, or add a group, samba, and add users you wish to allow to mount SMB shares to the samba group.

sudo groupadd samba
sudo adduser user samba

Change «user» to the username you wish to add to the samba group.

sudo visudo

In the «group» section add your group you wish to allow to mount SMB shares

Add a line  in the "group" section :
## Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
%samba   ALL=(ALL) /bin/mount,/bin/umount,/sbin/mount.cifs,/sbin/umount.cifs

Change «%samba» to «%users» if you wish to allow members of the users group to mount SMB shares.

The following will mount the myshare folder on myserver to ~/mnt (it will be in your home directory):

mkdir ~/mnt
sudo mount -t cifs //myserver_ip_address/myshare ~/mnt -o username=samb_user,noexec

Note: «samba_user» = the user name on the samba server (may be different from your log-in name on the client).

The «noexec» option prevents executable scripts running from the SMB share.

You will be asked for BOTH your sudo and then your samba_user password.

To umount,

sudo umount ~/mnt

Automagically mount SMB shares

In order to have a share mounted automatically every time you reboot, you need to do the following:

With any editor, create a file containing your Windows/Samba user account details:

gksu gedit /etc/samba/user

KDE users must use kdesu rather than gksu and instead of Gedit they can use Kwrite as editor.

… it should contain two lines as follows:

username=samba_user
password=samba_user_password

Note: «samba_user» = the user name on the samba server (may be different from your log-in name on the client). «samba_user_password» is the password you assigned to the samba_user on the samba server.

Save the file and exit gedit.

Change the permissions on the file for security:

sudo chmod 0400 /etc/samba/user # permissions of 0400 = read only

Now create a directory where you want to mount your share (e.g. /media/samba_share):

sudo mkdir /media/samba_share

Now, using any editor, and add a line to /etc/fstab for your SMB share as follows:

sudo cp /etc/fstab /etc/fstab.bak
gksu gedit /etc/fstab

Add a line for your SMB share:

//myserver_ip_address/myshare  /media/samba_share  cifs  credentials=/etc/samba/user,noexec  0 0

The share will mount automatically when you boot. The «noexec» option prevents executable scripts running from the SMB share.

To mount the share now, without rebooting,

sudo mount /media/samba_share

You can unmount the share with :

sudo umount /media/samba_share

If you wish to increase security at the expense of convenience, use this line in /etc/fstab

//myserver_ip_address/myshare  /media/samba_share  cifs  noauto,credentials=/etc/samba/user,noexec  0 0

The noexec» option prevents executable scripts running from the SMB share.

Edit /etc/samba/user, remove the password (leave just the samba user).

Now the share will NOT automatically mount when you boot and you will be asked for your samba password.

Mount the share with :

sudo mount /media/samba_share

CIFS may cause a shutdown error.

CIFS VFS: Server not responding.

There is a fix in the troubleshooting section of this forum post.

Back to top

Connecting using SMBFS (deprecated)

Note: This method still works, but as outlined under the «CIFS» section above is «deprecated» (no longer maintained and pending removal from the kernel).

Mounting a share on the local filesystem allows you to work around programs that do not yet use GnomeVFS to browse remote shares transparently. To mount a SMB share, first install smbfs:

sudo apt-get update
sudo apt-get install smbfs

To allow non root accounts to mount shares, change the permissions on the smbmnt program thus:

sudo chmod u+s /usr/bin/smbmnt /usr/bin/smbumount

Note: This may be a security risk as after setting the SUID bit anyone can mount a SMB share. I advise you configure sudo, as above.

The working line in /etc/sudoers is as follows (see CIFS section above):

%samba   ALL=(ALL) /bin/mount,/bin/umount,/sbin/mount.cifs,/sbin/umount.cifs,/usr/bin/smbmount,/usr/bin/smbumount

This allows any user in the samba group to mount SMB shares (you will need to create a samba group and add users).

The following will mount the myshare folder on myserver to ~/mnt (it will be in your home directory):


mkdir ~/mnt
smbmount //myserver/myshare ~/mnt

To umount,

smbumount ~/mnt

In order to have a share mounted automatically every time you reboot, you need to do the following:

Open a shell as root

sudo -s

Create a file containing your Windows/Samba user account details:

vi /etc/samba/user

…it should contain two lines as follows:

username=george
password=secret

Change the permissions on the file for security:

chmod 0600 /etc/samba/user

Now create a directory where you want to mount your share (e.g. /mnt/data):

mkdir /mnt/data

Now edit the file system table (/etc/fstab) and add a line as follows:

//server/share   /mnt/data   smbfs   credentials=/etc/samba/user,rw,uid=bob   0   0

…where ‘bob’ is the non-root user you log into ubuntu with, ‘server’ is the name or address of the Windows machine and ‘share’ is the name of the share.

To mount the share now, just use the following command as root. It will mount automatically on subsequent reboots.

mount /mnt/data

to be continued…

Ubuntu Client

On the Ubuntu client using the menu at the top, go to «Places» -> «Network». You will see an icon «Windows network» and should be able to browse to your shared folder. You will be asked for a password, leave it blank. Click the «Connect button.

(no need for a password).

If you would like to mount your SMB share using your (server) hostname rather than the IP Address, edit /etc/hosts and add your samba server (syntax IP Address hostname).

192.168.1.100    hostname

Where «hostname» = the name of your samba server.

Windows Client

On Windows open «My Computer» and navigate to «My Network Places». Navigate to your Ubuntu server and your share will be available without a password.

Alternate : From the menu at the top select «Tools» -> «Map Network Drive». Select an available letter for your SMB share (Default is z: ). In the «Folder:» box enter \samba_server_ipaddressshare. Tic (Select with the mouse) the option «Reconnect at login» if you want the share to be automatically mounted when you boot Windows. Click the «Finish» box. A dialog box will appear, enter your samba user name and password. Click «OK».

If you would like to mount your SMB share using your (server) hostname rather than the IP Address, edit C:WINDOWSsystem32driversetchosts and add your samba server (syntax IP Address hostname).

192.168.1.100    hostname

Where «hostname» = the name of your samba server.

Пожалуй нет ни одного офиса, в котором не применялись бы общие ресурсы локальной сети, будь то папки или принтеры. Крупные и средние компании используют возможности Active Directory, компании поменьше — используют штатные средства ОС Windows или Samba, но на серверах под управлением ОС Linux. Рассмотрим все случаи.

Как настроить Samba?

  • Что такое Samba?
  • Как настроить общую папку
  • Как настроить общую папку в Linux
  • Как настроить общую папку в Windows
  • Как подключиться к общей папке
  • Как подключиться к общей папке Linux
  • Как подключиться к общей папке Windows
  • Как создать общий сетевой ресурс в Samba

Что такое Samba?

Samba — серверное приложение, реализующее доступ клиентских терминалов к папкам, принтерам и дискам про протоколу SMB/CIFS.

Описание структуры Samba

Настройка общих папок

Linux

Установка и настройка Samba-сервер для Ubuntu выполняется следующими этапами.

Обновляем информацию о репозиториях и устанавливаем обновления для существующих пакетов в системе:

apt-get update && apt-get upgrade

Устанавливаем пакет Samba:

apt-get install -y samba samba-client

Создадим резервную копию файла конфигурации:

cp /etc/samba/smb.conf /etc/samba/smb.conf_sample

Создадим директории для файлов, например в каталоге /media:

mkdir /media/samba

Важно! По умолчанию, директория /media располагается в корне системы /, для нее редко создается свой раздел. По этой причине возможно переполнение корневого раздела. Во избежание этой неприятной ситуации, рекомендуем монтировать отдельный жесткий диск в /media/samba.

Создаем каталог для всех пользователей:

mkdir /media/samba/public

Изменим права доступа к каталогу:

chmod -R 0755 /media/samba/public

Также следует воспользоваться командой chown для смены владельца и/или группы.

Создаем директорию для ограниченного круга лиц:

mkdir /media/samba/private

С помощью системных инструментов создадим группу пользователей:

groupadd smbgrp

Добавляем пользователей Samba:

useradd user1

Созданных пользователей добавляем в группу:

usermod -aG smbgrp user1

Изменим группу, которой принадлежит приватная директория:

chgrp smbgrp /media/samba/private

С помощью инструментов Samba создадим пароль для добавленного пользователя:

smbpasswd -a user1

С помощью текстового редактора, например, nano, редактируем конфигурационный файл samba:

nano /etc/samba/smb.conf

Удаляем все строки из файла. Вставляем следующие:

[global]
workgroup = WORKGROUP
security = user
map to guest = bad user
wins support = no
dns proxy = no
[public]
path = /media/samba/public
guest ok = yes
force user = nobody
browsable = yes
writable = yes
[private]
path = /media/samba/private
valid users = @smbgrp
guest ok = no
browsable = yes
writable = yes

Сохраняем используя сочетание Ctrl + X, затем нажимаем Y и Enter.

Объясним значения строк. конфигурационный файл состоит из трех секций:

global — данная секция отвечает за общие настройки Samba-сервера;

public и private — секции описания настроек директорий общего доступа.

В секции global присутствуют пять параметров:

  • workgroup — рабочая группа. Для упрощения работы пользователей WORKGROUP указывается, как группа по умолчанию. Если в вашей сети имя рабочей группы изменено, то следует изменить это значение и для Samba;
  • security — уровень безопасности сервера. Значение user означает авторизацию по паре логин/пароль;
  • map to guest — параметр определяет способ обработки запросов. Значение bad user означает, что запросы с неправильным паролем будут отклонены, даже если такое имя пользователя существует;
  • wins support — включить или выключить поддержку WINS;
  • dns proxy — возможность проксирования запросов к DNS.

Настройки директорий выполняются в соответствующих секциях:

path — полный путь до директории на жестком диске;

guest ok — возможность доступа к каталогу без пароля (гостевой);

browsable — показывать ли каталог (“шару”) на сервере среди прочих. Если параметр установлен как “no”, то доступ будет возможен по полному пути, например ip-addresshidden_directory;

force user — пользователь от которого ведется работа с каталогом. Для повышения безопасности сервера, обычно используют nobody. Главное, не использовать пользователя root — это небезопасно.

writable — установка значения как “yes” позволяет пользователю выполнять действия над файлами внутри каталога — переименование, добавление, удаление, перемещение в подкаталог и копирование;

valid users — список пользователей у которых есть доступ к каталогу. Если пользователей несколько, их имена указываются через запятую. Если необходим доступ для пользователей принадлежащих группе, перед именем группы устанавливается символ ”at” @ (“собака”).

Важно! Имя директории общего доступа, отображаемое пользователям, равно имени секции в которой оно описано.

Проверяем настройки с помощью команды:

testparm -s

Перезапускаем сервер:

service smbd restart

service nmbd restart

Настроим межсетевой экран. Для этого в правилах откроем TCP-порты 139 и 445, а также UDP-порты 137 и 138, но только для тех подсетей, которым доверяете. Для указания собственного диапазона адресов, замените значение после ключа “-s”:

iptables -A INPUT -p tcp -m tcp --dport 445 -s 10.0.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 139 -s 10.0.0.0/24 -j ACCEPT

iptables -A INPUT -p udp -m udp --dport 137 -s 10.0.0.0/24 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 138 -s 10.0.0.0/24 -j ACCEPT

Для сохранения правил и применения их после перезагрузки сервера следует воспользоваться пакетом iptables-persistent. Установим его:

apt-get install iptables-persistent

Входе установки пакета, программа предложит запомнить существующие правила iptables. Подтверждаем это действие.

Для проверки существующих правил используем:

iptables -L

Windows

По аналогии с Linux, настроим общий доступ к папкам public и private, но в ОС Windows.

Для создания общего доступа к каталогу без парольной защиты, необходимо настроить ограничения защиты в панели управления. Для этого открываем:

Панель управления → Сеть → Центр управления сетями и общим доступом → Расширенные настройки общего доступа.

В обновленном окне открываем раздел “Все сети” и ищем секцию “Общий доступ с парольной защитой”. Устанавливаем параметр в положение “Отключить общий доступ с парольной защитой”. Для сохранения значений параметра кликаем по кнопке “Сохранить изменения”.

Отключаем общий доступ с парольной защитой

Теперь откроем доступ к самому каталогу. Кликаем по папке правой кнопкой мыши, в контекстном меню выбираем “Свойства”. Открываем вкладку “Доступ” и кликаем по “Расширенная настройка”.

Выбираем расширенную настройку

В открывшемся окне расширенных настроек общего доступа отмечаем галочкой “Открыть общий доступ к этой папке”, в поле “Имя общего ресурса” указываем название, которое будет отображено пользователям. Кликаем по кнопке “Разрешения”.

В открывшемся окне, в группах пользователей выбираем “Все”, а в разрешениях для группы, устанавливаем галку “Полный доступ”. Нажимаем “OK” в этом и остальных окнах.

Выбираем саму группу и разрешения для группы

В окне свойств папки public кликаем по кнопке “Общий доступ”.

В открывшемся окне добавляем пользователя “Все”, а также делегируем права на “Чтение и запись”. Кликаем по кнопке “Поделиться”.

Выбираем права и делимся ими с пользователями

В обновленном окне нажимаем “Готово”.

Нажимаем готово

Настроим папку общего доступа, но для ограниченного круга лиц.

Кликаем правой кнопкой мыши по папке, выбираем “Свойства”.

В открывшемся окне переходим на вкладку “Доступ”. Кликаем по кнопке “Расширенные настройки”.

В новом открывшемся окне, устанавливаем галку “Открыть общий доступ к этой папке”. Затем кликаем по кнопке “Разрешения”.

Открываем общий доступ к этой папке

В открывшемся окне, в поле “Группы или пользователи” выбираем “Все” и нажимаем кнопку “Удалить”.

Удаляем пользователя

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

Окно обновится. Кликаем по кнопке “Добавить”.

В открывшемся окне кликаем по кнопке “Дополнительно”.

Выбираем дополнительные параметры

Окно изменится в размере. Кликаем по кнопке “Поиск”. Двойным кликом выбираем пользователя, которому необходим доступ к этому каталогу, например, buhgalter.

Добавляем пользователя которому нужен доступ к этому каталогу

В открывшемся окне, при желании, можем добавить еще одного пользователя через “Дополнительно” — “Поиск”. Аналогичным образом можно добавить группу пользователей, например, “Администраторы”, при этом следует понимать, что доступ будет предоставлен всем пользователям из этой группы.

При желании добовляем еще одного пользователя

Установим права доступа для пользователя “buhgalter”. Если требуется полный доступ к директории, устанавливаем галку в соответствующем месте.

Пример установки прав для группы пользователей

Нажимая кнопки “OK” возвращаемся к окну свойств папки, в котором кликаем по кнопке “Общий доступ”.

Возвращаемся обратно и выбираем общий доступ

В данном окне необходимо найти и добавить пользователя “бухгалтер”.

Ищем нашего пользователя и добавляем его

В окне выбора пользователей и групп кликаем по кнопке “Дополнительно”.

Выбираем дополнительные параметры

Окно снова изменит свои размеры. Кликаем по кнопке “Поиск”. В найденном ниже списке пользователей и групп выбираем искомого пользователя. Выбираем его двойным кликом.

Выбираем пользователей

В оставшемся окне проверяем правильно ли указан пользователи и нажимаем кнопку “OK”.

Проверяем выбранного пользователя

Устанавливаем требуемый уровень разрешений для пользователя и кликаем по кнопке “Поделиться”.

Добавляем права и делимся ими

Кликаем по кнопке “Готово”.

Теперь папка общего доступа доступна

Подключение к общим папкам

Из Linux

Для подключения к общим папкам из среды Linux требуется установка отдельного программного обеспечения — smbclient. Установим:

sudo apt-get install smbclient

Для подключения к серверу используется следующий формат комангды:

smbclient -U <Имя_пользователя> <IP-адрес><Имя_каталога_на_сервере>

Пример:

smbclient -U buhgalter 10.0.0.1public

Для того, Чтобы не вводить эту команду каждый раз, можно настроить монтирование общей директории как сетевого диска. Для этого установим пакет cifs-utils:

sudo apt-get install cifs-utils

Монтирование выполняется по следующему шаблону:

mount -t cifs -o username=<Имя_пользователя>,password= //<IP-адрес>/<Общий каталог> <Точка монтирования>

Пример:

mount -t cifs -o username=Everyone,password= //10.0.0.1/public /media

Важно! Если требуется подключение к общим папкам расположенным на Windows-сервере, то в для не защищенных паролем директорий, в качестве имени пользователя, следует использовать “Everyone”. Для подключения к Linux-серверу рекомендуем использовать в качестве имени пользователя “nobody”. В случае доступа к защищенным директориям следует использовать те учетные данные, которые вы указали.

Из Windows

Подключение к удаленным папкам из среды Windows выполняется немного иначе. Для этого в проводнике или окне запуска программ (Windows + R), следует использовать следующий шаблон:

<IP-адрес><имя_папки>

Указав просто IP-адрес сервера вы получите список общих папок.

Список общих папок

При подключении к Windows-сервер, система безопасности может потребовать ввод учетных данных. Для подключения к общей открытой папке используем Everyone, а поле пароля оставляем пустым.

Для подключения к общей папке выбираем Everyone и пустое поле для пароля

При подключении к Linux-серверу из ОС Windows, следует использовать указанный ранее шаблон:

<IP-адрес><имя_папки>

или просто адрес сервера:

<IP-адрес>

Как создать общий сетевой ресурс в Samba

Создайте директорию, которую в хотите сделать общей:

mkdir /home/<user_name>/<folder_name></folder_name></user_name>

Создайте бэкап, если что-то пойдет не так:

sudo cp /etc/samba/smb.conf ~

Отредактируйте файл «/etc/samba/smb.conf»:

sudo nano /etc/samba/smb.conf

Добавьте следующее содержимое в файл:

[<folder_name>]
path = /home/<user_name>/<folder_name>
valid users = <user_name>
read only = no</user_name></folder_name></user_name></folder_name>

Заполните файл своими данными, сохраните его и затем закройте

Перезапустим Samba:
sudo service smbd restart

Использую данную команду проверьте вашу директорию smb.conf на ошибки:

testparm

Чтобы получить доступ к вашему общему сетевому ресурсу:

sudo apt-get install smbclient
# Просмотр всех общих ресурсов:
smbclient -L //<host_ip_or_name>/<folder_name> -U <user>
# Подключение:
smbclient //<host_ip_or_name>/<folder_name> -U <user></user></folder_name></host_ip_or_name></user></folder_name></host_ip_or_name>

Note 1: Чтобы подключиться к вашему общему сетевому ресурсу используйте имя вашего пользователя () и пароль, который находится «smb:////»
Учтите, что «» значение передается в «[]»,
другими словами, имя общего ресурса, которое вы ввели в «/etc/samba/smb.conf».
Note 2: Группа пользователей samba по умолчанию это — «WORKGROUP».

This Samba guide is designed to help the reader move a network from many different clients speaking different languages, to many different machines that speak a common language. The ultimate goal is to help differing architectures and technologies, come together in a productive, happy coexisting environment.

Following the directions outlined in this article should provide an excellent step towards a peaceful cohabitation between Windows operating systems and virtually all known variations of *nix.

Introduction

Purpose

This article originally started as a FAQ, morphed into a HOWTO document, then was converted into a wiki article. The original intent was to explore the functionality and power of Gentoo, Portage, and the flexibility of USE flags. Like so many other projects, it was quickly discovered what was missing in the Gentoo realm: there were not any Samba guides catered for Gentoo users. Gentoo users are more demanding than most; they require performance, flexibility, and customization. This does not however imply that this article was not intended for other distributions; rather that it was designed to work with a highly customized version of Samba.

This article provides a details guide showing users how to share files and printers between Windows and *nix PCs. It will cover how to mount and manipulate shares.

In addition to shares few other topics will be mentioned, but they are out of the scope of this article. These will be noted as they are presented.

This article is based on a compilation and merge of an excellent HOWTO provided in the Gentoo forums by Andreas «daff» Ntaflos and the collected knowledge of Joshua Preston. The link to this discussion is provided below for reference purposes:

  • HOWTO CUPS+Samba: printing from Windows & Linux

Before using this guide

There are a several other guides for setting up CUPS and/or Samba, please read them as well, as they may provide instructions concerning things left out of this article (intentional or otherwise). One such document is the very useful and well written Gentoo Printing Guide, as configuration issues and specific printer setup will not be discussed here.

Requirements

The following software will be needed:

  • net-fs/samba
  • net-print/cups
  • net-print/hplip (if an HP printer will be used)
  • A kernel (2.6 and up)
  • A printer (PS or non-PS)
  • A working network consisting of more than one machine

The main package used here is net-fs/samba, however, a kernel with CIFS support enabled is needed in order to mount a Samba or Windows share from another computer. CUPS will be emerged if it has not been already installed.

Getting acquainted with Samba

The USE flags

Before anything is emerging, take a look at some of the various USE flags available to Samba. Depending on the network topology and the specific requirements of the server, the USE flags outlined below will define what to include or exclude from the emerging of Samba.

USE flags for
net-fs/samba

Samba Suite Version 4

acl Add support for Access Control Lists
addc Enable Active Directory Domain Controller support
ads Enable Active Directory support
ceph Enable support for Ceph distributed filesystem via sys-cluster/ceph
client Enables the client part
cluster Enable support for clustering
cups Add support for CUPS (Common Unix Printing System)
debug Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces
fam Enable FAM (File Alteration Monitor) support
glusterfs Enable support for Glusterfs filesystem via sys-cluster/glusterfs
gpg Use app-crypt/gpgme for AD DC
iprint Enabling iPrint technology by Novell
json Enable json audit support through dev-libs/jansson
ldap Add LDAP support (Lightweight Directory Access Protocol)
llvm-libunwind Use sys-libs/llvm-libunwind instead of sys-libs/libunwind
pam Add support for PAM (Pluggable Authentication Modules) — DANGEROUS to arbitrarily flip
profiling-data Enables support for collecting profiling data
python Add optional support/bindings for the Python language
quota Enables support for user quotas
regedit Enable support for regedit command-line tool
selinux !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur
snapper Enable vfs_snapper module (requires sys-apps/dbus)
spotlight Enable support for spotlight backend
syslog Enable support for syslog
system-heimdal Use app-crypt/heimdal instead of bundled heimdal.
system-mitkrb5 Use app-crypt/mit-krb5 instead of app-crypt/heimdal.
systemd Enable use of systemd-specific libraries and features like socket activation or session tracking
test Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently)
unwind Enable libunwind usage for backtraces
winbind Enables support for the winbind auth daemon
zeroconf Support for DNS Service Discovery (DNS-SD)

Some things worth mentioning about the USE flags and different Samba functions include:

  • ACLs on ext2/3 are implemented through extended attributes (EAs). EA and ACL kernel options for ext2 and/or ext3 will need to be enabled (depending on which file system is being used — both can be enabled).
  • While Active Directory, ACL, and PDC functions are out of the intended scope of this article, the following links may be helpful:
    • http://www.bluelightning.org/linux/samba_acl_howto/
    • http://www.wlug.org.nz/HowtoSamba3AndActiveDirectory
  • Please remove existing «test» USE flags as that would cause problem:
    • https://bugs.gentoo.org/674468

Server software installation

Emerging Samba

To start things correctly, be sure that all hostnames resolve correctly. Either have a working domain name system running on the network or appropriate entries in the /etc/hosts file. Certain things could break if hostnames do not point to the correct machines.

Hopefully an assessment can be made of what will actually be need in order to use Samba with the a particular setup. The setup used for this article is:

  • cups
  • readline
  • pam

To optimize performance, size, and the time of the build, USE flags are specifically included or excluded.

First, add USE flags to make sure that when samba is built, it has proper support:

root #echo "net-fs/samba readline cups pam" >> /etc/portage/package.use

Now install the Samba software:

root #emerge --ask net-fs/samba

This will emerge Samba and CUPS.

HP printers

The following package should be emerged if an HP printer will be used:

root #emerge --ask net-print/hplip

Server configuration

Configuring Samba

The main Samba configuration file is located at /etc/samba/smb.conf and can be modified using a standard text editor. Root permissions must be obtained to open the file. It is divided in sections indicated by [sectionname]. Comments are defined by either # (hash tags) or ; (semicolons). A sample smb.conf file is included below with comments and suggestions for modifications. If more details are required, see the man page for smb.conf (man smb.conf, the installed smb.conf.example, the Samba website, or any of the numerous Samba books available at local libraries or for purchase where ever such books are sold.

FILE /etc/samba/smb.confSamba configuration example

[global]
## # Replace MYWORKGROUPNAME with the appropriate workgroup/domain
workgroup = ## MYWORKGROUPNAME
## # Of course this has no REAL purpose other than letting
# everyone knows it is not Windows!
# %v prints the version of Samba being used.
server string = Samba Server %v
## # CUPS will be used; it should be inserted here
printcap name = cups
printing = cups
load printers = yes
## # This line enables the log file and limits its size to less than 50kb.
log file = /var/log/samba/log.%m
max log size = 50
## # We are going to set some options for our interfaces...
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
## # This is a good idea, what we are doing is binding the
# samba server to our local network.
# For example, if eth0 is the local network interface:
interfaces = lo eth0
bind interfaces only = yes
## # Specifies which IP address range is allowed to access Samba
# (this is for added security since this configuration does
# not use passwords):
hosts allow = 127.0.0.1 192.168.1.0/24
hosts deny = 0.0.0.0/0
## # Other options for this are USER, DOMAIN, ADS, and SERVER
# The default is user
security = user
# previously set to share, but this no longer works
## # No passwords will be used so a guest account should be enabled:
guest ok = yes

## # Now set print drivers information:
[print$]
comment = Printer Drivers
path = /etc/samba/printer ## # This path holds the driver structure
guest ok = yes
browseable = yes
read only = yes
## # Modify the following to "<username>,root" to add a second printer admin:
write list = root

## # Setup a printer to share. While the name is arbitrary it
# should be consistent throughout Samba and CUPS:
[HPDeskJet930C]
comment = HP DeskJet 930C Network Printer
printable = yes
path = /var/spool/samba
guest ok = yes
## # Modify the following to "<username>,root" to add a second printer admin:
printer admin = root

## # Now set the printer share. This should be
# browseable, printable, public, etc.:
[printers]
comment = All Printers
browseable = no
printable = yes
writable = no
guest ok = yes
path = /var/spool/samba
## # Modify the following to "<username>,root" to add a second printer admin:
printer admin = root

## # Create a new share that can read from or written to anywhere.
# This is kind of like a temp public share; anyone can do what
# they want here:
[public]
comment = Public Files
browseable = yes
create mode = 0766
guest ok = yes
path = /home/samba/public

Warning
To use Samba’s guest account to do anything concerning printing from Windows clients do not set guest only = yes in the [global] section. The guest account seems to cause problems when running cupsaddsmb sometimes when trying to connect from Windows machines. See below, too, when we talk about cupsaddsmb and the problems that can arise. Use a dedicated printer user, like printeruser,printer,printme, etc. It does not hurt and it will certainly protect users from many problems.

Create the directories required for the minimum configuration of Samba to share the installed printer throughout the network:

root #mkdir /etc/samba/printer

root #mkdir /var/spool/samba

root #mkdir /home/samba/public

At least one Samba user is required in order to install the printer drivers and to allow users to connect to the printer. Users must exist in the system’s /etc/passwd file. The next example uses the root user, but others can be used as well.

The Samba passwords need not be the same as the system passwords in /etc/passwd

You will also need to update the /etc/nsswitch.conf file so that Windows systems can be found easily using NetBIOS:

user $nano -w /etc/nsswitch.conf

hosts: files dns wins

Configuring CUPS

This section is a little more complicated. CUPS’ main configuration file is /etc/cups/cupsd.conf Its structure is similar to Apache’s httpd.conf file, so many may find it familiar. Outlined in the example are the directives that need to be changed:

FILE /etc/cups/cupsd.conf

ServerName PrintServer          ## # The printserver name
ServerAdmin root@PrintServer    ## # The person for printer-related hate-mail # e.g. The system administrator

AccessLog /var/log/cups/access_log ## # Probably does not need changing
ErrorLog  /var/log/cups/error_log  ## # Does not need changing either

LogLevel  debug ## # Set to debug only during installing and testing, should later be
                # changed to 'info'

MaxClients 100 ## # I've had to set this to 1000000000 or so because some time back,
               # there seemed to be a bug in CUPS' controlling of the web interface,
               # making CUPS think a denial of service attack was in progress when
               # I tried to configure a printer with the web interface. weird.

BrowseAddress @IF(eth0) ## # Set this value to internal NIC interface name

<Location />
Order Deny,Allow
Deny From All
Allow From 192.168.1.*  ## # The addresses of the internal network
                        # e.g. 192.168.1.* will allow connections from any host on
                        # the 192.168.1.0 network. Modify as needed.
</Location>

<Location /admin>
AuthType Basic
AuthClass System
Allow From 192.168.1.*  ## # Same as above, allows any host on the
                        # 192.168.1.0 network to connect and do
                        # administrative tasks after authenticating.
Order Deny,Allow
Deny From All
</Location>

Edit /etc/cups/mime.convs file to uncomment some lines. The changes to mime.convs and mime.types are needed to make CUPS print Microsoft Office document files.

The following line is found near the end of the file. Uncomment it:

FILE /etc/cups/mime.convs

application/octet-stream        application/vnd.cups-raw        0

Edit /etc/cups/mime.types to uncomment some lines.

The following line is found near the end of the file. Uncomment it:

FILE /etc/cups/mime.types

application/octet-stream

CUPS needs to be started on boot, and started immediately.

root #rc-update add cupsd default

root #/etc/init.d/cupsd restart

Installing a printer for and with CUPS

First, go to OpenPrinting to find and download the correct PPD file for the printer and CUPS. To do so, click the link Printer Listings to the left. Select the printers manufacturer and the model in the pull down menu, e.g. HP and DeskJet 930C. Click «Show». On the page coming up click the «recommended driver» link after reading the various notes and information. Then fetch the PPD file from the next page, again after reading the notes and introductions there. You may have to select your printers manufacturer and model again. Reading the CUPS quickstart guide is also very helpful when working with CUPS.

Now you have a PPD file for your printer to work with CUPS. Place it in /usr/share/cups/model . The PPD for the HP DeskJet 930C was named HP-DeskJet_930C-hpijs.ppd . You should now install the printer. This can be done via the CUPS web interface or via command line. The web interface is found at http://PrintServer:631 once CUPS is running.

root #lpadmin -p HPDeskJet930C -E -v usb:/dev/ultp0 -m HP-DeskJet_930C-hpijs.ppd

root #/etc/init.d/cupsd restart

Remember to adjust to what you have. Be sure to have the name (-p option) right (the name you set above during the Samba configuration!) and to put in the correct usb:/dev/usb/blah , parallel:/dev/blah or whatever device you are using for the printer.

The printer should now be available from the web interface and to print a test page.

Installing the Windows printer drivers

Now that the printer should be working it is time to install the drivers for the Windows clients to work. Samba 2.2 introduced this functionality. Browsing to the print server in the Network Neighbourhood, right-clicking on the printer share and selecting «connect» downloads the appropriate drivers automatically to the connecting client, avoiding the hassle of manually installing printer drivers locally.

There are two sets of printer drivers for this. First, the Adobe PS drivers which can be obtained from Adobe (PostScript printer drivers). Second, there are the CUPS PS drivers, to be obtained by emerging net-print/cups-windows. There does not seem to be a difference between the functionality of the two, but the Adobe PS drivers need to be extracted on a Windows System since it’s a Windows binary. Also the whole procedure of finding and copying the correct files is a bit more hassle. The CUPS drivers support some options the Adobe drivers don’t.

This article uses the CUPS drivers for Windows. Install them as shown:

root #emerge --ask net-print/cups-windows

Now use the cupsaddsmb script provided by the CUPS distribution. Be sure to read its man page (man cupsaddsmb), as it will tell which Windows drivers are needed to be copied to the proper CUPS directory. Once the drivers have been copied, restart CUPS by issuing /etc/init.d/cupsd restart to the command line. Next, run cupsaddsmb as shown:

root #cupsaddsmb -H PrintServer -U root -h PrintServer -v HPDeskJet930C

Instead of HPDeskJet930C the -a option use be specified. This will «export all known printers»:

root #cupsaddsmb -H PrintServer -U root -h PrintServer -a

Warning
The execution of this command often causes the most trouble. Read through the posts in this thread for some troubleshooting tips.

Here are common errors that may happen:

  • The hostname given as a parameter for -h and -H ( PrintServer ) often does not resolve correctly and does not identify the print server for CUPS/Samba interaction. If an error like: Warning: No PPD file for printer «CUPS_PRINTER_NAME» — skipping! occurs, the first thing to do is substitute PrintServer with localhost and try again.
  • The command fails with an NT_STATUS_UNSUCCESSFUL error. This error message is quite common, but can be triggered by many problems. It is unfortunately not very helpful. One thing to try is to temporarily set security = user in the smb.conf After/if the installation completes successfully, you should set it back to share, or whatever it was set to before.

This should install the correct driver directory structure under /etc/samba/printer . That would be /etc/samba/printer/W32X86/2/ The files contained should be the 3 driver files and the PPD file, renamed to YourPrinterName.ppd (the name given to the printer when installing it, see above).

Pending no errors or other complications drivers will now be installed.

Installing the Web Service Discovery host daemon

wsdd

wsdd implements a Web Service Discovery host daemon. This enables (Samba) hosts, like your local NAS device, to be found by Web Service Discovery Clients like Windows.

Showing a SAMBA server in the Network Neighbourhood.

Purpose

Since NetBIOS discovery is not supported by Windows anymore, wsdd makes hosts to appear in Windows again using the Web Service Discovery method. This is beneficial for devices running Samba, like NAS or file sharing servers on your local network.

Background

With Windows 10 version 1511, support for SMBv1 and thus NetBIOS device discovery was disabled by default. Depending on the actual edition, later versions of Windows starting from version 1709 («Fall Creators Update») do not allow the installation of the SMBv1 client anymore. This causes hosts running Samba not to be listed in the Explorer’s «Network (Neighborhood)» views. While there is no connectivity problem and Samba will still run fine, users might want to have their Samba hosts to be listed by Windows automatically.

Installing

wsdd does not yet exist in the Portage tree (bug #683292) but the author of wsdd has provided an ebuild available at https://github.com/christgau/wsdd-gentoo

For information on how to add a custom ebuild to your local Portage overlay see the Wiki Custom repository

Finalizing the setup

Lastly, setup the directories:

root #mkdir /home/samba

root #mkdir /home/samba/public

root #chmod 755 /home/samba

root #chmod 755 /home/samba/public

Testing the Samba configuration

Test the configuration file to ensure that it is formatted properly and to verify all options have the correct syntax. To do this, run the testparm program:

root #/usr/bin/testparm

Load smb config files from /etc/samba/smb.conf
Processing section "[printers]"
Global parameter guest account found in service section!
Processing section "[public]"
Global parameter guest account found in service section!
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
 ...
 ...

Starting the Samba service

Now configure Samba to start at boot and then start it.

OpenRC

root #rc-update add samba default

root #/etc/init.d/samba start

systemd

root #systemctl --now enable smbd.service

root #systemctl --now enable nmbd.service

Checking the services

It might be prudent to check out logs at this time. Take a peak at the Samba shares using the smbclient command:

root #smbclient -L localhost

Password:
## (A BIG list of services should be displayed here.)

Configuration of the clients

Printer configuration of *nix based clients

Despite the variation or distribution, the only thing needed is CUPS. Do the equivalent on any other UNIX/Linux/BSD client.

root #emerge --ask net-print/cups

root #nano -w /etc/cups/client.conf

ServerName PrintServer      ## # your printserver name

That should be it. Nothing else will be needed.

When using only one printer, it will be set as the default printer. If the print server manages several printers, the administrator will have defined a default printer on the server. If a user would like to define a different default printer, use the lpoptions command.

First list the available printers:

root #lpstat -a

HPDeskJet930C accepting requests since Jan 01 00:00
laser accepting requests since Jan 01 00:00

Now define the printer (in the example, HPDeskJet930C) as the default printer:

root #lpoptions -d HPDeskJet930C

To enable printing on the Unix/Linux systems, either specify the printer to be used, or just use the default printer (second example):

root #lp -d HPDeskJet930C anything.txt

root #lp foobar.whatever.ps

Point a web browser to http://printserver:631 on the client to manage the printers and their jobs via a nice web interface. Replace printserver with the name of the machine which acts as the print server. Be careful to not use the name given to the cups print server if a different name was used.

Note
Do not forget to install net-fs/samba on the client(s) that will be accessing the shares.

Now is time to configure our kernel to support CIFS. Since I’m assuming we’ve all compiled at least one kernel, we’ll need to make sure we have all the right options selected in our kernel. For simplicity’s sake, make it a module for ease of use. It is the author’s opinion that kernel modules are a good thing and should be used whenever possible.

KERNEL Kernel support

CONFIG_CIFS=m

Then make the module/install it; insert it with:

Once the module is loaded, mounting a Windows or Samba share is possible. Use mount to accomplish this, as detailed below.

The syntax for mounting a Windows/Samba share is:

root #mount -t cifs [-o username=xxx,password=xxx] //server/share /mnt/point

You can drop the username and password options if no password is needed.

root #mount -t cifs //PrintServer/public /mnt/public

After mounting the share, it can be accessed as if it were a local drive.

Printer configuration for Windows NT/2000/XP clients

Configuring printers is simply a bit of point-and-click. Browse to \PrintServer and right click on the printer (HPDeskJet930C) and click connect. This will download the drivers to the Windows client which will enable applications (such as Word or Acrobat) to offer HPDeskJet930C as an available printer.

Access for Windows XP clients

The Samba server smb.conf requires at least the following for enabling access from Windows XP clients.

FILE /etc/samba/smb.conf

server min protocol = LANMAN2
lm announce = no
lanman auth = no
# If ntlm=yes triggers success for winxp, see Enable NTLMv2 note below
ntlm auth = no
client lanman auth = no
client ntlmv2 auth = yes

Modify the Windows XP registery with the following, exporting/saving the original default first:

CODE

HKEY_LOCAL_MACHINE, SYSTEM, CurrentControlSet, Control, LSA

Change LMCompatibilityLevel=0 to LMCompatibilityLevel=5

Restart the Samba server and Windows XP client.

Debugging Samba server access

Can view more Samba server debug info by adding the following to the /etc/smb.conf and restarting the Samba server:

FILE /etc/samba/smb.conf

# Output more debug/verbose logging
#log level = 3
# Check good pass auth
#log level = 3 passdb:5 auth:5
#log level = 10 passdb:5 auth:5

If logins are failing, the following should output the server authentication protocol and reason after enabling verbose debugging as previously mentioned.

# tail -f /var/log/samba/log.smbd

Once logins are almost successful, logging will output to the client's hostname log.

# tail -f /var/log/samba/log.YOUR_HOSTNAME

KDE Plasma 5

kio-extras contains Samba support, but it requires the USE=samba USE flag.

See also

  • Printing — covers the installation and maintenance of printers using CUPS and Samba.

External resources

  • CUPS Homepage
  • Samba Homepage , especially the chapter on Samba/CUPS configuration
  • OpenPrinting
  • Kurt Pfeifle’s Samba Print HOWTO ( This HOWTO really covers ANYTHING and EVERYTHING I’ve written here, plus a LOT more concerning CUPS and Samba, and generally printing support on networks. An interesting read with lots and lots of details.)
  • FreeBSD Diary’s CUPS Topic

Troubleshooting

See this page from Kurt Pfeifle’s «Printing Support in Samba 3.0» manual. Lots of useful tips there! Be sure to look this one up before posting questions and problems. Using this resource the solution may be quickly found.


This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Andreas «daff» Ntaflos, Joshua Preston, Joshua Saddler
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article’s associated history page.

Введение 

В этом мануале разберем последовательную установку и настройку программного обеспечения Samba на Ubuntu 20.04. Шаги данной инструкции выполним на облачной инфраструктуре Selectel.

Samba — стандартный набор программ для взаимодействия с Windows для Linux и Unix. Это свободное программное обеспечение, лицензированное по GNU General Public License. С 1992 года Samba предоставляет безопасные, стабильные и быстрые услуги по работе с файлами и печатью для всех клиентов, использующих протокол SMB/CIFS, таких как все версии DOS и Windows, OS/2, Linux и многие другие.
Samba — важный компонент для беспрепятственной интеграции Linux/Unix-серверов и настольных компьютеров в среду Active Directory. Она может функционировать как в качестве контроллера домена, так и в качестве обычного члена домена.

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

Подготовка виртуального сервера

Для этой инструкции используется виртуальная среда Selectel. Панель управления расположена по адресу: https://my.selectel.ru/.

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

В разделе «Облачная платформа» во вкладке «Серверы» создадим новый сервер.

Используем минимальную конфигурацию:

  • 1 CPU,
  • 1 ГБ оперативной памяти,
  • 5 ГБ памяти на универсальном диске.

Создание нового сервера

В настройках надо выбрать образ операционной системы для установки.

В данном случае это Ubuntu 20.04 LTS 64-bit из списка готовых конфигураций.

Оставим себе root-пароль и создадим сервер. После этого в панели управления появится IP-адрес сервера. 

Подключение к серверу по ssh

Подключимся к серверу по ssh и начнем настройку.

Создание пользователя

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

    sudo useradd -p password  selectel

Опция -p разрешит задать пароль пользователя сразу, password — созданный пароль, selectel — создаваемый пользователь.

Перед дальнейшей настройкой обновим репозитории. Сделать это можно командой:

    sudo apt update -y

Настройка даты и времени

При первоначальной настройке файлового хранилища очень важно уделить внимание настройке даты и времени, чтобы избежать проблем в будущем при поиске необходимых файлов и директорий.

Для настройки даты и времени используется утилита chrony. Ее демона можно добавить в автозагрузку сервера и время всегда будет актуальным. Отправим в терминал команду установки пакета:

    sudo apt install chrony -y

Вывод установки:

    Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
  systemd-timesyncd
The following NEW packages will be installed:
  chrony
0 upgraded, 1 newly installed, 1 to remove and 5 not upgraded.
Need to get 220 kB of archives.
After this operation, 287 kB of additional disk space will be used.
Get:1 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 chrony amd64 3.5-6ubuntu6.2 [220 kB]
Fetched 220 kB in 0s (6903 kB/s)
dpkg: systemd-timesyncd: dependency problems, but removing anyway as you requested:
 systemd depends on systemd-timesyncd | time-daemon; however:
  Package systemd-timesyncd is to be removed.
  Package time-daemon is not installed.
  Package systemd-timesyncd which provides time-daemon is to be removed.
  Package ntp which provides time-daemon is not installed.
 systemd depends on systemd-timesyncd | time-daemon; however:
  Package systemd-timesyncd is to be removed.
  Package time-daemon is not installed.
  Package systemd-timesyncd which provides time-daemon is to be removed.
  Package ntp which provides time-daemon is not installed.

(Reading database ... 57118 files and directories currently installed.)
Removing systemd-timesyncd (245.4-4ubuntu3.13) ...
Selecting previously unselected package chrony.
(Reading database ... 57105 files and directories currently installed.)
Preparing to unpack .../chrony_3.5-6ubuntu6.2_amd64.deb ...
Unpacking chrony (3.5-6ubuntu6.2) ...
Setting up chrony (3.5-6ubuntu6.2) ...
Creating '_chrony' system user/group for the chronyd daemon…

Creating config file /etc/chrony/chrony.conf with new version

Creating config file /etc/chrony/chrony.keys with new version
Created symlink /etc/systemd/system/chronyd.service → /lib/systemd/system/chrony.service.
Created symlink /etc/systemd/system/multi-user.target.wants/chrony.service → /lib/systemd/system/chrony.service.
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for dbus (1.12.16-2ubuntu2.1) ...
Processing triggers for systemd (245.4-4ubuntu3.13) ...


Добавим в автозагрузку сервера:

    sudo systemctl enable chrony

Вывод:

    Synchronizing state of chrony.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable chrony

Запустим утилиту:

    sudo systemctl start chrony

Установим часовой пояс. Для данной инструкции используется Europe/Moscow. Команда: 

    sudo timedatectl set-timezone Europe/Moscow

Проверим дату и время командой:

    date

Вывод:

    Mon Dec  6 07:13:49 UTC 2021

Установка Samba

Перейдем непосредственно к установке Samba на Ubuntu. Отправим в терминал команду:

    sudo apt install samba -y

Вывод:

    Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  libavahi-client3 libavahi-common-data libavahi-common3 libcups2 libldb2 libtalloc2 libtevent0 libwbclient0 python3-crypto python3-dnspython
  python3-ldb python3-samba python3-talloc python3-tdb samba-common samba-common-bin samba-libs tdb-tools
Suggested packages:
  cups-common bind9 bind9utils ctdb ldb-tools smbldap-tools winbind heimdal-clients python3-markdown
Recommended packages:
  python3-gpg attr python3-markdown samba-dsdb-modules samba-vfs-modules
The following NEW packages will be installed:
  libavahi-client3 libavahi-common-data libavahi-common3 libcups2 libldb2 libtalloc2 libtevent0 libwbclient0 python3-crypto python3-dnspython
  python3-ldb python3-samba python3-talloc python3-tdb samba samba-common samba-common-bin samba-libs tdb-tools
0 upgraded, 19 newly installed, 0 to remove and 5 not upgraded.
Need to get 11.1 MB of archives.
After this operation, 71.6 MB of additional disk space will be used.
Get:1 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 libtalloc2 amd64 2.3.1-0ubuntu0.20.04.1 [29.5 kB]
Get:2 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 libtevent0 amd64 0.10.2-0ubuntu0.20.04.1 [35.6 kB]
Get:3 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 libwbclient0 amd64 2:4.13.14+dfsg-0ubuntu0.20.04.2 [208 kB]
Get:4 http://mirror.selectel.ru/ubuntu focal/main amd64 python3-dnspython all 1.16.0-1build1 [89.1 kB]
Get:5 http://mirror.selectel.ru/ubuntu focal/main amd64 python3-crypto amd64 2.6.1-13ubuntu2 [237 kB]
Get:6 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 libldb2 amd64 2:2.2.3-0ubuntu0.20.04.2 [140 kB]
Get:7 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 python3-ldb amd64 2:2.2.3-0ubuntu0.20.04.2 [38.3 kB]
Get:8 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 python3-tdb amd64 1.4.3-0ubuntu0.20.04.1 [13.4 kB]
Get:9 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 libavahi-common-data amd64 0.7-4ubuntu7.1 [21.4 kB]
Get:10 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 libavahi-common3 amd64 0.7-4ubuntu7.1 [21.7 kB]
Get:11 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 libavahi-client3 amd64 0.7-4ubuntu7.1 [25.5 kB]
Get:12 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 libcups2 amd64 2.3.1-9ubuntu1.1 [233 kB]
Get:13 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 python3-talloc amd64 2.3.1-0ubuntu0.20.04.1 [12.2 kB]
Get:14 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 samba-libs amd64 2:4.13.14+dfsg-0ubuntu0.20.04.2 [5753 kB]
Get:15 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 python3-samba amd64 2:4.13.14+dfsg-0ubuntu0.20.04.2 [2575 kB]
Get:16 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 samba-common all 2:4.13.14+dfsg-0ubuntu0.20.04.2 [68.3 kB]
Get:17 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 samba-common-bin amd64 2:4.13.14+dfsg-0ubuntu0.20.04.2 [556 kB]
Get:18 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 tdb-tools amd64 1.4.3-0ubuntu0.20.04.1 [24.9 kB]
Get:19 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 samba amd64 2:4.13.14+dfsg-0ubuntu0.20.04.2 [1065 kB]
Fetched 11.1 MB in 0s (43.4 MB/s)
Preconfiguring packages ...
Selecting previously unselected package libtalloc2:amd64.
(Reading database ... 57147 files and directories currently installed.)
Preparing to unpack .../00-libtalloc2_2.3.1-0ubuntu0.20.04.1_amd64.deb ...
Unpacking libtalloc2:amd64 (2.3.1-0ubuntu0.20.04.1) ...
Selecting previously unselected package libtevent0:amd64.
Preparing to unpack .../01-libtevent0_0.10.2-0ubuntu0.20.04.1_amd64.deb ...
Unpacking libtevent0:amd64 (0.10.2-0ubuntu0.20.04.1) ...
Selecting previously unselected package libwbclient0:amd64.
Preparing to unpack .../02-libwbclient0_2%3a4.13.14+dfsg-0ubuntu0.20.04.2_amd64.deb ...
Unpacking libwbclient0:amd64 (2:4.13.14+dfsg-0ubuntu0.20.04.2) ...
Selecting previously unselected package python3-dnspython.
Preparing to unpack .../03-python3-dnspython_1.16.0-1build1_all.deb ...
Unpacking python3-dnspython (1.16.0-1build1) ...
Selecting previously unselected package python3-crypto.
Preparing to unpack .../04-python3-crypto_2.6.1-13ubuntu2_amd64.deb ...
Unpacking python3-crypto (2.6.1-13ubuntu2) ...
Selecting previously unselected package libldb2:amd64.
Preparing to unpack .../05-libldb2_2%3a2.2.3-0ubuntu0.20.04.2_amd64.deb ...
Unpacking libldb2:amd64 (2:2.2.3-0ubuntu0.20.04.2) ...
Selecting previously unselected package python3-ldb.
Preparing to unpack .../06-python3-ldb_2%3a2.2.3-0ubuntu0.20.04.2_amd64.deb ...
Unpacking python3-ldb (2:2.2.3-0ubuntu0.20.04.2) ...
Selecting previously unselected package python3-tdb.
Preparing to unpack .../07-python3-tdb_1.4.3-0ubuntu0.20.04.1_amd64.deb ...
Unpacking python3-tdb (1.4.3-0ubuntu0.20.04.1) ...
Selecting previously unselected package libavahi-common-data:amd64.
Preparing to unpack .../08-libavahi-common-data_0.7-4ubuntu7.1_amd64.deb ...
Unpacking libavahi-common-data:amd64 (0.7-4ubuntu7.1) ...
Selecting previously unselected package libavahi-common3:amd64.
Preparing to unpack .../09-libavahi-common3_0.7-4ubuntu7.1_amd64.deb ...
Unpacking libavahi-common3:amd64 (0.7-4ubuntu7.1) ...
Selecting previously unselected package libavahi-client3:amd64.
Preparing to unpack .../10-libavahi-client3_0.7-4ubuntu7.1_amd64.deb ...
Unpacking libavahi-client3:amd64 (0.7-4ubuntu7.1) ...
Selecting previously unselected package libcups2:amd64.
Preparing to unpack .../11-libcups2_2.3.1-9ubuntu1.1_amd64.deb ...
Unpacking libcups2:amd64 (2.3.1-9ubuntu1.1) ...
Selecting previously unselected package python3-talloc:amd64.
Preparing to unpack .../12-python3-talloc_2.3.1-0ubuntu0.20.04.1_amd64.deb ...
Unpacking python3-talloc:amd64 (2.3.1-0ubuntu0.20.04.1) ...
Selecting previously unselected package samba-libs:amd64.
Preparing to unpack .../13-samba-libs_2%3a4.13.14+dfsg-0ubuntu0.20.04.2_amd64.deb ...
Unpacking samba-libs:amd64 (2:4.13.14+dfsg-0ubuntu0.20.04.2) ...
Selecting previously unselected package python3-samba.
Preparing to unpack .../14-python3-samba_2%3a4.13.14+dfsg-0ubuntu0.20.04.2_amd64.deb ...
Unpacking python3-samba (2:4.13.14+dfsg-0ubuntu0.20.04.2) ...
Selecting previously unselected package samba-common.
Preparing to unpack .../15-samba-common_2%3a4.13.14+dfsg-0ubuntu0.20.04.2_all.deb ...
Unpacking samba-common (2:4.13.14+dfsg-0ubuntu0.20.04.2) ...
Selecting previously unselected package samba-common-bin.
Preparing to unpack .../16-samba-common-bin_2%3a4.13.14+dfsg-0ubuntu0.20.04.2_amd64.deb ...
Unpacking samba-common-bin (2:4.13.14+dfsg-0ubuntu0.20.04.2) ...
Selecting previously unselected package tdb-tools.
Preparing to unpack .../17-tdb-tools_1.4.3-0ubuntu0.20.04.1_amd64.deb ...
Unpacking tdb-tools (1.4.3-0ubuntu0.20.04.1) ...
Selecting previously unselected package samba.
Preparing to unpack .../18-samba_2%3a4.13.14+dfsg-0ubuntu0.20.04.2_amd64.deb ...
Unpacking samba (2:4.13.14+dfsg-0ubuntu0.20.04.2) ...
Setting up samba-common (2:4.13.14+dfsg-0ubuntu0.20.04.2) ...

Creating config file /etc/samba/smb.conf with new version
Setting up libtalloc2:amd64 (2.3.1-0ubuntu0.20.04.1) ...
Setting up python3-tdb (1.4.3-0ubuntu0.20.04.1) ...
Setting up libtevent0:amd64 (0.10.2-0ubuntu0.20.04.1) ...
Setting up libavahi-common-data:amd64 (0.7-4ubuntu7.1) ...
Setting up tdb-tools (1.4.3-0ubuntu0.20.04.1) ...
update-alternatives: using /usr/bin/tdbbackup.tdbtools to provide /usr/bin/tdbbackup (tdbbackup) in auto mode
Setting up python3-dnspython (1.16.0-1build1) ...
Setting up python3-crypto (2.6.1-13ubuntu2) ...
Setting up libldb2:amd64 (2:2.2.3-0ubuntu0.20.04.2) ...
Setting up python3-talloc:amd64 (2.3.1-0ubuntu0.20.04.1) ...
Setting up libavahi-common3:amd64 (0.7-4ubuntu7.1) ...
Setting up libwbclient0:amd64 (2:4.13.14+dfsg-0ubuntu0.20.04.2) ...
Setting up python3-ldb (2:2.2.3-0ubuntu0.20.04.2) ...
Setting up libavahi-client3:amd64 (0.7-4ubuntu7.1) ...
Setting up libcups2:amd64 (2.3.1-9ubuntu1.1) ...
Setting up samba-libs:amd64 (2:4.13.14+dfsg-0ubuntu0.20.04.2) ...
Setting up python3-samba (2:4.13.14+dfsg-0ubuntu0.20.04.2) ...
Setting up samba-common-bin (2:4.13.14+dfsg-0ubuntu0.20.04.2) ...
Checking smb.conf with testparm
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed
Server role: ROLE_STANDALONE

Done
Setting up samba (2:4.13.14+dfsg-0ubuntu0.20.04.2) ...
Adding group `sambashare' (GID 121) ...
Done.
Samba is not being run as an AD Domain Controller: Masking samba-ad-dc.service
Please ignore the following error about deb-systemd-helper not finding those services.
(samba-ad-dc.service masked)
Created symlink /etc/systemd/system/multi-user.target.wants/nmbd.service → /lib/systemd/system/nmbd.service.
Failed to preset unit: Unit file /etc/systemd/system/samba-ad-dc.service is masked.
/usr/bin/deb-systemd-helper: error: systemctl preset failed on samba-ad-dc.service: No such file or directory
Created symlink /etc/systemd/system/multi-user.target.wants/smbd.service → /lib/systemd/system/smbd.service.
samba-ad-dc.service is a disabled or a static unit, not starting it.
Processing triggers for ufw (0.36-6ubuntu1) ...
Rules updated for profile 'Squid'
Skipped reloading firewall
Processing triggers for systemd (245.4-4ubuntu3.13) ...
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for libc-bin (2.31-0ubuntu9.2) ...

Демон или сервис Samba называется smbd. Под таким именем и будем к нему обращаться.

Добавим сервис smbd в автозапуск:

    sudo systemctl enable smbd

Запустим:

    sudo systemctl start smbd

Проверим текущий статус:

    sudo systemctl status smbd

Далее перечислим оставшиеся команды управления сервисом smbd. Они могут потребоваться в дальнейшем в процессе эксплуатации Samba.

Остановить сервис:

    sudo systemctl stop smbd

Перезапуск демона:

    sudo systemctl restart smbd

Убрать из автозапуска:

    sudo systemctl disable smbd

Перечитать конфигурацию:

    sudo systemctl reload smbd

Результат проверки статуса:

    ● smbd.service - Samba SMB Daemon
     Loaded: loaded (/lib/systemd/system/smbd.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2021-12-06 09:50:18 UTC; 26s ago
       Docs: man:smbd(8)
             man:samba(7)
             man:smb.conf(5)
   Main PID: 83137 (smbd)
     Status: "smbd: ready to serve connections..."
      Tasks: 4 (limit: 1105)
     Memory: 7.2M
     CGroup: /system.slice/smbd.service
             ├─83137 /usr/sbin/smbd --foreground --no-process-group
             ├─83139 /usr/sbin/smbd --foreground --no-process-group
             ├─83140 /usr/sbin/smbd --foreground --no-process-group
             └─83141 /usr/sbin/smbd --foreground --no-process-group

Dec 06 09:50:18 apachi systemd[1]: Starting Samba SMB Daemon...
Dec 06 09:50:18 apachi systemd[1]: Started Samba SMB Daemon.
Dec 06 09:50:28 apachi systemd[1]: Reloading Samba SMB Daemon.
Dec 06 09:50:28 apachi systemd[1]: Reloaded Samba SMB Daemon.

Если в настраиваемой системе включен брандмауэр ufw, необходимо добавить разрешающее правило для Samba:

    sudo ufw allow Samba

или:

    sudo ufw allow 445
    sudo ufw allow 137
    sudo ufw allow 138
    sudo ufw allow 139 

В каждом правиле указан порт из диапазона, в котором работает Samba.

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

В этой инструкции используется удаленный сервер, расположенный в интернете. Открывать прямой доступ по IP-адресу к  ресурсам в таком случае нельзя. Поэтому перед дальнейшей настройкой будет организован VPN-туннель. Настраивать VPN для удаленного доступа в локальной сети не потребуется. Настройку мы произвели, следуя этой инструкции.

После получения доступа к удаленному серверу с использованием VPN-туннеля, сервер имеет адрес 10.8.0.1 

Дальнейшие действия будут производиться с использованием этого адреса.

Настройка Samba

Конфигурационный файл Samba расположен по следующему пути:

/etc/samba/smb.conf

Лучше скопировать файл конфигурации по умолчанию, чтобы всегда оставлять себе возможность откатиться до дефолтных настроек Samba на Ubuntu. 

Копируем командой:

    sudo cp /etc/samba/smb.conf /etc/samba/res_smb.conf

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

    grep -v '^ *#|^ *$' /etc/samba/smb.conf | sudo tee /etc/samba/smb.conf

На выходе получаем файл конфигурации без комментариев и неиспользуемых директив. Вот так он выглядит:

    [global]
   workgroup = WORKGROUP
   server string = %h server (Samba, Ubuntu)
   log file = /var/log/samba/log.%m
   max log size = 1000
   logging = file
   panic action = /usr/share/samba/panic-action %d
   server role = standalone server
   obey pam restrictions = yes
   unix password sync = yes
   passwd program = /usr/bin/passwd %u
   passwd chat = *Entersnews*spassword:* %nn *Retypesnews*spassword:* %nn *passwordsupdatedssuccessfully* .
   pam password change = yes
   map to guest = bad user
   usershare allow guests = yes
[printers]
   comment = All Printers
   browseable = no
   path = /var/spool/samba
   printable = yes
   guest ok = no
   read only = yes
   create mask = 0700
[print$]
   comment = Printer Drivers
   path = /var/lib/samba/printers
   browseable = yes
   read only = yes
   guest ok = no

После сохранения конфигурации рекомендуется проверить ее работоспособность с помощью команды:

    testparm

Вывод:

    Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

# Global parameters
[global]
        log file = /var/log/samba/log.%m
        logging = file
        map to guest = Bad User
        max log size = 1000
        obey pam restrictions = Yes
        pam password change = Yes
        panic action = /usr/share/samba/panic-action %d
        passwd chat = *Entersnews*spassword:* %nn *Retypesnews*spassword:* %nn *passwordsupdatedssuccessfully* .
        passwd program = /usr/bin/passwd %u
        server role = standalone server
        server string = %h server (Samba, Ubuntu)
        unix password sync = Yes
        usershare allow guests = Yes
        idmap config * : backend = tdb


[printers]
        browseable = No
        comment = All Printers
        create mask = 0700
        path = /var/spool/samba
        printable = Yes


[print$]
        comment = Printer Drivers
        path = /var/lib/samba/printers


Настройка анонимного доступа к директории

Для множества задач самым оптимальным и простым решением является настройка анонимного доступа к ресурсу. Это значит, что клиент имеет возможность обратиться к ресурсу на сервере без авторизации. Например, можно создать директорию с общим доступом, в которой хранится информация, которой не требуется безопасность.

Важно: данный способ используется очень редко. Это крайне небезопасно оставлять ресурс в таком состоянии. Обычно это делается для маленькой soho-сети в самых крайних случаях.

Создадим директорию, к которой будет предоставлен доступ:

    sudo mkdir /var/anonimus_share

И добавим директории полные права для всех:

    sudo chmod 775 /var/anonimus_share

Директория var использована как пример, в реальных задачах может быть предоставлен доступ к папке с логами, чтобы их изучить без подключения к серверу, или создание папки с общим доступом для обмена файлами. Такие права также назначены в ознакомительных целях.

Следующим шагом будут внесены изменения в директивы конфигурационного файла, в данной инструкции для этих целей использован текстовый редактор nano.

    sudo nano /etc/samba/smb.conf

Добавим в файл следующий директивы:

    [anonimus_share]                                                                                                
    comment = Directory anonimus                                                                       
    path = /var/anonimus_share                                                                            
    public = yes                                                                                                      
    writable = yes                                                                                                   
    read only = no                                                                                                  
    guest ok = yes                                                                                                  
    create mask = 0775                                                                                          
    directory mask = 0775                                                                                      
    force create mode = 0775                                                                                
    force directory mode = 0775  

Рассмотрим более подробно:

[anonimus_share] 一 имя ресурса, отображаемое клиенту при подключении;                                                                                 

comment = Directory anonimus комментарий;                                                                       

path = /var/anonimus_share 一 директория, к которой предоставляем доступ;                                                        

public = yes 一 доступ на чтение всем авторизованным пользователям, также гостевым;                                                                                  

writable = yes 一 право записи в сетевой ресурс;

read only = no 一 право на чтение, при значении директивы no все пользователи получают право на создание директорий и файлов;                                 

guest ok = yes 一 доступ гостевой учетной записи;                      

  • create mask = 0775;                                                                                          
  • directory mask = 0775;                                                                                      
  • force create mode = 0775;                                                                               
  • force directory mode = 0775.

Эти директивы задают права доступа, назначаемые при создании новой директории или файла.

Конфигурационный файл теперь выглядит следующим образом:

       workgroup = WORKGROUP
   server string = %h server (Samba, Ubuntu)
   log file = /var/log/samba/log.%m
   max log size = 1000
   logging = file
   panic action = /usr/share/samba/panic-action %d
   server role = standalone server
   obey pam restrictions = yes
   unix password sync = yes
   passwd program = /usr/bin/passwd %u
   passwd chat = *Entersnews*spassword:* %nn *Retypesnews*spassword:* %nn *passwordsupdatedssuccessfully* .
   pam password change = yes
   map to guest = bad user
   usershare allow guests = yes
[printers]
   comment = All Printers
   browseable = no
   path = /var/spool/samba
   printable = yes
   guest ok = no
   read only = yes
   create mask = 0700
[print$]
   comment = Printer Drivers
   path = /var/lib/samba/printers
   browseable = yes
   read only = yes
   guest ok = no
[anonimus_share]
    comment = Directory anonimus
    path = /var/anonimus_share
    public = yes
    writable = yes
    read only = no
    guest ok = yes
    create mask = 0775
    directory mask = 0775
    force create mode = 0775
    force directory mode = 0775

После внесения изменений перезапускаем демона Samba:

    sudo systemctl restart smbd

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

Проверка подключения к ресурсу с ОС Windows

Доступ к созданной директории есть. 

Настройка доступа по учетным данным пользователя

Следующим этапом станет настройка доступа к директории по комбинации логин/пароль.

Для начала создадим директорию, которая станет тестовой, и назначим ей полный права:

    sudo mkdir /var/acc_pass | sudo chmod 777 /var/acc_pass

Внесем изменения в файл конфигурации:

    sudo nano /etc/samba/smb.conf

Добавим следующий блок директив:

    [acc_pass]
    comment =  acc_pass
    path =  /var/acc_pass
    public = no
    writable = yes
    read only = no
    guest ok = no
    create mask = 0775
    directory mask = 0775
    force create mode = 0775
    force directory mode = 0775

Большая часть указанных здесь настроек разобраны в предыдущем блоке. 

Остановимся только на новых:

path =  /var/acc_pass 一 путь до директории;

public = no 一 запрет на публичный доступ к папке;

guest ok = no 一 запрет гостевого подключения.

Добавим пользователя Samba:

    sudo smbpasswd -a selectel

Проверим подключение к директории:

Проверка подключения к директории

При попытке подключения происходит запрос комбинации логин/пароль. Вводим.

После успешной авторизации происходит получение доступа к директории:

Получение доступа к директории

Настройка доступа для пользователей и групп

Следующим этапом разберем доступ к директории для определенных пользователей и групп.

Создадим директорию и назначим ей полные права:

    sudo mkdir /var/acc_gr_and_user | sudo chmod 777 /var/acc_gr_and_user


Откроем файл конфигурации и добавим в него следующий блок директив:

    [acc_gr_and_user]
    comment = acc_gr_and_user
    path = /var/acc_gr_and_user
    public = no
    writable = no
    read only = yes
    guest ok = no
    valid users = vlan48, selectel, @groupe1
    write list = selectel
    create mask = 0775
    directory mask = 0775
    force create mode = 0775
    force directory mode = 0775
    inherit owner = yes

Разберем директивы:

[acc_gr_and_user] 一 имя ресурса, отображаемое клиенту при подключении;                                                                                  

comment = acc_gr_and_user 一 комментарий;                                                                       

path = /var/acc_gr_and_user 一 директория, к которой предоставляем доступ;                   

public = no 一 запрет на публичный доступ к папке;                                                                          

writable = no и read only = yes 一 разрешение на запись мы добавим для пользователей, перечисленных в директиве write list, а для остальных оставим с запрет на запись, разрешив только чтение;

guest ok = no 一 доступ гостевой учетной записи;         

valid users = vlan48, selectel, @groupe1 一 пользователи и группы, которые имеют доступ к директории, где vlan48, selectel 一пользователи, а @groupe1 一группа пользователей.

write list = selectel 一 пользователи, которым разрешена запись в директории;

  • create mask = 0775;                                                                                          
  • directory mask = 0775;                                                                                    
  • force create mode = 0775;                                                                                
  • force directory mode = 0775;

Эти 4 директивы задают права доступа назначаемые при создании новой директории или файла.

inherit owner = yes 一 директива включает наследование владельца во время создания директорий и файлов.

Сохраняем файл, перезапускаем демона Samba:

    sudo systemctl restart smbd

Подключение к ресурсу 

Для подключения к созданному ресурсу из операционной системы Windows используется проводник. Быстро открыть его можно, применив комбинацию клавиш Ctrl+E. Вводим необходимый путь в адресную строку проводника.

Подключение к ресурсу

Путь в системах Windows пишется через обратный слеш, путь к сетевому ресурсу 一 через двойной обратный слеш. Можно также подключать ресурс как диск, если это не противоречит вашим правилам безопасности. В таком случае при включении рабочей станции не требуется каждый раз устанавливать соединение с ресурсом.

Для выполнения этой процедуры в проводнике выберем вкладку «Простой доступ, подключить как диск».

Простой доступ, подключить как диск

В открывшемся окне настроим букву для обозначения диска в системе и путь к ресурсу. Если учетная запись для авторизации в Samba отличается от учетной записи, под которой работает пользователь, можно использовать чекбокс «Использовать другие учетные данные».

Подключение сетевой папки

Теперь ресурс станет отображаться как диск при включении компьютера.

Linux

Подключение из операционных систем Linux-семейства производится с использованием набора утилит cifs. Установим cifs-утилиты на Ubuntu.

    sudo apt install cifs-utils -y

Вывод установки:

    Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
  keyutils smbclient winbind
The following NEW packages will be installed:
  cifs-utils
0 upgraded, 1 newly installed, 0 to remove and 2 not upgraded.
Need to get 82.5 kB of archives.
After this operation, 306 kB of additional disk space will be used.
Get:1 http://mirror.selectel.ru/ubuntu focal-updates/main amd64 cifs-utils amd64 2:6.9-1ubuntu0.1 [82.5 kB]
Fetched 82.5 kB in 0s (2439 kB/s)
Selecting previously unselected package cifs-utils.
(Reading database ... 45851 files and directories currently installed.)
Preparing to unpack .../cifs-utils_2%3a6.9-1ubuntu0.1_amd64.deb ...
Unpacking cifs-utils (2:6.9-1ubuntu0.1) ...
Setting up cifs-utils (2:6.9-1ubuntu0.1) ...
update-alternatives: using /usr/lib/x86_64-linux-gnu/cifs-utils/idmapwb.so to provide /etc/cifs-utils/idmap-plugin (idmap-plugin) in auto mode
Processing triggers for man-db (2.9.1-1) ...

Монтирование ресурса выглядит так:

    mount.cifs {ресурс} {путь к директории в которую монтируем } {-o опции}

Как пример рассмотрим подключение к директории anonimus_share, расположенной на ресурсе 10.8.0.1 в директорию mnt:

    mount.cifs //10.8.0.1/anonimus_share  /mnt

Автоматическое монтирование директории происходит с использованием файла fstab. Для начала создадим дополнительный файл с учетными данными пользователя для авторизации. Оправданно будет создать этот файл в директории root.

    sudo nano /root/.smbselus

Внесем в файл следующие директивы:

    username=selectel
password=uspass

Сохраняем и переходим к конфигурационному файлу fstab.

    sudo nano /etc/fstab

Добавляем в него следующий блок инструкций:

    //10.8.0.1/acc_gr_and_user /mnt cifs user,rw,credentials=/root/.smbselus 0 0

Конкретизируем каждый пункт:

//10.8.0.1/acc_gr_and_user 一 директория, которую необходимо смонтировать;

/mnt 一 директория, в которую необходимо смонтировать;

cifs user 一 разрешает монтировать любому пользователю;

rw 一 предоставляет права на чтение и запись;

credentials=/root/.smbselus 一 файл с учетными данными пользователя;

0 используется утилитой dump 0 一 выключен;

0 используется утилитой fsck 0 一 выключен.

В некоторых случаях требуется добавить директиву domain в файл .smbselus.

Для более тонкой и детальной настройки всегда можно обратиться к документации продукта. 

Настройка сетевой корзины

По умолчанию файлы из директории удаляются совсем. При определенных условиях необходимо иметь возможность восстановить эти файлы. В Samba данная возможность реализована с использованием сетевой корзины. Алгоритм работы следующий: настраивается скрытый каталог, в который при удалении перемещаются файлы.

Первым этапом создадим директорию для корзины и назначим ей права:

    sudo mkdir /var/recycle | sudo chmod 777 /var/recycle

Внесем блок директив в конфигурационный файл: 

    sudo nano /etc/samba/smb.conf

    [Recycle]
    comment = rec_dir
    path = /var/recycle
    public = yes
    browseable = yes
    writable = yes
    vfs objects = recycle
    recycle:repository = .recycle/%U
    recycle:keeptree = Yes
    recycle:touch = Yes
    recycle:versions = Yes
    recycle:maxsize = 0
    recycle:exclude = *.tmp, ~$*
    recycle:exclude_dir = /tmp

Значения директив:

[Recycle] имя ресурса, отображаемое клиенту при подключении;                                                                                 

comment = rec_dir 一 комментарий;

path = /var/recycle 一 директория, в которой размещена сетевая корзина.

public = yes 一 доступ на чтение всем авторизованным пользователям, также гостевым; 

browseable = yes параметр устанавливает, будет ли общий ресурс отображаться в списке доступных общих ресурсов в сетевом окружении и в списке просмотра;

writable = yes 一 право записи в сетевой ресурс;

vfs objects = recycle 一 использование подсистемы recycle;

recycle:repository = .recycle/%U 一 место хранения удаленных объектов. В этой директиве настроено попадание удаленных файлов в каталог с именем пользователя, который создается автоматически в директории .recycle;

recycle:keeptree = Yes 一 удаление с сохранением дерева каталогов;

recycle:touch = Yes 一 изменение даты при перемещении файла в сетевую корзину;

recycle:versions = Yes 一 добавление номера версии при удалении файлов с одинаковыми именами;

recycle:maxsize = 0 一 параметр отвечает за максимальный размер файла, который может быть перемещен в корзину. При текущем значении возможно переместить файл любого размера;

recycle:exclude = *.tmp, ~$*  一 исключение файлов заданного типа;

recycle:exclude_dir = /tmp 一 исключение директории заданного типа.

Заключение

Мы разобрали процесс установки и настройки программного обеспечения Samba. В данном мануале также указаны ресурсы, на которых можно более детально увидеть значение необходимых директив.

Ссылки по теме

  • Интеграция Active Directory
  • Samba/Контроллер домена Active Directory
  • NFS (Русский)

Состояние перевода: На этой странице представлен перевод статьи Samba. Дата последней синхронизации: 2014-10-08. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Samba — это реализация сетевого протокола SMB. Она облегчает организацию общего доступа к файлам и принтерам между системами Linux и Windows и является альтернативой NFS (Русский).

Contents

  • 1 Настройка сервера
    • 1.1 Установка
      • 1.1.1 Настройка межсетевого экрана
    • 1.2 Создание ресурсов для общего доступа
    • 1.3 Запуск служб
    • 1.4 Создание ресурсов общего доступа от имени обычного пользователя
    • 1.5 Добавление пользователя
    • 1.6 Смена пароля Samba-пользователя
  • 2 Настройка клиента
    • 2.1 Ручное монтирование
      • 2.1.1 Добавление ресурса в /etc/fstab
      • 2.1.2 Монтирование пользователями
    • 2.2 Имена хостов WINS
    • 2.3 Автоматическое монтирование
      • 2.3.1 smbnetfs
        • 2.3.1.1 Демон
      • 2.3.2 autofs
    • 2.4 Настройка файлового менеджера
      • 2.4.1 Nautilus, Nemo, Thunar и PCManFM
      • 2.4.2 KDE
      • 2.4.3 Другие графические окружения
  • 3 Решение проблем
    • 3.1 Проблемы подключения к Windows 7 — mount error(12): cannot allocate memory
    • 3.2 Проблемы получения доступа к ресурсам, защищенным паролем, из Windows
    • 3.3 Диалоговое окно появляется с большой задержкой
    • 3.4 Ошибка: Failed to retrieve printer list: NT_STATUS_UNSUCCESSFUL
    • 3.5 Не удается предоставить общий доступ к папке
    • 3.6 «Просмотр» сети выдает ошибку «Не удалось получить список ресурсов с сервера» (Failed to retrieve share list from server)
    • 3.7 Вы не являетесь владельцем каталога
    • 3.8 protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE
    • 3.9 Подключение к серверу завершилось неудачей: (Error NT_STATUS_UNSUCCESSFUL)
  • 4 Смотрите также
  • 5 Больше информации

Настройка сервера

Установка

Установите пакет samba.

Samba настраивается с помощью конфигурационного файла /etc/samba/smb.conf, который широко документирован на странице руководства smb.conf(5).

В связи с тем, что пакет samba поставляется без данного файла, вам нужно создать его перед запуском smbd.

Вы можете воспользоваться документированным примером, как в smb.conf.default из git-репозитория Samba для создания /etc/samba/smb.conf.

Примечание:

  • Файл настроек по умолчанию задаёт log file место, доступное только для чтения, что будет вызывать ошибки. Вы можете воспользоваться одним из следующих решений:
    • Задайте файлу регистрации расположение с возможностью записи: log file = /var/log/samba/%m.log
    • Используйте бекенд для нефайлового журналирования: замените logging = syslog на syslog only = yes или используйте logging = systemd
  • Если требуется; workgroup, указанная в секции [global], должна соответствовать домашней группе (workgroup) Windows (по умолчанию: WORKGROUP).

Совет: Каждый раз, когда вы изменяете файл smb.conf, запускайте команду testparm(1) для проверки файла на синтаксические ошибки.

Настройка межсетевого экрана

Если вы используете межсетевой экран, не забудьте открыть необходимые порты (как правило, 137-139 + 445). Для получения информации о полном списке портов, смотрите использование портов Samba.

Создание ресурсов для общего доступа

Откройте файл /etc/samba/smb.conf и прокрутите текст вниз до секции Share Definitions. В конфигурации по умолчанию автоматически предоставляется общий доступ к домашним каталогам всех пользователей. Также по умолчанию он предоставляется для принтеров. Здесь есть несколько закомментированных примеров конфигурации. Больше информации о доступных опциях для ресурсов с общим доступом можно найти на странице руководства smb.conf(5), которая также доступна в онлайн версии.

Со стороны Windows не забудьте изменить файл smb.conf для Windows Workgroup (в Windows по умолчанию: WORKGROUP).

Запуск служб

Примечание: В samba 4.8.0-1, службы были переименованы из smbd.service и nmbd.service в smb.service и nmb.service.

Для организации базовых возможностей обмена файлами при помощи SMB запустите/включите службы smb.service и nmb.service. Для получения дополнительной информации смотрите страницы справочного руководства (man) smbd и nmbd.

Совет: Вместо того, чтобы запускать службу сразу после каждой загрузки системы, вы можете включить smb.socket, благодаря чему она будет запускаться лишь при появлении первого входящего соединения. При этом не забудьте отключить службу smb.service

Создание ресурсов общего доступа от имени обычного пользователя

Примечание: Выполнение данных действий не является обязательным. Переходите к следующему разделу, если вам это не нужно

«Usershare» — это возможность, позволяющая обычным пользователям добавлять, изменять и удалять собственные ресурсы общего доступа.

Эта команда создает необходимый каталог в /var/lib/samba:

# mkdir -p /var/lib/samba/usershare

Эта команда создает группу sambashare:

Эта команда меняет владельца и группу каталога, который вы только что создали, на суперпользователя:

# chown root:sambashare /var/lib/samba/usershare

Эта команда меняет разрешения каталога usershares таким образом, что пользователи, входящие в группу sambashare, могут читать, записывать и выполнять файлы:

# chmod 1770 /var/lib/samba/usershare

Задайте эти переменные в конфигурационном файле smb.conf:

/etc/samba/smb.conf

...
[global]
  usershare path = /var/lib/samba/usershare
  usershare max shares = 100
  usershare allow guests = yes
  usershare owner only = yes
  ...

Добавьте вашего пользователя в группу sambashares. Замените ваше_имя_пользователя на имя вашего linux-пользователя:

# usermod -a -G sambashare *ваше_имя_пользователя*

Перезапустите службы smbd и nmbd.

Завершите сеанс и войдите в него вновь. Теперь у вас должна появиться возможность настраивать общий доступ samba, используя графический интерфейс. Например, в Thunar вы можете нажать правую кнопку мыши на любом каталоге и предоставить для него общий доступ в сети.

Добавление пользователя

Создайте учетную запись пользователя Linux для пользователя samba. При необходимости замените *пользователь_samba* на желаемое имя:

# useradd *пользователь_samba*

Затем создайте учетную запись пользователя Samba с тем же именем:

# pdbedit -a -u *пользователь_samba*

Смена пароля Samba-пользователя

Чтобы сменить пароль пользователя, используйте smbpasswd:

# smbpasswd *пользователь_samba*

Настройка клиента

Для доступа к файлам с использованием сервера Samba/SMB/CIFS необходим только пакет smbclient. Он доступен в официальных репозиториях.

Вы можете получать доступ и монтировать локально ресурсы, предоставленные для общего доступа другими компьютерами сети, используя графический интерфейс или интерфейс командной строки. Графический способ ограничен, так как большинство легковесных окружений рабочего стола не имеет родных средств настройки доступа к этим ресурсам.

Существует две «части» предоставления общего доступа. Первая лежит в основе механизма работы файловой системы, а вторая является интерфейсом, который позволяет пользователю выбирать монтируемые ресурсы общего доступа. В некоторых окружениях первая часть уже встроена.

Ручное монтирование

Установите пакет smbclient из официальных репозиториев. Если вы желаете получить более легкий подход и не нуждаетесь в возможности вывода списка общедоступных ресурсов, необходимо установить только cifs-utils, чтобы предоставить файл /usr/bin/mount.cifs.

Чтобы вывести список общедоступных ресурсов на сервере:

$ smbclient -L *hostname* -U%

Создать точку монтирования для ресурса:

# mkdir /mnt/*точка_монтирования*

Примонтируйте ресурс, используя в качестве образца файл mount.cifs. Не все опции из перечисленных ниже необходимы или хороши (например, password).

# mount -t cifs //*СЕРВЕР*/*имя_ресурса* /mnt/*точка_монтирования* -o user=*имя_пользователя*,password=*пароль*,workgroup=*рабочая_группа*,ip=*IP_сервера*

SERVER

имя_ресурса

точка_монтирования

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

-o [options]

Смотрите страницу руководства [mount.cifs(8)](https://jlk.fjfi.cvut.cz/arch/manpages/man/mount.cifs.8) для получения информации.

Примечание:

  • Воздержитесь от использования слэша / на конце. //*СЕРВЕР*/*имя_ресурса***/** не будет работать
  • Если примонтированный вами ресурс работает нестабильно или зависает (freeze), попробуйте включить другую версию протокола SMB, используя опцию vers=. Например, vers=2.0 для Windows Vista.

Добавление ресурса в /etc/fstab

Самый простой способ добавить запись в fstab — использовать что-то вроде этого:

/etc/fstab //*СЕРВЕР*/*имя_ресурса* /mnt/*точка_монтирования* cifs username=*имя_пользователя*,password=*пароль* 0 0

Однако, хранение паролей в легкочитаемом файле не рекомендуется! Более безопасным методом является использование файла полномочий. Например, создайте файл и выполните команду chmod 600 *имя_файла*, в результате чего только пользователь-владелец файла сможет читать и писать в него. Файл должен содержать следующую информацию:

/путь/к/полномочиям/sambacreds

username=*имя_пользователя*
password=*пароль*

а запись в вашем fstab должна выглядеть примерно так:

/etc/fstab //СЕРВЕР/ИМЯ_РЕСУРСА /mnt/*точка_монтирования* cifs credentials=*/путь/к/полномочиям/sambacreds* 0 0

При использовании systemd (современные установки) можно использовать опцию comment=systemd.automount, которая увеличивает скорость загрузки сервиса на несколько секунд. Также можно указать текущего пользователя и группу, чтобы сделать жизнь немного проще, используя опции uid и gid.

Важно: Использование опций uid и gid может вызвать ошибки ввода-вывода в программах, пытающихся получить данные с сетевых устройств
/etc/fstab //*СЕРВЕР*/*ИМЯ_РЕСУРСА* /mnt/*точка_монтирования* cifs credentials=*/путь/к/полномочиям*,comment=systemd.automount,uid=*имя_пользователя*,gid=*группа_пользователя* 0 0
Примечание: Пробелы в именах ресурсов должны быть заменены на 40 (восьмеричный ASCII-код для пробелов). Например, //*СЕРВЕР*/имя ресурса должно быть заменено на //*СЕРВЕР*/имя40ресурса в /etc/fstab

Монтирование пользователями

/etc/fstab //*СЕРВЕР*/*ИМЯ_РЕСУРСА* /mnt/*точка_монтирования* cifs users,credentials=*/путь/к/полномочиям*,workgroup=*рабочая_группа*,ip=*IP_сервера* 0 0
Примечание: Необходимо писать users (во множественном числе). Для других типов файловых систем, обрабатываемых командой mount, эта опция обычно имеет вид user, без «s«

Это позволит пользователям монтировать ресурс, если точка монтирования находится в каталоге, владельцами которого они являются, например, в свою домашнюю директорию. Чтобы пользователи могли монтировать и размонтировать ресурсы Samba в точках монтирования, владельцами которых они не являются, используйте smbnetfs или дайте им необходимые привилегии с помощью sudo.

Имена хостов WINS

Пакет smbclient предоставляет драйвер для использования имен хостов WINS. Чтобы его включить, добавьте “wins” в строку “hosts” файла /etc/nsswitch.conf.

Автоматическое монтирование

Есть несколько способов легко просматривать ресурсы общего доступа:

smbnetfs

Примечание: для smbnetfs необходима целая (нетронутая?) (intact) установка сервера Samba. Смотрите выше, как это сделать

Для начала удостоверьтесь, что вам доступны все ресурсы, которые вам нужны для монтирования:

$ smbtree -U *удаленный_пользователь*

Если это не работает, найдите и измените следующую строку в /etc/samba/smb.conf подобным образом:

Теперь перезапустите службы smbd.service и nmbd.service.

Если все работает, как и ожидалось, установите пакет smbnetfs из официальных репозиториев.

Затем добавьте следующую строку в файл /etc/fuse.conf:

и загрузите модуль ядра fuse:

Скопируйте каталог /etc/smbnetfs/.smb в вашу домашнюю директорию:

$ cp -a /etc/smbnetfs/.smb ~

Затем создайте ссылку на файл smb.conf:

$ ln -sf /etc/samba/smb.conf ~/.smb/smb.conf

Если для доступа к некоторым общим каталогам необходимы имя пользователя и пароль, отредактируйте файл ~/.smb/smbnetfs.auth, включив одну или несколько записей, как эта:

~/.smb/smbnetfs.auth

auth			"hostname" "имя_пользователя" "пароль"

Также возможно добавление записей для специфичных хостов, чтобы они были примонтированы smbnetfs, если это необходимо. Больше информации можно найти в ~/.smb/smbnetfs.conf.

Когда вы закончите настройку, необходимо выполнить

$ chmod 600 ~/.smb/smbnetfs.*

В противном случае smbnetfs пожалуется: ‘insecure config file permissions’.

Наконец, чтобы примонтировать сетевое окружение Samba в каталог по вашему выбору, выполните

$ smbnetfs *точка_монтирования*

Демон

Пакет в Arch Linux также поддерживает дополнительный «общесистемный» режим для smbnetfs. Чтобы его включить, вам необходимо выполнить указанные изменения в каталоге /etc/smbnetfs/.smb.

Затем вы можете запустить и/или включить в автозагрузку демон smbnetfs обычным способом. Общесистемной точкой монтирования является /mnt/smbnet/.

autofs

Смотрите статью Autofs для получения информации об автомонтировщике ядра (kernel-based) Linux.

Настройка файлового менеджера

Nautilus, Nemo, Thunar и PCManFM

Чтобы получить доступ к ресурсам samba через Nautilus, Nemo, Thunar или PCManFM, установите пакет gvfs-smb, доступный в официальных репозиториях.

Нажмите Ctrl+l и введите smb://*имя_сервера*/*ресурс* в панель адреса, чтобы получить доступ к ресурсу.

Примонтированный ресурс, вероятно, будет представлен в файловой системе по пути /run/user/*ваш_UID*/gvfs.

KDE

KDE имеет встроенную возможность просмотра ресурсов Samba, в этом случае нет необходимости в дополнительных пакетах. Однако, для графического интерфейса в Системных Настройках KDE установите пакет kdenetwork-filesharing из официальных репозиториев.

Если при использовании Dolphin вы получите ошибку «Time Out», необходимо раскомментировать и отредактировать эту строку в файле smb.conf: name resolve order = lmhosts bcast host wins

как показано на этой странице.

Другие графические окружения

Есть несколько полезных программ, но им могут требоваться пакеты, созданные для них. Это может быть сделано с помощью Arch package build system. Хорошая новость заключается в том, что они не нуждаются в особом окружении, устанавливаемом для их поддержки, так что они «тянут» за собой меньше пакетов.

  • pyneighborhood доступен в официальных репозиториях
  • Плагины LinNeighborhood, RUmba, xffm-samba для Xffm недоступен в официальных репозиториях или в AUR. Поскольку они не поддерживаются официально (или поддерживаются, но неофициально), они могут быть устаревшими и не работать в полной мере

Решение проблем

Проблемы подключения к Windows 7 — mount error(12): cannot allocate memory

Известная ошибка Windows 7 «mount error(12): cannot allocate memory» может быть исправлена установкой пары ключей в реестре системы Windows:

  • HKLMSYSTEMCurrentControlSetControlSession ManagerMemory ManagementLargeSystemCache (установить значение 1)
  • HKLMSYSTEMCurrentControlSetServicesLanmanServerParametersSize (установить значение 3)

В качестве альтернативы можно запустить командную строку от имени Администратора и выполнить следующее:

reg add "HKLMSYSTEMCurrentControlSetControlSession ManagerMemory Management" /v "LargeSystemCache" /t REG_DWORD /d 1 /f
reg add "HKLMSYSTEMCurrentControlSetServicesLanmanServerParameters" /v "Size" /t REG_DWORD /d 3 /f

Выполните одно из следующих действий, чтобы изменения вступили в силу:

  • Перезагрузите Windows
  • Перезапустите службу на сервере через services.msc
  • Выполните в командной строке net stop lanmanserver и net start lanmanserver; после остановки служба может перезапуститься автоматически

Примечание: Поиск решения в интернете подскажет другое решение, рекомендующее пользователям добавить ключ, изменяющий размер «IRPStackSize». Это неправильное решение для устранения проблемы в Windows 7. Не применяйте его

Исходная статья.

Проблемы получения доступа к ресурсам, защищенным паролем, из Windows

При проблемах получения доступа к ресурсам, защищенным паролем, из Windows попробуйте добавить следующее в файл /etc/samba/smb.conf:[1]

Обратите внимание, что это должно быть добавлено в локальный файл smb.conf, а не в файл сервера

[global]
# lanman fix
client lanman auth = yes
client ntlmv2 auth = no

Диалоговое окно появляется с большой задержкой

У меня была проблема, связанная с тем, что диалоговое окно для ввода пароля появлялось с задержкой около 30 секунд, когда я пытался установить соединение из Windows XP/Windows 7. Когда я посмотрел файл error.log на сервере, я увидел:

[2009/11/11 06:20:12,  0] printing/print_cups.c:cups_connect(103)
Unable to connect to CUPS server localhost:631 - Interrupted system call

Эта опция предотвращает поиск cups и файла /etc/printcap:

printing = bsd
printcap name = /dev/null

Ошибка: Failed to retrieve printer list: NT_STATUS_UNSUCCESSFUL

Если вы являетесь домашним пользователем, используете samba исключительно для организации общего доступа к файлам с сервера или NAS и не заинтересованы в организации общего доступа к принтерам, вы можете исправить эту ошибку, добавив следующие строки в файл /etc/samba/smb.conf:

load printers = No
printing = bsd
printcap name = /dev/null
disable spoolss = Yes

Перезапустите samba:

systemctl restart smbd

…проверьте ваши логи:

cat /var/log/samba/smbd.log

и больше ошибка не должна появляться.

Не удается предоставить общий доступ к папке

Проблема проявляется в том, что, когда вы пытаетесь предоставить общий доступ к папке через Dolphin (файловый менеджер), и вначале, вроде бы, все работает нормально, после перезапуска Dolphin иконка ресурса исчезла из папки, а в терминале (Konsole) вы видите следующий вывод:

‘net usershare’ returned error 255: net usershare: usershares are currently disabled

Для решения проблемы включите пользовательские общие ресурсы, как это описано в разделе #Создание ресурсов общего доступа от имени обычного пользователя.

«Просмотр» сети выдает ошибку «Не удалось получить список ресурсов с сервера» (Failed to retrieve share list from server)

И вы используете firewall (iptables), поскольку не доверяете вашей локальной (школа, университет, отель) сети. Это может происходить по следующей причине: когда smbclient просматривает локальную сеть, он посылает широковещательный запрос на udp-порт 137. Затем серверы сети отвечают вашему клиенту, но, поскольку исходный адрес ответа отличается от адреса назначения, который видел iptables при отправке запроса, iptables не признает ответ как «установленное соединение» или «относящийся к запросу», и, следовательно, пакет отбрасывается. Возможное решение — добавление:

iptables -t raw -A OUTPUT -p udp -m udp --dport 137 -j CT --helper netbios-ns

в вашу конфигурацию iptables.

Вы не являетесь владельцем каталога

Попробуйте просто перезагрузить систему.

protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE

Вероятно, клиент не имеет доступа к общим ресурсам. Удостоверьтесь, что IP-адрес клиента прописан в строке hosts allow = файла /etc/samba/smb.conf.

Подключение к серверу завершилось неудачей: (Error NT_STATUS_UNSUCCESSFUL)

Вероятно, вы указываете smbclient неправильное имя сервера. Чтобы узнать его, запустите на сервере команду hostnamectl и найдите строку «Transient hostname».

Смотрите также

  • Samba: An Introduction
  • Официальный сайт Samba

Больше информации

  • Samba Samba (German) (archlinux.de)
  • Ускорение работы Samba

Время на прочтение
9 мин

Количество просмотров 127K

Привет Хабр!
После активности шифровальщика Petya 27.06.2017, я отключил SMB1 он же CIFS, и получил производственное оборудование и сетевые МФУ которые не умеют работать на «новых» версиях SMB протокола.

Как тогда получать данные с «старых» устройств? Как показала практика, отдельная «машина» с Windows не выход, во время атаки кроме доменных «машин» пострадали также не включенные в домен, по этому, а также по лицензионным соображениям я решил использовать Linux.

Под катом находится пошаговая инструкция по установке и настройке файлового сервера SAMBA на базе CentOS 7:

— Анонимный доступ
— Аутентификация и авторизация
— Интеграция с Active Directory

Установка CentOS 7

Сервера работают под управлением VMware ESXi, и по этому я установил CentOS 7 1611 на VM, выделив 1 CPU, 1GB RAM и 3GB HDD.

LVM я не использую, SWAP раздел не создаю, на загрузочный раздел выделяю 500MB, а все остальное отдаю под корень файловой системы. В качестве файловой системы использую ext4.

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

Если вы новичок в линукс, делайте копии оригинальных файлов с конфигами, используйте команду cp.

cp /etc/somefile.conf /etc/somefile.conf.bak

Получение ip адреса по DHCP

Если по какой-то причине в сети нету DHCP сервера, вам стоит его поднять. Работать с большим количеством VM без DHCP не удобно.

Для принудительного обновления или получения ip адреса выполните команду

dhclient

Показать ip адрес

ifconfig
или
nmcli device show

YUM

CentOS 7 использует пакетный менеджер YUM. Шпаргалка по yum находится тут.

Если выход в интернет организован через прокси сервер, добавьте адрес прокси в файл конфигурации /etc/yum.conf, используйте редактор vi или следующую команду

echo proxy=http://your.proxy:8888 >> /etc/yum.conf

В случае использования логина и пароля для доступа к прокси серверу, добавьте следующие параметры:

proxy_username=yum-user
proxy_password=qwerty

Установка на VM агентов для взаимодействия с хост сервером

Для VMware ESXi необходимо установить open-vm-tools

yum install open-vm-tools

Для Hyper-V, hyperv-daemons

yum install hyperv-daemons

Установка обновлений

Очень важно установить все доступные обновления

yum update

Midnight Commander

Редактировать файлы без нормального редактора очень не удобно, и я предлагаю использовать mc и mcedit

yum install mc

Настройка сети

Для настройки статического ip адреса и имени хоста можно использовать утилиту nmtui

В командной строке список сетевых адаптеров можно получить командой

nmcli device status

Статический ip и gateway задается следующей командой, где «ens192» это имя сетевого адаптера

nmcli connection modify “ens192” ipv4.addresses “192.168.1.100/24 192.168.1.1”

Настройка FQDN

Пусть полное имя хоста будет ls01.fqdn.com, выполняем команду

hostnamectl set-hostname ls01.fqdn.com

Перезагружаем службу имен

systemctl restart systemd-hostnamed

Проверить результат можно следующими командами

hostnamectl status
hostname
hostname -s
hostname -f

ipv6

Если протокол ipv6 не используется, логично его отключить, для этого нужно добавить два параметра в файл /etc/sysctl.conf, выполните следующие команды или используйте редактор mcedit

echo net.ipv6.conf.all.disable_ipv6 = 1 >>  /etc/sysctl.conf
echo net.ipv6.conf.default.disable_ipv6 = 1 >>  /etc/sysctl.conf

Перезагрузите службу сети

service network restart

SELINUX

На данном этапе службу SELINUX необходимо отключить, проверить статус службы SELINUX можно командой

sestatus

Измените значение SELINUX в файле /etc/selinux/config на SELINUX=disabled затем перезагрузите сервер.

reboot

Вернусь к SELINUX в конце статьи.

SAMBA

Установка

yum install samba

Добавление службы в автоматический запуск

chkconfig smb on

Запуск службы и проверка состояния

service smb start
smbstatus

firewallD

По умолчанию CentOS 7 использует брандмауэр firewallD, состояние службы можно узнать командой

firewall-cmd --state

Для получения списка правил и сервисов используйте

firewall-cmd --list-all
firewall-cmd --list-services

Обратите внимание на список сервисов, если вы отключили протокол ipv6, логично также поступить и с dhcpv6-client

firewall-cmd -–permanent -–remove-service=dhcpv6-client

Создаем правило для SAMBA и перезагружаем

firewall-cmd --permanent --add-service=samba
firewall-cmd --reload

Общий ресурс с анонимным доступом

Создаем папку для ресурса /samba/guest

mkdir /samba
mkdir /samba/guest

Меняем владельца и назначаем права

chown nobody:nobody /samba/guest
chmod 777 /samba/guest

Редактируем файл конфигурации SAMBA /etc/samba/smb.conf

mcedit  /etc/samba/smb.conf

Меняем содержание оригинального файла на следующее

[global]
workgroup = WORKGROUP
security = user
map to guest = bad user
min protocol = NT1

[guest]
path = /samba/guest
guest ok = Yes
writable = Yes

На всякий случай я указал минимальную версию протокола SMB=NT1. Если вы укажите SMB2 или SMB3, клиенты с Windows XP и ниже не смогут получить доступ к ресурсам.

Проверка параметров и перезагрузка службы

testparm
service smb restart
smbstatus

Поздравляю вас, достигнут первый уровень посвящения. Общий ресурс с анонимным доступом настроен, будет работать долго и надежно. Но можно и нужно настроить еще несколько вещей.

Бантики

По умолчанию лог файлы находятся в папке /var/log/samba. При необходимости получить подробные логи, в раздел [global] необходимо добавить параметр log level = 2 или 3. По умолчанию используется значение 1, значение 0 отключает ведение логов.

[global]
log level = 2

Как вы можете знаете, предоставление доступа к файлам это только часть функционала SAMBA. Если на сервере будут только файловые ресурсы, службу печати логично отключить. В разделе [global] добавьте следующие параметры

[global]
load printers = no
show add printer wizard = no
printcap name = /dev/null
disable spoolss = yes

Конфигурация SAMBA находиться в каталоге /etc/samba, а логи в каталоге /var/log/samba
Мне удобней все инструменты держать по рукой, по этому я монтирую необходимые мне каталоги в /samba

Создаем каталоги, в которые будет все монтироваться

mkdir /samba/smbconf
mkdir /samba/smblogs

Редактируем конфиг файл /etc/fstab, я предполагаю что вы знаете за что отвечает fstab.

mcedit /etc/fstab

Добавляем следующие строки

/etc/samba /samba/smbconf none bind 0 0
/var/log/samba /samba/smblogs none bind 0 0

Монтируем без перезагрузки

mount -a

Подключение диска

Держать ресурс с общим доступом на системном диске без квоты, не лучший выбор. С квотами я решил не связываться, мне проще подключить отдельный «физический» диск.

Для получения списка устройств можно использовать команду lsblk

lsblk

Создание таблицы разделов на диске /dev/sdb

parted /dev/sdb mklabel msdos

или

parted /dev/sdb mklabel gpt

Подробную информация про gpt можно прочитать тут

Создание раздела на весь диск sdb, в лучших традициях жанра я решил сделать отступ 1MiB в начале диска.

parted /dev/sdb mkpart primary ext4 1MiB 100%

Создаем файловую систему ext4

mkfs.ext4 /dev/sdb1

Редактируем fstab

mcedit /etc/fstab

Добавляем еще одну строку

/dev/sdb1 /samba/guest ext4 defaults 0 0

Монтирование

mount –a

Проверяем результат

df -h

Назначение прав

chmod 777 /samba/guest

Подключение образа диска

Если вам не нужны большие объемы, и достаточно ресурса размером ххх мб, можно подключить образ диска из файла.

Создаем каталог для хранения образов

mkdir /samba/smbimg	

Создаем файл образа размером 100 мб

dd if=/dev/zero of=/samba/smbimg/100M.img bs=100 count=1M

Про команду dd много интересного можно прочитать тут

В варианте с образом я решил не создавать таблицу разделов, просто создаем файловую систему ext4.

mkfs.ext4 /samba/smbimg/100M.img

Редактируем fstab

mcedit /etc/fstab

Конфиг для монтирования образа

/samba/smbimg/100M.img /samba/guest ext4 defaults 0 0

Монтирование

mount -a

Проверяем результат

df -h

Назначение прав

chmod 777 /samba/guest

Подключение RAM диска

Для временных ресурсов где не нужен большой объем, как мне кажется RAM диск это наилучший вариант, очень быстро и просто настраивается, а скорость работы поражает воображение.

Редактируем fstab

mcedit /etc/fstab

Конфиг для RAM диска

none /samba/guest tmpfs defaults,size=100M 0 0

Монтирование

mount -a

Проверяем результат

df -h

Удаление старых файлов

В случае «файлопомойки» ресурсы нужно как-то освобождать, для этого можно использовать планировщик задач crontab

Просмотр заданий

crontab –l

Редактирование заданий

crontab –e	

Пример конфига:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=“”
HOME=/

#удалять файлы и каталоги каждый час
* 0-23 * * * rm –R /samba/guest/*

#Удалить только файлы старше 1 дня, запуск команды каждые 10 минут
0-59/10 * * * * find /samba/guest/* -type f -mtime +1 -exec rm –f {} ;

#удалить файлы старше 50 минут, запуск команды каждые 10 минут
0-59/10 * * * * find /samba/guest/* -type f -mmin +50 -exec rm -f {} ;

Выход из vi

<ESC>
:wq

Логи службы crontab находятся в файле /var/log/cron

Ограничение доступа к SAMBA по ip адресам

Если вам нужно ограничить доступ ко всем ресурсам SAMBA, добавьте ваши списки доступа в разделе global, а если необходимо ограничить только на определенный ресурс, в разделе этого ресурса.

Пример:

[global]
hosts allow = 192.168.1.100, 192.168.1.101
hosts deny = ALL

[guest]
hosts allow = 192.168.0.0/255.255.0.0
hosts deny = 10. except 10.1.1.1

Аутентификация и авторизация пользователей

Ограничение доступа по ip адресам не всегда удобно или возможно, тогда можно использовать логины и пароли.

Сначала необходимо создать локального пользователя в системе

adduser user1

Если пользователь будет работать только с SAMBA ресурсами, задавать ему пароль для системы нет необходимости. Пароль для системы и для SAMBA хранятся в разных файлах и могут отличаться.

Затем необходимо добавить системного пользователя в пользователи самбы и задать ему пароль

smbpasswd -a user1

По умолчанию для хранения паролей используется файл формата tdb, которые расположен в каталоге /var/lib/samba/private/

Изменить каталог расположения файла можно глобальным параметром passdb backend

[global]
passdb backend=tdbsam:/etc/samba/smbpassdb.tdb

tdb файлы были созданы для замены «устаревших» текстовых, если вы хотите использовать текстовые файлы, для этого используйте параметр passdb backend=smbpasswd в разделе global
passdb backend=smbpasswd:/etc/samba/smbpasswd

Затем укажите списки пользователей и групп для доступа к ресурсам

[guest]
path = /samba/guest
writable = no
read list = user1, @group2
write list = user2, user3

Интеграция с Active Directory

Также есть возможность получать информацию о пользователей из LDAP, но мне этот вариант не интересен и я сразу перехожу к AD. Подробная инструкция от Microsoft находится тут.

Для AD очень важна синхронизация времени, по этому стоит начать с этого.

Установка соответствующей службы

yum install ntp

Добавляем в конфиг файл /etc/ntp.conf сервера выполняющих роль домен контроллеров

mcedit /etc/ntp.conf

Пример:

server 192.168.1.10
server 192.168.1.20
server someserver.contoso.com

Добавляем службу ntp в автоматический запуск

chkconfig ntpd on

Запускаем службу

service ntpd start

Проверяем синхронизацию времени

ntpq –p

winbind

Для получения информации о пользователях из AD необходимо установить пакет samba-winbind

yum install samba-winbind

Добавляем службу в автоматический запуск

chkconfig winbind on

Запускаем службу

service winbind start

Добавление хоста в AD

Напомню что в начале даной инструкции задали имя хоста ls01.fqdn.com. Будем считать что полное имя домена fqdn.com, а короткое пусть будет fqdn_com

Для внесения всех необходимых параметров в конфигурационные файлы можно воспользоваться утилитой authconfig-tui, установите флажок Use Winbind, затем перейдите на следующее окно

Выберите модель безопасности ADS и укажите имена вашего домена. В поле домен контролер укажите “*”, это необходимо для автоматического поиска доступного домен контроллера. Затем нажмите ОК и закройте утилиту.

Для добавления хоста в AD используйте команду net ads join –U %username%, пользователь должен обладать правами на создание учетной записи ПК в домене

net ads join –U youruser

Если машина не добавляется в домен, добавьте FQDN имя хоста в файл /etc/hosts.
Я несколько раз все проверял, и в файл hosts я вносил изменения когда на этапе настройки сети задавал не полное имя хоста.

Для того чтобы вывести хост из домена используйте команду net ads leave –U %username%

Что делает утилита authconfig-tui?

Утилита добавляет параметры для подключения к AD в следующие файлы, параметров не много и при желании можно забить все руками.

/etc/krb5.conf

[libdefaults]
Default_realm = FQDN.COM

[realms]
FQDN.COM = {
kdc = *
}

/etc/nsswitch.conf

passwd: files sss winbind
shadow: files sss winbind
group: files sss winbind

/etc/samba/smb.conf

[global]
workgroup = FQDN_COM
password server = *
realm = FQDN.COM
security = ads
idmap config *: range = 16777216-33554431
template shell = /sbin/nologin
kerberos method = secrets only
winbind use default domain = false
winbind pffline logon = false

Вы могли заметить что данная утилита вносит заметно меньше параметров чем написано в инструкции от Microsoft или других инструкциях, но если так работать – то почему бы и нет?

Из инструкции Microsoft я добавляю следующие параметры в конфиг

[global]
domain master = no
local master = no
preferred master = no
os level = 0
domain logons = no

Настройка прав доступа на ресурс
В качестве примера и для наглядности рекомендую настроить ресурсы с разными правами на одну папку

[domain users read only]
path = /samba/guest
read list = «@fqdn_comdomain users»
force create mode = 777
directory mask = 777

[domain users writable]
path = /samba/guest
read list = «@fqdn_comdomain users»
write list = «@fqdn_comdomain users»
force create mode = 777
directory mask = 777

Перезапускаем службу samba

service smb restart

Проверяем

smbstatus

На скриншоте видно пользователя домена который находится в одной из общих папок

THE END

Список полезных ссылок:

Боремся с вирусами и инфраструктурой, или отключение SMB v1
Критическая уязвимость SambaCry: как защититься
How to Fix SambaCry Vulnerability (CVE-2017-7494) in Linux Systems

Yum, шпаргалка
Команда dd и все, что с ней связано

Using Samba, 2nd Edition
Включение Samba-сервера на базе Ubuntu в домен AD
Setting Up Samba and Configure FirewallD and SELinux to Allow File Sharing on Linux/Windows Clients

SELinux — описание и особенности работы с системой. Часть 1
SELinux — описание и особенности работы с системой. Часть 2

P.S.
Вернемся к SELINUX, чтобы SAMBA сервер мог предоставить доступ к любым каталогам необходимо выполнить следующие команды

setsebool -P samba_export_all_ro=1
setsebool -P samba_export_all_rw=1

К сожалению я так и не смог настроить работу winbind при включенном SELINUX, если подскажете как, я буду благодарен.

File shares are important for collaboration in any network. In this series of articles, I will show you how Samba can help you set up and serve file shares on Linux servers that are accessible from both Linux and Windows clients.

What is Samba?

Before we dive in and set up file shares, let’s cover what Samba is and what it can do for you.

Samba is a suite of applications that implements the Server Message Block (SMB) protocol. Many operating systems, including Microsoft Windows, use the SMB protocol for client-server networking. Samba enables Linux / Unix machines to communicate with Windows machines in a network.

Samba is open source software. Originally, Samba was developed in 1991 for fast and secure file and print share for all clients using the SMB protocol. Since then it has evolved and added more capabilities. Today Samba provides a suite of applications enabling seamless networking and interoperability between *nix and Windows.

Install the Samba packages

In this example, I’m using CentOS 8 with the hostname centos as my Samba server with an IP address of 192.168.1.122. The only package you will need to install is Samba, but I would like to include other client tools like samba-common and samba-client to test out our shares later.

# yum install samba samba-client samba-common -y

Create a directory to share and set its permissions

Once you’ve installed the required packages on the server, let’s create a directory and provide the required permissions on the directory. Create a directory called share on our root directory. You can name this directory anything you want to, and give it read, write and execute permissions. In this example, we will rely on the Samba configuration to control read, write access to the shared directory.

# mkdir /share

# chmod -R 777 /share

Configure a share

Now that we have installed necessary packages, it’s time to configure the shared directory. The configuration file is located under /etc/samba. Using your favorite text editor, append the following to /etc/samba/smb.conf. Leave the rest of the configuration file as is and this should be good for our setup.

# vim /etc/samba/smb.conf

[myshare]
        comment = My share
        path = /share
        read only = No

I have created a share called myshare and provided a path to the share, which in our case is located at /share. I then gave it read/write permissions with read only = No. There are many other configuration parameters that you may pass here, but for our setup these settings are good.

Check the Samba configuration

Samba provides a tool to check our configuration file. We can check if our configuration file has any errors by using the testparm command.

# testparm

Next, we need to create a Samba user account, so that Samba can communicate in Samba sessions with shares. The smbpasswd command has several functions depending on if you run the command as root or as a standard user. If you issue smbpasswd without any arguments as a non-root user, by default smbpasswd will change the current logged in user’s Samba password. When you run smbpasswd command as root, you will be able to create new Samba accounts. You can create a Samba account only for existing Linux user accounts.

# smbpasswd -a user

New SMB password:
Retype new SMB password:

We need to configure SELinux on the /share directory so the Samba service has proper permissions.

# semanage fcontext -a -t samba_share_t "/share(/.*)?"

# restorecon -R -v /share

Next, we need to enable and start the smb and nmb services.

# systemctl enable smb

# systemctl start smb

#systemctl enable nmb

#systemctl start nmb

If you have firewalld running on your server, we need to configure it to allow Samba traffic. You can do so by using the firewall-cmd command. Don’t forget to make those changes permanent and reload firewalld.

Now we have our services enabled and started. We can check to see if the share is available from the server by using the smbclient tool. This is the reason I have installed the Samba client tools on the local machine. The command uses the following syntax:

smbclient -U <samba username we created above> -L <ip address of server>

# smbclient -U user -L 192.168.1.122

Enter SAMBAuser's password:

Let’s check if we can access the share by issuing the following command on the server:

# smbclient -U user //192.168.1.122/myshare

Enter SAMBAuser's password:

Try "help" to get a list of possible commands.

smb: >

Wrap up

We have installed and configured the Samba file share service on our Linux server. We were able to access those shares on the local machine. In the next article, we will set up one Linux client and one Windows 10 client to access share we just created.

[ Want to learn more about Linux system administration? Take a Red Hat system administration course. ]

Понравилась статья? Поделить с друзьями:

А вот и еще наши интересные статьи:

  • Vs6621 инструкция на русском вакуумный упаковщик
  • Brow lamination kit инструкция по применению на русском
  • Bobovr z4 инструкция на русском пульт настройка
  • Должностная инструкция старшей медицинской сестры неврологического отделения
  • Сборка откатных ворот видео алютех инструкция

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии