Состояние перевода: На этой странице представлен перевод статьи 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 — это возможность, позволяющая обычным пользователям добавлять, изменять и удалять собственные ресурсы общего доступа.
- Создайте каталог, в котором будут храниться описания пользовательских общих ресурсов:
# mkdir /var/lib/samba/usershares
- Создайте группу для пользователей, которые смогут создавать общие ресурсы:
# groupadd -r sambashare
- Измените владельца каталога на
root, а группу наsambashare:# chown root:sambashare /var/lib/samba/usershares
- Измените разрешения каталога
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) имеет недостаток, заключающийся в фильтрации файлов с непечатаемыми символами.
Папка, к которой открыт доступ через графический интерфейс, недоступна для гостей
Этот раздел предполагает, что:
- Общие папки настроены, как описано в разделе #Создание ресурсов общего доступа от имени обычного пользователя
- Общая папка создана через графический интерфейс и не пользователем root
- Включен гостевой доступ для папки
- Служба 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
-
Client Access — Browsing SMB shares
- Ubuntu Clients
- Windows Clients (XP,Server,Vista, Win7)
-
Samba Client — Manual Configuration
- Connecting using CIFS
- 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.
Настройка общих папок
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, а поле пароля оставляем пустым.
При подключении к 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/publicWarning
To use Samba’s guest account to do anything concerning printing from Windows clients do not setguest only = yesin the[global]section. The guest account seems to cause problems when runningcupsaddsmbsometimes when trying to connect from Windows machines. See below, too, when we talk aboutcupsaddsmband the problems that can arise. Use a dedicated printer user, likeprinteruser,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/publicAt 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.confhosts: files dns winsConfiguring 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.confServerName 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.convsapplication/octet-stream application/vnd.cups-raw 0Edit /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.typesapplication/octet-streamCUPS needs to be started on boot, and started immediately.
root #rc-update add cupsd default
root #/etc/init.d/cupsd restartInstalling 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 restartRemember to adjust to what you have. Be sure to have the name (
-poption) right (the name you set above during the Samba configuration!) and to put in the correctusb:/dev/usb/blah,parallel:/dev/blahor 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-windowsNow 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 HPDeskJet930CInstead of HPDeskJet930C the
-aoption use be specified. This will «export all known printers»:
root #cupsaddsmb -H PrintServer -U root -h PrintServer -aWarning
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
-hand-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 substitutePrintServerwithlocalhostand 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 = userin 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 и начнем настройку.
Создание пользователя
Создадим простого пользователя для дальнейшего тестирования подключения к настроенным директориям.
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.
Доступ к созданной директории есть.
Настройка доступа по учетным данным пользователя
Следующим этапом станет настройка доступа к директории по комбинации логин/пароль.
Для начала создадим директорию, которая станет тестовой, и назначим ей полный права:
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-пользователя
- 1.1 Установка
- 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.3.1 smbnetfs
- 2.4 Настройка файлового менеджера
- 2.4.1 Nautilus, Nemo, Thunar и PCManFM
- 2.4.2 KDE
- 2.4.3 Другие графические окружения
- 2.1 Ручное монтирование
- 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. ]






























