Настройка samba в ubuntu 16.04
Содержание:
- Введение
- Создание пользователей Samba
- Подключение Windows-клиентов
- Общие папки (Shared Folders)
- Дополнительные настройки vfs_recycle
- Подготовка к инсталляции
- ШАГ 6: Утилиты и диагностика Samba
- Авторизация с Active Directory
- Установка и настройка Samba, Winbind
- Настройка Samba в Ubuntu 16.04
- Установка
- Решение проблем
- Проблемы подключения к Windows 7 — mount error(12): cannot allocate memory
- Проблемы получения доступа к ресурсам, защищенным паролем, из Windows
- Диалоговое окно появляется с большой задержкой
- Ошибка: Failed to retrieve printer list: NT_STATUS_UNSUCCESSFUL
- Не удается предоставить общий доступ к папке
- Подключение к серверу завершилось неудачей: (Error NT_STATUS_UNSUCCESSFUL)
Введение
Ранее я рассказывал как сделать очень простую и быструю настройку самбы, когда доступ ограничивается либо внутренними пользователями самбы, либо с помощью ip. Если вас такой формат эксплуатации файлового сервера устраивает, то читать дальше не обязательно. Используйте приведенную статью, и у вас все получится очень быстро.
Для более сложной настройки самбы с авторизацией в Active Directory будем разбираться дальше. Существует как минимум 2 способа добавления linux сервера в домен Windows Server:
- Использовать известное и универсальное средство winbind.
- Либо воспользоваться менее популярным, но как мне кажется, более удобным и простым в настройке — sssd.
Пример добавления linux сервера в домен с помощью winbind я приводил в одной из своих статей по . Утилиту sssd я использовал, когда настраивал авторизацию в linux с помощью доменный учетных записей. В этой статье я воспользуюсь sssd для интеграции в виндовый домен.
Если у вас еще нет готового сервера, то можете воспользоваться моими материалами на эту тему — установка и настройка centos 7. Так же рекомендую настроить iptables для корректной работы сервера с доменом windows. Далее я не буду касаться этого вопроса, мы просто отключим фаерволл, потому что его настройка не тема этой статьи.
Настраивать файловую шару samba будем на сервере под управлением CentOS 7 следующей версии:
Вводные слова я все сказал. Начнем настройку самбы с ввода сервера в домен.
Создание пользователей Samba
Чтобы создать нового пользователя с именем используйте следующую команду:
Параметры имеют следующие значения:
-M -не создавать домашний каталог пользователя. Мы вручную создадим этот каталог. -d /samba/josh — установить домашний каталог пользователя в /samba/josh . -s /usr/sbin/nologin — отключить доступ к оболочке для этого пользователя. -G sambashare — добавить пользователя в группу sambashare .
Создайте домашний каталог пользователя и установите в качестве владельца каталога пользователя и группу :
Следующая команда добавит бит setgid в каталог чтобы вновь созданные файлы в этом каталоге наследовали группу родительского каталога. Таким образом, независимо от того, какой пользователь создаст новый файл, у него будет группа-владелец . Например, если вы не установите права доступа к а пользователь создает новый файл, пользователь не сможет читать / записывать в этот файл.
Добавьте запись пользователя в базу данных Samba, установив пароль пользователя:
Вам будет предложено ввести и подтвердить пароль пользователя.
После того, как пароль установлен для включения учетной записи Samba, запустите:
Для создания другого пользователя повторите тот же процесс, что и при создании пользователя .
Далее давайте создадим пользователя и группу . Все члены этой группы будут иметь административные разрешения. Позже, если вы хотите предоставить права администратора другому пользователю, просто добавьте этого пользователя в группу .
Создайте административного пользователя, набрав:
Приведенная выше команда также создаст группу и добавит пользователя в группы и .
Установите пароль и включите пользователя:
Затем создайте каталог доступа :
Установите право собственности на каталог для пользователя и группы :
Этот каталог будет доступен всем аутентифицированным пользователям. Следующая команда предоставляет доступ на запись / чтение членам группы в :
Подключение Windows-клиентов
Важно
В ОС семейства Windows активируйте учетную запись Администратора командой:
Подключение клиента с ОС Windows 7
Для подключения клиента с ОС Windows 7 войдите в систему под учётной записью Администратора и с помощью текстового редактора создайте текстовый файл с именем со следующим содержимым:
samba_7_2008_fix.reg
Windows Registry Editor Version 5.00 "DomainCompatibilityMode"=dword:00000001 "DNSNameResolutionRequired"=dword:00000000
Дважды кликните файл, чтобы импортировать его в реестр. После этого перезагрузитесь, чтобы изменения вступили в силу.
Теперь необходимо ввести компьютер в Samba-домен. Для этого перейдите в свойства компьютера, а оттуда в настройку удалённого доступа. Во вкладке «Имя компьютера» нажмите кнопку «Изменить».
Далее укажите, что компьютер является членом домена, и введите его имя:
Введите имя и пароль пользователя, созданного на Samba-сервере и входящего в группу администраторов домена:
После этого компьютер станет членом домена:
Подключение клиента с ОС Windows 10
Для подключения клиента с ОС Windows 10 войдите в систему под учётной записью Администратора и с помощью текстового редактора создайте текстовый файл с именем со следующим содержимым:
samba_7_2008_fix.reg
Windows Registry Editor Version 5.00 "DomainCompatibilityMode"=dword:00000001 "DNSNameResolutionRequired"=dword:00000000
Дважды кликните файл, чтобы импортировать его в реестр. После этого перезагрузитесь, чтобы изменения вступили в силу.
Отредактируйте файл на сервере, добавив в секцию «global»м следующее:
/etc/samba/smb.conf
... server max protocol = NT1 ...
После этого перезапустите сервис samba:
/etc/init.d/samba restart
samba | * samba -> stop: smbd ... samba | * samba -> stop: nmbd ... samba | * samba -> start: smbd ... samba | * samba -> start: nmbd ...
Теперь необходимо ввести компьютер в Samba-домен. Для этого перейдите в свойства компьютера, а оттуда в настройку удалённого доступа. Во вкладке «Имя компьютера» нажмите кнопку «Изменить».
Далее укажите, что компьютер является членом домена, и введите его имя:
Введите имя и пароль пользователя, созданного на Samba-сервере и входящего в группу администраторов домена:
После этого компьютер станет членом домена:
Подключение клиента с ОС Windows Server 2008
Для подключения клиента с ОС Windows 2008 войдите в систему под учётной записью Администратора и с помощью текстового редактора создайте текстовый файл с именем со следующим содержимым:
samba_7_2008_fix.reg
Windows Registry Editor Version 5.00 "DomainCompatibilityMode"=dword:00000001 "DNSNameResolutionRequired"=dword:00000000
Дважды кликните файл, чтобы импортировать его в реестр. После этого перезагрузитесь, чтобы изменения вступили в силу.
Теперь необходимо ввести компьютер в Samba)домен. Для этого перейдите в свойства компьютера, а оттуда в настройку удалённого доступа. Во вкладке «Имя компьютера» нажмите кнопку «Изменить».
Далее укажите, что компьютер является членом домена, и введите его имя:
Введите имя и пароль пользователя, созданного на Samba-сервере и входящего в группу администраторов домена:
После этого компьютер станет членом домена:
Так как мы интегрируем Samba с Active Directory, то и управление правами доступа на общие папки будет гораздо удобней назначать из ОС Windows.
Учетные записи которые могут настраивать права на общие папки, нуждаются в привилегиях SeDiskOperatorPrivilege. Чтобы посмотреть текущий список привилегий на хосте, выполним команду:
1 | net rpc rights list accounts-U’JAKONDA\jakonda’ |
Результат выполнения:
1 14 22 |
BUILTIN\Print Operators No privileges assigned BUILTIN\Account Operators No privileges assigned BUILTIN\Backup Operators No privileges assigned BUILTIN\Server Operators No privileges assigned SeMachineAccountPrivilege SeSecurityPrivilege No privileges assigned |
Выдадим разрешение SeDiskOperatorPrivilege группе «Администраторы домена» (Domain Admins), командой:
1 |
net rpc rights grant’JAKONDA\Domain Admins’SeDiskOperatorPrivilege-U’JAKONDA\jakonda’ ENTER JAKONDA\JAKONDA’SPASSWORD SUCCESSFULLY GRANTED RIGHTS. |
Теперь можно приступать к созданию общих папок. Для примера рассмотрим создание общей папки PUBLIC.
Создаем папку и выставляем права доступа на нее:
1 |
mkdir-psambapublic chown»администраторы домена»»пользователи домена»sambapublic chmod770sambapublic |
В файле конфигурации Samba (/etc/samba/smb.conf) описываем параметры общей папки:
1 |
PUBLIC path=sambapublic read only=no #АналогтехнологииAccess-based Enumeration(ABE—Перечислениенаоснованиидоступа) hide unreadable=yes #hide unwriteable files=yes |
Если необходимо сделать общую папку невидимой, то в параметрах необходимо в название общей папки символ $ — . В этом случае общая папка не будет видна при обзоре сети и войти в нее можно будет указав полный путь к ней.
Если необходимо задать наследование владельца от родительской папки для создаваемых файлов и папок, то делается это параметром: inherit owner = yes
Для применения изменений перечитываем конфигурацию Samba, командой:
1 | etcinit.dsmbd reload |
Далее все настройку прав доступа выполняем из оснастки Управление компьютером (Computer Manager).
Запускаем от администратора Управление компьютером (Computer Manager) (Меню ПУСК -> Выполнить -> compmgmt.msc). Подключится к другому компьютеру… и указываем компьютер
После подключения к системе, переходим в «Общие папки» — «Общие ресурсы» и видим нашу общую папку PUBLIC, далее привычным методом выставляем все необходимые права доступа на нее.
Так же через оснастку Управление компьютером (Computer Manager) удобно смотреть активные пользовательские сеансы и какие файлы открыты в общих папках. При необходимости можно завершить пользовательский сеанс или закрыть открытый файл.
Для тех у кого есть желание поблагодарить, могут воспользоватся формой ниже:
Дополнительные настройки vfs_recycle
Обращаю внимание на самый важный нюанс в работе сетевой корзины. У нее должны быть корректно выставлены права доступа
Чтобы все удаленные файлы гарантированно в нее попадали, у каждого пользователя должны быть права доступа к этой корзине. И вот тут возникают варианты:
- Для упрощенной настройки доступа к корзине, вы ее делаете в корне сетевой шары, чтобы все пользователи могли туда помещать свои файлы. В таком случае у всех возникает доступ ко всем удаленным файлам.
- Вы выносите сетевую корзину за пределы сетевой шары для более удобного использования сетевого пространства, либо по причине безопасности.
Расскажу подробнее о проблемах в каждом случае и расскажу, как пользуюсь корзиной сам. В первом случае возникает такая ситуация. Например, у вас есть сетевой путь /mnt/shara/документы/user1/file.txt. В директории документы много папок, как минимум по одной для каждого пользователя. Допустим, пользователь user1 первым удалил файл file.txt. В таком случае в корзину по адресу /mnt/shara/.trash/документы/user1/file.txt перемещается удаленный файл. Владельцем директории документы в корзине становится user1, так как он первый удалил файл и создал дерево директорий.
Когда другой пользователь удалит что-то в своей директории, у него может не оказаться прав доступа к к папке /mnt/shara/.trash/документы, чтобы положить туда свой удаленный файл. Вы это увидите в логе аудита. Не обязательно будет так, все зависит от конкретных настроек прав доступа. Я просто рассказываю, что так может быть и у меня часто бывает. Со временем может появиться какой-то новый пользователь с ограниченными правами, который тоже по какой-то причине не сможет положить свой удаленный файл в корзину.
Чтобы исправить такую ситуацию, на корзину нужно давать всем права доступа. Но корзина то у нас лежит в корне шары. Если сделать так, то каждый пользователь сможет увидеть удаленные файлы другого пользователя, к которым в обычном режиме у него нет прав доступа. Конечно, можно скрыть корзину следующим образом. Во-первых, у нее имя начинается с точки. В таком случае в свойствах шары можно указать параметр:
hide dot files = yes
Все директории с точкой в начале становятся скрытыми. Но это слабая защита. Пользователь вручную может включить у себя отображение скрытых директорий и увидеть спрятанную корзину. Такой вариант не надежный.
Для того, чтобы не решать эти проблемы с правами доступа в корзине, я ее убираю из шары и храню отдельно. Там я без проблем ставлю всем права доступа, не переживая, что кто-то получит доступ к файлам, ему не принадлежащим. Далее в зависимости от обстоятельств, я либо ничего не делаю, если достаточно доступа к корзине через консоль сервера. Если же этого не достаточно, то делаю отдельную шару, в которой в качестве сетевой папки указываю нашу корзину. И уже на уровне шары настраиваю права доступа к ней. В самом простом случае по ip ограничиваю доступ для системного администратора.
Возможно, существует более красивый и удобный способ разрешения данной проблемы. Я не занимался его поиском или настройкой. Обычно делаю так, как описал. Корзину для пользователей не афиширую, чтобы аккуратнее работали и не надеялись на то, что файл можно быстро и без проблем восстановить. Иначе могут задергать постоянными запросами на восстановление. Эту задачу обычно делегирую на системных администраторов на местах.
Подготовка к инсталляции
- Выберите имя хоста для вашего AD DC. Не рекомендуется использовать в качестве имен хостов такие идентификаторы, как PDC или BDC, унаследованные от NT4 . Эти сущности отсутствуют в AD, и такие названия вызывают путаницу;
-
Выберите DNS-имя для вашего доменного леса AD. Это имя также будет использовано как имя области (realm) Kerberos AD ;
Назначьте хосту полное доменное имя (FQDN), например dc2.samdom.example.com:
sudo hostnamectl set-hostname dc2.samdom.example.com
-
Отключите инструменты (например, resolvconf), которые автоматически обновляют файл настроек DNS /etc/resolv.conf.AD DC и члены домена обязаны использовать сервер DNS, способный разрешать зоны DNS AD . Если в сети нет других серверов DNS, то файл /etc/resolv.conf должен указывать адрес самого сервера:
-
Убедитесь, что файл /etc/hosts на DC корректно разрешает полное доменное имя (fully-qualified domain name, FQDN) и короткое имя хоста DC во внешний сетевой IP-адрес DC. Например:
Имя хоста не должно разрешаться в IP-адрес 127.0.0.1 или в любой другой IP-адрес, кроме используемого на внешнем сетевом интерфейсе DC.Для проверки правильности настроек можно использовать команду:
host `hostname`
ШАГ 6: Утилиты и диагностика Samba
# testparm Load smb config files from etcsambasmb.conf Loaded services file OK. Server role: ROLE_STANDALONE
-
smbget позволяет скачивать с windows, linux (д.уст. samba) файлы через SMB протокол. Скачать рекурсивно все директории и файлы:
smbget -Rr smb://ip_addr/share
-
smbclient — утилита для подключения к общедоступным папкам.
-
Отобразить общедоступные ресурсы на удаленном хосте:
smbclient -L ip_addrhostname
-
Посмотреть «шары» локально на стороне сервер
smbclient -L 127.0.0.1
-
Просмотреть папку vip под пользователем tatyana
$ smbclient \\\\10.26.95.220\\vip -U tatyana
-
Отобразить общедоступные ресурсы на удаленном хосте:
-
nbtscan
nbtscan ip_addr разрешить netbios-имя nbtscan не во всех системах ставится по-умолчанию, возможно, придётся доустанавливать вручную. nmblookup включен в пакет samba. nmblookup -A ip_addr
Авторизация с Active Directory
Разберем пример конфигурирования файлового сервера samba в домене Windows и настроим авторизацию пользователей на базе LDAP Active Directory.
Подключение к Active Directory
Введем наш сервер в домен. Сначала необходимо убедиться, что сервер доступен по своему доменному имени. Если серверу так и не было задано вменяемого имени, вводим команду:
hostnamectl set-hostname samba.dmosk.local
* где samba — имя сервера; dmosk.local — домен.
После добавляем в DNS наш сервер samba. Ждем минут 15, если у нас используется доменная инфраструктура с несколькими сайтами.
Устанавливаем необходимые компоненты:
dnf install samba-client samba-winbind samba-winbind-clients krb5-workstation
Открываем конфигурационный файл samba:
vi /etc/samba/smb.conf
В разделе редактируем следующие опции:
workgroup = DMOSK
security = ads
* где DMOSK — NETBIOS имя домена; ads — указывает, что для samba будет использоваться модель безопасности LDAP Active Directory.
Также в добавим следующие строки:
kerberos method = secrets and keytab
realm = DMOSK.LOCAL
winbind enum groups = Yes
winbind enum users = Yes
idmap config * : rangesize = 1000000
idmap config * : range = 1000000-19999999
idmap config * : backend = autorid
* где:
- kerberos method — метод проверки kerberos. В данном примере сначала используется secretts.tdb, а затем системная таблица ключей.
- realm — сервер Active Directory. В нашем примере прописан домен, так как по нему можно обратиться к любому из серверов AD.
- winbind enum groups — задает пределы перечисления групп через setgrent(), getgrent() и endgrent().
- winbind enum users — задает пределы перечисления пользователей через setpwent(), getpwent()и endpwent().
- idmap config * : rangesize — определяет количество доступных uids и gids в каждом доменном диапазоне.
- idmap config * : range — определяет доступные совпадающие диапазоны uid и gid, для которых серверная часть является авторитетной.
- idmap config * : backend — задает idmap плагин для использования в качестве SID/uid/gid подсистемы
Вводим сервер в домен:
net ads join -U Administrator@dmosk.local
* где Administrator — учетная запись пользователя AD с правами на ввод компьютеров в домен; dmosk.local — наш домен.
Мы должны увидеть, примерно, следующее:
Using short domain name — DMOSK
Joined ‘SAMBA’ to dns domain ‘dmosk.local’
Разрешаем автозапуск winbind и стартуем его:
systemctl enable winbind —now
Выбираем профиль для аутентификации:
authselect select winbind —force
Проверяем, что наш сервер может получить список пользователей Active Directory:
wbinfo -u
… и групп:
wbinfo -g
Если мы увидели список пользователей и групп, то присоединение сервера к домену завершено.
Настройка шары
Открываем конфигурационный файл samba:
vi /etc/samba/smb.conf
Создаем шару:
comment = Folder for AD users
path = /data/ad
public = no
writable = yes
read only = no
guest ok = no
valid users = «@DMOSK\Domain Users» «@DMOSK\Domain Admins»
create mask = 0777
directory mask = 0777
force create mode = 0777
force directory mode = 0777
inherit owner = yes
* в данном примере мы будем шарить папку на сервере /data/ad; мы предоставим доступ всем пользователям групп Domain Users и Domain Admins домена DMOSK.
Создаем каталог и задаем права:
mkdir /data/ad
chmod 777 /data/ad
Теперь можно перезапустить самбу:
systemctl restart smb
Пробуем подключиться к серверу. У нас должна появиться еще одна папка ad.
Права ACL
И в продолжение разговора о интеграции с AD, попробуем настроить ACL для более тонкого предоставления прав доступа.
Для этого снова открываем конфигурационный файл samba:
vi /etc/samba/smb.conf
В раздел добавим:
acl compatibility = auto
… и создадим новую шару:
comment = Folder for AD ACL
path = /data/adacl
public = no
writable = yes
read only = no
guest ok = no
admin users = «@DMOSK\Domain Admins»
inherit acls = yes
inherit owner = yes
inherit permissions = yes
map acl inherit = yes
* где admin users — пользователи, которые могут менять права папки; inherit acls — наследование acl прав; inherit permissions — наследование прав от папки родителя; map acl inherit — использовать ли схему контроля доступа, хранимую в Windows ACL.
Создаем каталог и задаем права:
mkdir /data/adacl
chmod 777 /data/adacl
Перезапускаем самбу:
systemctl restart smb
Подключаемся к нашей созданной общей папке. Кликаем по ней правой кнопкой мыши — выбираем свойства. На вкладке «Безопасность» мы можем менять права:
Установка и настройка Samba, Winbind
Устанавливаем необходимые пакеты:
1 | apt-get install samba cifs-utils winbind libnss-winbind-y |
Конфигурационный файл Samba (/etc/samba/smb.conf) приводим к виду:
1 |
global #ОБЩИЕПАРАМЕТРЫСЕТЕВОЙШАРЫ realm=JAKONDA.LOCAL workgroup=JAKONDA security=ads encrypt passwords=yes netbios name=DATASTORE1 server string=%hserver domain master=no local master=no preferred master=no os level= domain logons=no dns proxy=no socket options=TCP_NODELAY unix charset=UTF-8 dos charset=866 #Конфигурацияпо-умолчаниюдлялокальныхпользователейигрупп idmap config*backend=tdb idmap config*range=3000-7999 #КонфигурациядлядоменаJAKONDAиегопользователейигрупп idmap config JAKONDAbackend=rid idmap config JAKONDArange=10000-999999 #ПАРАМЕТРЫWINBIND winbind enum users=yes winbind enum groups=yes winbind refresh tickets=yes winbind use default domain=yes #ПОДКЛЮЧЕНИЕМОДУЛЕЙVFS(Virtual File System) vfs objects=acl_xattr #ПоддержкаWindows ACLs mapacl inherit=yes store dos attributes=yes #ОТКЛЮЧЕНИЕПОДДЕРЖКИСЕТЕВЫХПРИНТЕРОВ load printers=no show add printer wizard=no printcap name=devnull disable spoolss=yes #ПАРАМЕНТЫЛОГИРОВАНИЯ log level=vfs1 |
Обращаю внимание что в параметрах realm, workgroup указываем название своего домена. Подробное описание используемых параметров можно по этой ссылке. . Так как в Linux по-умолчанию установлен лимит на 1024 одновременно открытых файлов, а в Windows он 16384, поэтому увеличим лимит в Debian до значения 16384
Так как в Linux по-умолчанию установлен лимит на 1024 одновременно открытых файлов, а в Windows он 16384, поэтому увеличим лимит в Debian до значения 16384.
В файле (/etc/security/limits.conf) дописываем в самый конец строки:
1 |
*-nofile16384 root-nofile16384 |
Перезагружаем систему для применения изменений:
1 | reboot |
Выполним проверку конфигурации на ошибки, командой:
1 | testparm |
1 |
Load smb config files frometcsambasmb.conf Loaded services file OK. Server roleROLE_DOMAIN_MEMBER Press enter to seeadump of your service definitions |
Проверка заданной конфигурации Samba правильная, ошибок и предупреждений нет, а поэтому можно вводить систему в домен, выполняем команду:
1 | net ads join-Ujakonda@jakonda.local |
Вывод об успешном присоединении к домену:
1 |
Enter jakonda@jakonda.local’s password: Using short domain name — JAKONDA Joined ‘DATASTORE1’ to dns domain ‘jakonda.local’ |
Теперь чтобы система использовала winbind для поиска пользователей и групп в файле (/etc/nsswitch.conf) к параметрам passwd, group добавляем параметр winbind:
1 7 |
#Example configuration of GNU Name Service Switch functionality. #Ifyou have the`glibc-doc-reference’ and `info’packages installed,try #`info libc»Name Service Switch»‘forinformation about this file. passwdcompat winbind shadowcompat gshadowfiles hostsfiles dns networksfiles protocolsdb files servicesdb files ethersdb files rpcdb files netgroupnis |
Перезапускаем службы Samba и Winbind для применения изменений:
1 |
etcinit.dsmbd restart etcinit.dwinbind restart |
Проверим, что Winbind установил доверительные отношения с Active Directory, выполним команду:
1 |
wbinfo-t |
Для проверки видит ли Winbind пользователей и группы из Active Directory, выполним команды:
1 |
wbinfo-u wbinfo-g |
Если в ходе выполнения данных команд в консоль были выведены пользователи и группы из Active Directory, то это значит что Winbind работает правильно.
Так же удостоверится в корректной работе Winbind можно запросив данные по доменному пользователю (прим. ранее созданного пользователя datastore1):
1 |
id datastore1 uid=14389(datastore1)gid=10513(пользователидомена)группы=10513(пользователидомена),14389(datastore1),10001(BUILTIN\users) |
Настройка Samba в Ubuntu 16.04
Ставим Samba и если у кого нет — пакет gksu, для возможности запуска окна настроек Samba:
sudo apt install samba system-config-samba gksu
Теперь переходим к настройке сервера
Создаём резервную копию оригинального файла конфигурации Samba:
sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
После этого, создаём свой файл конфигурации:
sudo gedit /etc/samba/smb.conf
Указываем глобальные настройки файлового сервера.
Копируем в файл эти строки:
workgroup = WORKGROUP server string = Samba Server %v netbios name = SambaSrv security = user map to guest = bad user name resolve order = bcast host wins support = no dns proxy = no
Что мы скопировали?
А вот что:
workgroup - рабочая группа, в которой находятся все наши машины server string - строка коментария, где %v - это макрос, который будет заменён на версию Самбы netbios name - имя Самба-сервера, которое будет отображаться в Windows security - по умолчанию выполнять аутентификацию на уровне пользователя map to guest - это инструкция демону, которая сообщает, что делать с запросами. bad user - означает, что запросы с неправильным паролем будут отклонены, если такое имя пользователя существует name resolve order - очередность разрешения IP адресов по NetBIOS имени. bcast - означает отправить в локальную сеть широковещательный запрос. Если все компьютеры между которыми планируется взаимодействие находятся в одной сети этот вариант оптимальный. wins support - не устанавливайте этот параметр в yes если у вас нет нескольких подсетей и вы не хотите, чтобы ваш nmbd работал как WINS сервер
Сохраняем изменения.
Теперь даём общий доступ к папке в Ubuntu, чтобы машины с Windows могли ею пользоваться.
Общий доступ к папке в Ubuntu
Создаём папку, к которой будем открывать доступ для всех:
sudo mkdir -p /samba/obmen
Ключ -p разрешает создавать вложенные папки.
~ — создать каталоги в домашней папке пользователя
После того как папка создана, нужно сделать для нее правильные права доступа. Следующие команды разрешают доступ к папке для всех и делают владельцем nobody:
cd /samba sudo chmod -R 0755 obmen sudo chown -R nobody:nogroup obmen/
Внесём изменения в файл настройки samba, добавив следующий раздел:
path = /samba/obmen browsable = yes writable = yes guest ok = yes read only = no
Теперь ваш конфигурационный файл должен выглядеть вот так:
workgroup = WORKGROUP server string = Samba Server %v netbios name = SambaSrv security = user map to guest = bad user name resolve order = bcast host dns proxy = no path = /samba/obmen browsable =yes writable = yes guest ok = yes read only = no
Чтобы применить изменения, перезапустите сервер Samba:
sudo service smbd restart
С анонимным доступом к общему ресурсу мы закончили.
Теперь можем проверить доступность этой папки в Windows-машине.
Нажимаем Win+R и в адресной строке пишем:
Скрин показывает, что доступ получен, и получен он без вводи логин и пароля, то есть анонимно.
Защищенный общий доступ к папке Ubuntu
Чтобы расшарить папку для Windows в Ubuntu, к которой будут иметь доступ только пользователи из определенной группы, создадим отдельную папку и опишем ее в файле настройки Samba в Ubuntu.
Создаем папку:
sudo mkdir -p /samba/obmen/sec
Устанавливаем права, чтобы доступ к папке получали только пользователи из группы securedgroup.
Создаем группу:
sudo addgroup securedgroup
Настраиваем права:
cd /samba/obmen sudo chmod -R 0770 sec/ sudo chown -R alex:securedgroup sec
Добавляем настройки в конфигурационный файл samba
Открываем конфигурационный файл
sudo gedit /etc/samba/smb.conf
И добавляем в него этот блок:
path = /samba/obmen/sec valid users = @securedgroup guest ok = no writable = yes browsable = yes
Перезапускаем сервер Samba.
Теперь доступ к общей папке в Ubuntu могут получить только пользователи группы securegroup.
Чтобы проверить как это работает добавим пользователя alex в нашу группу:
sudo usermod -a -G securedgroup alex
Чтобы пользователь мог работать с расшаренными папками в Ubuntu, он должен быть в базе данных Samba.
Создаём для него пароль Samba:
sudo smbpasswd -a alex
После ввода команды будет предложено ввести новый пароль.
Для применения изменений перезагружаем файловый сервер.
Для того, чтобы доступ к папке мог получить только определённый пользователь, заменяем @securedgroup на имя пользователя.
Вот и всё
10 октября 2016, 18:32
Александр
Linux
13304
Из этой категории
- Установка LAMP-сервера и phpMyAdmin в Debian 10Установка XAMPP в Debian 10 (Ubuntu) LinuxОтключить пароль SUDO в LinuxBash-команды для экономии времениУстанавливаем Brackets в Debian 10Работа с пакетами при помощи dpkgНастройка Linux Debian 10Скачиваем сайты целиком — утилита wget15 специальных символов-команд, которые нужно знать для работы в Bash Linux42 команды Linux
Установка
Для своих серверов я всегда использую Centos, но здесь пришлось сделать исключение и выбрать Debian, т.к. Samba, доступная из основных пакетов в Centos, не может выступать в роли AD.
Вариантов установки на Centos было несколько: собрать из пакетов (что на продуктивном сервере совсем некошерно) или установить из сторонних репозиториев (например, tissamba), но решил попробовать Debian, т.к. не хотелось искать обходные пути.
Но и с Debian оказался нюанс, т.к. в основных стабильных репозиториях не было нужной мне версии. Тем не менее, вариант установки из официальных репозиториев, пусть и тестовых, меня более чем устроил.
Каждый волен выбирать тот вариант установки и тот дистрибутив, который подходит для той или иной задачи, но стоит учесть будущие возможные обновления и связанные с этим проблемы при использовании сборки из исходников или чужого репозитория, который не будет работать, например.
Зависимости, необходимые для Samba AD в Debian:
В оф. документации указаны пакеты python-gpgme python3-gpgme для зависимостей, но в Debian 10 его больше нет, так что его я не устанавливал.
Решение проблем
Проблемы подключения к Windows 7 — mount error(12): cannot allocate memory
Известная ошибка Windows 7 «mount error(12): cannot allocate memory» может быть исправлена установкой пары ключей в реестре системы Windows:
- (установить значение )
- (установить значение )
В качестве альтернативы можно запустить командную строку от имени Администратора и выполнить следующее:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v "LargeSystemCache" /t REG_DWORD /d 1 /f reg add "HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" /v "Size" /t REG_DWORD /d 3 /f
Выполните одно из следующих действий, чтобы изменения вступили в силу:
- Перезагрузите Windows
- Перезапустите службу на сервере через services.msc
- Выполните в командной строке и ; после остановки служба может перезапуститься автоматически
Примечание: Поиск решения в интернете подскажет другое решение, рекомендующее пользователям добавить ключ, изменяющий размер «IRPStackSize». Это неправильное решение для устранения проблемы в Windows 7. Не применяйте его
Проблемы получения доступа к ресурсам, защищенным паролем, из Windows
Обратите внимание, что это должно быть добавлено в локальный файл smb.conf, а не в файл сервера
# 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
Для решения проблемы включите пользовательские общие ресурсы, как это описано в разделе .
И вы используете firewall (iptables), поскольку не доверяете вашей локальной (школа, университет, отель) сети. Это может происходить по следующей причине: когда smbclient просматривает локальную сеть, он посылает широковещательный запрос на udp-порт 137. Затем серверы сети отвечают вашему клиенту, но, поскольку исходный адрес ответа отличается от адреса назначения, который видел iptables при отправке запроса, iptables не признает ответ как «установленное соединение» или «относящийся к запросу», и, следовательно, пакет отбрасывается. Возможное решение — добавление:
iptables -t raw -A OUTPUT -p udp -m udp --dport 137 -j CT --helper netbios-ns
в вашу конфигурацию iptables.
Подключение к серверу завершилось неудачей: (Error NT_STATUS_UNSUCCESSFUL)
Вероятно, вы указываете неправильное имя сервера. Чтобы узнать его, запустите на сервере команду и найдите строку «Transient hostname».