Samba — это бесплатная и открытая реализация протокола сетевого обмена файлами SMB/CIFS, который позволяет конечным пользователям получать доступ к файлам, принтерам и другим общим ресурсам.
В этой статье мы покажем, как установить Samba в CentOS 7 и настроить его в качестве автономного сервера для совместного использования файлов в разных операционных системах по сети.
Мы создадим следующие общие ресурсы и пользователей Samba.
Пользователи:
Совместное использование:
Общий доступ к файлам будет доступен со всех устройств в вашей сети. Далее в этой статье мы также предоставим подробные инструкции о том, как подключиться к серверу Samba из клиентов Linux, Windows и macOS.
Прежде чем начать, убедитесь, что вы вошли в систему CentOS 7 как пользователь с привилегиями sudo.
Samba доступна из стандартных репозиториев CentOS. Чтобы установить его в вашей системе CentOS, выполните следующую команду:
sudo yum install samba samba-client
После завершения установки запустите службы Samba и включите их автоматический запуск при загрузке системы:
sudo systemctl start smb.service sudo systemctl start nmb.service
sudo systemctl enable smb.service sudo systemctl enable nmb.service
Служба smbd обеспечивает совместный доступ к файлам, услуги печати и прослушивает TCP порты 139 и 445. Служба nmbd предоставляет NetBIOS через IP — служб имен для клиентов и прослушивает UDP порт 137.
Теперь, когда Samba установлена и запущена на вашем компьютере CentOS, вам нужно настроить брандмауэр и открыть необходимый порты. Для этого выполните следующие команды:
firewall-cmd --permanent --zone=public --add-service=samba firewall-cmd --zone=public --add-service=samba
Для удобства обслуживания и гибкости вместо использования стандартных домашних каталогов ( /home/user) все каталоги и данные Samba будут расположены в каталоге /samba.
Начните с создания каталога /samba:
sudo mkdir /samba
Создайте новую группу с именем sambashare. Позже мы добавим всех пользователей Samba в эту группу.
sudo groupadd sambashare
Установите владельца группы каталогов /samba на sambashare:
sudo chgrp sambashare /samba
Samba использует пользователей Linux и систему разрешений групп, но имеет собственный механизм аутентификации, отличный от стандартной аутентификации Linux. Мы создадим пользователей, используя стандартный инструмент useradd в Linux, а затем установим пароль пользователя с помощью утилиты smbpasswd.
Как мы упоминали во введении, мы создадим обычного пользователя, который будет иметь доступ к своему личному общему файлу и одну административную учетную запись с правами чтения и записи для всех общих ресурсов на сервере Samba.
Чтобы создать нового пользователя с именем andreyex, используйте следующую команду:
sudo useradd -M -d /samba/andreyex -s /usr/sbin/nologin -G sambashare andreyex
В опции useradd имеют следующие значения:
Создайте домашний каталог пользователя и установите владельца каталога для пользователя andreyex и группы sambashare:
sudo mkdir /samba/andreyexsudo chown andreyex:sambashare /samba/andreyex
Следующая команда добавит бит setgid в каталог /samba/andreyex, чтобы вновь созданные файлы в этом каталоге наследовали группу родительского каталога. Таким образом, независимо от того, какой пользователь создаст новый файл, он будет иметь владельца группы sambashare. Например, если вы не установите права доступа к каталогу на 2770 а пользователь sadmin создаст новый файл, пользователь andreyex не сможет читать и записывать в этот файл.
sudo chmod 2770 /samba/andreyex
Добавьте учетную запись andreyex пользователя в базу данных Samba, установив пароль пользователя:
sudo smbpasswd -a andreyex
Вам будет предложено ввести и подтвердить пароль пользователя.
New SMB password: Retype new SMB password: Added user andreyex.
После того, как пароль установлен, включите учетную запись Samba, введя:
sudo smbpasswd -e andreyex
Enabled user andreyex.
Для создания другого пользователя повторите тот же процесс, что и при создании пользователя andreyex.
Далее давайте создадим пользователя и группу sadmin. Все члены этой группы будут иметь административные разрешения. Позже, если вы хотите предоставить права администратора другому пользователю, просто добавьте этого пользователя в группу sadmin.
Создайте пользователя с правами администратора, набрав:
sudo useradd -M -d /samba/users -s /usr/sbin/nologin -G sambashare sadmin
Команда выше также создаст группу sadmin и добавит пользователя sadmin и группу sambashare.
Установите пароль и включите пользователя:
sudo smbpasswd -a sadmin sudo smbpasswd -e sadmin
Далее создайте каталог общего доступа Users:
sudo mkdir /samba/users
Установите владельца каталога для пользователя sadmin и группы sambashare:
sudo chown sadmin:sambashare /samba/users
Этот каталог будет доступен всем аутентифицированным пользователям. Следующая команда настраивает доступ на запись/чтение для членов группы sambashare в каталоге /samba/users:
sudo chmod 2770 /samba/users
Откройте файл конфигурации Samba и добавьте разделы:
sudo nano /etc/samba/smb.conf
/etc/samba/smb.conf
[users] path = /samba/users browseable = yes read only = no force create mode = 0660 force directory mode = 2770 valid users = @sambashare @sadmin [andreyex] path = /samba/andreyex browseable = no read only = no force create mode = 0660 force directory mode = 2770 valid users = andreyex @sadmin
Опции имеют следующие значения:
После этого перезапустите сервисы Samba:
sudo systemctl restart smb.service sudo systemctl restart nmb.service
В следующих разделах мы покажем вам, как подключиться к общему ресурсу Samba из клиентов Linux, macOS и Windows.
Пользователи Linux могут получить доступ к общему ресурсу samba из командной строки с помощью файлового менеджера или смонтировать общий ресурс Samba.
smbclient это инструмент, который позволяет вам получить доступ к Samba из командной строки. Пакет smbclient не предустановлен на большинстве дистрибутивов Linux, так что вам нужно будет установить его с помощью менеджера пакетов распределения.
Для установки smbclient на Ubuntu и Debian, запустите:
sudo apt install smbclient
Для установки smbclient на CentOS и Fedora, выполните:
sudo yum install samba-client
Синтаксис для доступа к общему ресурсу Samba выглядит следующим образом:
mbclient //samba_hostname_or_server_ip/share_name -U username
Например, чтобы подключиться к общему ресурсу с именем andreyex на сервере Samba с IP-адресом 213.159.209.228 от имени пользователя andreyex, запустите
smbclient //213.159.209.228/andreyex -U andreyex
Вам будет предложено ввести пароль пользователя.
Enter WORKGROUP\andreyex's password:
После того, как вы введете пароль, вы войдете в интерфейс командной строки Samba.
Try "help" to get a list of possible commands. smb: \>
Чтобы смонтировать общий ресурс Samba в Linux, сначала необходимо установить пакет cifs-utils.
На Ubuntu и Debian запустите:
sudo apt install cifs-utils
На CentOS и Fedora работают:
sudo yum install cifs-utils
Далее создайте точку монтирования:
sudo mkdir /mnt/smbmount
Смонтируйте общий ресурс с помощью следующей команды:
sudo mount -t cifs -o username=username //samba_hostname_or_server_ip/sharename /mnt/smbmount
Например, чтобы смонтировать общий ресурс с именем andreyex на сервере Samba с IP-адресом 213.159.209.228 от имени пользователя andreyex до точки монтирования /mnt/smbmount, запустите:
sudo mount -t cifs -o username=andreyex //213.159.209.228/andreyex /mnt/smbmount
Вам будет предложено ввести пароль пользователя.
Password for andreyex@//213.159.209.228/andreyex: ********
Файлы, файловый менеджер по умолчанию в Gnome имеет встроенную опцию для доступа к общим ресурсам Samba.
В macOS вы можете получить доступ к общим ресурсам Samba либо из командной строки, либо с помощью стандартного менеджера файлов MacOS Finder. Следующие шаги показывают, как получить доступ к общему ресурсу с помощью Finder.
Пользователи Windows также могут подключаться к общему ресурсу Samba как из командной строки, так и из графического интерфейса. В приведенных ниже действиях показано, как получить доступ к общему ресурсу с помощью проводника Windows.
Из этого руководства вы узнали, как установить сервер Samba в CentOS 7 и создать различные типы общих ресурсов и пользователей. Мы также показали, как подключиться к серверу Samba с устройств Linux, macOS и Windows.
Я думаю, что в командах был пропущен пробел, они должны выглядеть так,
sudo systemctl start smb.service sudo systemctl start nmb.service
(У меня нормально проходит команда, # systemctl start smb nmb)
sudo systemctl enable smb.service sudo systemctl enable nmb.service
sudo mkdir /samba/andreyex sudo chown andreyex:sambashare /samba/andreyex
sudo smbpasswd -a sadmin sudo smbpasswd -e sadmin
sudo systemctl restart smb.service sudo systemctl restart nmb.service
Думаю, это просто опечатки. А статья очень понравилась, всё расписано очень подробно и толково.
Хотелось бы задать вопрос автору, если Вы владеете ситуацией, подскажите, пожалуйста, почему на сервере CentOS 7.6, Samba работает очень нестабильно. Без видимой причины пропадает доступ к ресурсам сервера, через Samba из сети с рабочей станции под Linux, затем, через несколько дней, также беспричинно появляется. С рабочей станции под Windows, доступ к ресурсам сервера не пропадает. Соединение из Dolphin, через SSH с рабочей станции под Linux есть, но время соединения больше в 30 — 40 раз по сравнению с тем, когда доступ, через Samba есть.
Ещё одна команда с пропущенным пробелом, очевидно должна быть,
firewall-cmd —permanent —zone=public —add-service=samba firewall-cmd —zone=public —add-service=samba
Но это же звучит, как масло масляное, или необходим такой формат ввода команды?
Нет, форматирование текста сбилось, плохо проверяли
Вчера получилось присоединить ресурс Samba в Fedora 29 через fstab. Может быть, кому-то это будет полезным. Для этого создал внутри своего домашнего каталога папку для монтирования ресурса и добавил запись в конец файла fstab, не стал создавать папку в папке /mnt, как рекомендуют многие блоггеры так, как она является системной и могут возникнуть проблемы с правами доступа, у меня они были, и я посчитал за лучшее создать её в своём домашнем каталоге. Вот эта запись,
# Мой сетевой диск
//192.168.8.3/share /home/user/server cifs user=логин,password=************,iocharset=utf8,file_mode=0777,dir_mode=0777 0 0
Здесь:
//192.168.8.3 — адрес вашего сервера
/share — папка на сервере с общим доступом (определена в файле /etc/samba/smb.conf сервера)
/home/user/server — полное имя папки, в которую монтируется ресурс сервера.
user=логин — логин пользователя
password=************ — пароль пользователя
iocharset=utf8 — локаль, в которой будет представлена информация
file_mode=0777 — маска chmod которая определяет права доступа для монтируемых файлов
dir_mode=0777 — то же, для монтируемых папок
0 0 опции монтирования, первый отключает функцию резервного копирования раздела, второй отключает проверку монтируемого раздела. Можно, конечно их включить, но это значительно удлиннит время старта системы.
*** Примечание. Сервер сети должен быть включён до включения рабочей станции, а выключен после её отключения, если этого не сделать, практически у всех Linux будет ошибка при её старте и зависание при выключении сервера.
Подскажите, пожалуйста, какие порты необходимо открыть на сервере CentOS 7 для Samba? В разных источниках разные сведения.
У меня открыты: 80/tcp, 137/tcp, 138/tcp, 139/tcp, 443/tcp, 445/tcp. Однако, в некоторых источниках указаны необходимые порты: 137/udp, 138/udp, 139/tcp, 443/tcp, 445/tcp. Ка будет правильно, нигде не нашёл.
137 tcp/udp NetBIOS-NS, 138 udp — NetBIOS-DGM, 139 tcp — NetBIOS-SSN, 445 tcp — Microsoft-DS, можно еще DNS — 53 tcp/udp
Молодец Андрей
отках в доступе, хоть и монтируется
Общая папка монтируется и видится из под Windows. Но вот файлы в ней из под windows не видно. Так же не возможно что либо записать в эту папку из под windows. Подскажите пожалуйста в какую сторону копать и что делать?
Смотрите в сторону прав на файлы и папки
Папки видятся, но зайти в них не получается — нет прав, обратитесь к системному администратору и т.д.
также в СРМ не подключается — Нет прав на запись во внешнее хранилище
Права на две папки уже поставил 777, владельцем пользователя, который должен к ним заходить, и всё равно.
Кроме разрешений для папок и файлов, необходима ещё настройка прав польхователя, пользователь должен входить в группу, которой разрешён доступ к папке, или файлу. И самое главное, необходимо установить клиентскую часть samba в Debian и его форках, клонах это делается командой sudo apt install smbclient, я обычно устанавливаю всё, командой, sudo apt install samba smbclient потому, что часто необходимо дать доступ к своим папкам и файлам.
Кроме добавления группы и пользователя в Linux, необходимо ещё добавить группу и пользователя в samba и назначить пароль пользователю:
Создаём группу:
sudo groupadd group_name
С правами суперпользователя добавляем нового пользователя
sudo useradd -c ‘комментарий’ -m user_name -g Group_name
Добавляем учетную запись пользователя samba
sudo smbpasswd -a user_name
Перезапускаем samba,
# service samba restart
или
# /etc/init.d/samba restart
или лучше перезагружаем сервер
После этого доступ должен появиться.
Ещё проблема возможна, если у вас не разрешена samba в firewall, или IPTables, а также закрыты порты. Это необходимо сделать.
Я открываю порты 80, 137, 138, 139, 443, 445, последний используется для работы .
Я использую firewall, к нему привык он для меня наиболее удобен и понятен