View this page
Toggle table of contents sidebar
One of the most common ways to network Ubuntu and Windows computers is to configure Samba as a file server. It can be set up to share files with Windows clients, as we’ll see in this section.
The server will be configured to share files with any client on the network without prompting for a password. If your environment requires stricter Access Controls see Share Access Control.
Warning
If you use Samba and authd at the same time, you must specify user and group mapping. Otherwise, you will encounter permission issues due to mismatched user and group identifiers.
If you are using Samba with authd, you should follow the instructions in the steps for the server guide in the authd documentation instead.
Install Samba¶
The first step is to install the samba
package. From a terminal prompt enter:
That’s all there is to it; you are now ready to configure Samba to share files.
Configure Samba as a file server¶
The main Samba configuration file is located in /etc/samba/smb.conf
. The default configuration file contains a significant number of comments, which document various configuration directives.
First, edit the workgroup
parameter in the [global] section of /etc/samba/smb.conf
and change it to better match your environment:
Create a new section at the bottom of the file, or uncomment one of the examples, for the directory you want to share:
[share] comment = Ubuntu File Server Share path = /srv/samba/share browsable = yes guest ok = yes read only = no create mask = 0755
-
comment
A short description of the share. Adjust to fit your needs. -
path
The path to the directory you want to share.Note
This example uses
/srv/samba/sharename
because, according to the Filesystem Hierarchy Standard (FHS),/srv
is where site-specific data should be served. Technically, Samba shares can be placed anywhere on the filesystem as long as the permissions are correct, but adhering to standards is recommended. -
browsable
Enables Windows clients to browse the shared directory using Windows Explorer. -
guest ok
Allows clients to connect to the share without supplying a password. -
read only
determines if the share is read only or if write privileges are granted. Write privileges are allowed only when the value is no, as is seen in this example. If the value is yes, then access to the share is read only. -
create mask
Determines the permissions that new files will have when created.
Create the directory¶
Now that Samba is configured, the directory needs to be created and the permissions changed. From a terminal, run the following commands:
sudo mkdir -p /srv/samba/share sudo chown nobody:nogroup /srv/samba/share/
The -p
switch tells mkdir
to create the entire directory tree if it doesn’t already exist.
Enable the new configuration¶
Finally, restart the Samba services to enable the new configuration by running the following command:
sudo systemctl restart smbd.service nmbd.service
Warning
Once again, the above configuration gives full access to any client on the local network. For a more secure configuration see Share Access Control.
From a Windows client you should now be able to browse to the Ubuntu file server and see the shared directory. If your client doesn’t show your share automatically, try to access your server by its IP address, e.g. \\192.168.1.1
, in a Windows Explorer window. To check that everything is working try creating a directory from Windows.
To create additional shares simply create new [sharename]
sections in /etc/samba/smb.conf
, and restart Samba. Just make sure that the directory you want to share actually exists and the permissions are correct.
The file share named [share]
and the path /srv/samba/share
used in this example can be adjusted to fit your environment. It is a good idea to name a share after a directory on the file system. Another example would be a share name of [qa]
with a path of /srv/samba/qa
.
Further reading¶
-
For in-depth Samba configurations see the Samba how-to collection
-
The guide is also available in printed format.
-
O’Reilly’s Using Samba is another good reference.
-
The Ubuntu Wiki Samba page.
Настройка Samba-сервера в Ubuntu 24.04 позволяет организовать общий доступ к файлам и папкам между компьютерами с разными операционными системами (Windows, macOS, Linux) в вашей сети. Вот подробная инструкция:
Откройте терминал и выполните следующие команды для установки Samba и необходимых инструментов:
sudo apt update sudo apt install samba samba-common python3-dnspython
2. Настройка Samba (Редактирование файла smb.conf):
Основной файл конфигурации Samba находится по адресу /etc/samba/smb.conf. Рекомендуется создать резервную копию этого файла перед внесением изменений:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup
Теперь откройте файл smb.conf для редактирования с помощью текстового редактора (например, nano или vim):
sudo nano /etc/samba/smb.conf
Основные параметры конфигурации:
[global]
секция: Содержит глобальные настройки Samba-сервера. Вот пример основных параметров:
[global] workgroup = WORKGROUP ; Замените на имя вашей рабочей группы Windows server string = Samba Server %v ; Описание сервера (отображается в сети Windows) netbios name = UBUNTU-SAMBA ; Имя сервера в сети (можно изменить) security = user ; Режим безопасности (user - требуется аутентификация) map to guest = bad user ; Что делать, если пользователь не найден name resolve order = bcast host lmhosts wins ; Порядок разрешения имен dns proxy = no ; Отключить проксирование DNS # Добавьте следующие строки для поддержки SMB3 (рекомендуется) server min protocol = SMB3 client min protocol = SMB3
Создание общего ресурса (Share): Чтобы предоставить доступ к определенной папке, необходимо создать секцию для этого ресурса. Например, для создания общего ресурса для папки /home/user/share
, добавьте следующие строки в конец файла smb.conf:
[share] comment = Shared Folder path = /home/user/share ; Замените на путь к вашей папке browseable = yes ; Отображать ресурс в сетевом окружении writable = yes ; Разрешить запись guest ok = no ; Запретить гостевой доступ read only = no ; Разрешить чтение и запись create mask = 0777 ; Права для создаваемых файлов directory mask = 0777 ; Права для создаваемых директорий valid users = user ; Замените на имя пользователя, которому разрешен доступ
- path: Укажите абсолютный путь к папке, которую вы хотите сделать общедоступной.
- browseable: Определяет, будет ли ресурс виден в сетевом окружении.
- writable: Разрешает или запрещает запись в общий ресурс.
- guest ok: Разрешает или запрещает гостевой доступ (без аутентификации). Рекомендуется установить no для безопасности.
- read only: Определяет, будет ли ресурс доступен только для чтения.
- create mask и directory mask: Устанавливают права доступа для создаваемых файлов и директорий. 0777 предоставляет полные права (чтение, запись, выполнение) для всех пользователей. Будьте осторожны с этим значением и используйте более строгие права, если это необходимо.
- valid users: Укажите список пользователей, которым разрешен доступ к ресурсу. Замените user на имя пользователя Ubuntu.
3. Создание пользователя Samba:
Samba использует отдельную базу данных пользователей. Необходимо создать пользователя Samba и установить для него пароль. Имя пользователя должно совпадать с именем пользователя Ubuntu.
sudo smbpasswd -a user ; Замените 'user' на имя вашего пользователя Ubuntu
Вам будет предложено ввести пароль для пользователя Samba. Этот пароль может отличаться от пароля пользователя Ubuntu.
4. Настройка прав доступа к папке:
Убедитесь, что у пользователя Ubuntu есть права на чтение и запись в папку, которую вы сделали общедоступной.
sudo chown user:user /home/user/share ; Замените 'user' и '/home/user/share' sudo chmod 777 /home/user/share ; Предоставляет полные права (будьте осторожны)
5. Перезапуск Samba:
После внесения изменений в файл smb.conf, необходимо перезапустить Samba-сервер, чтобы изменения вступили в силу:
sudo systemctl restart smbd sudo systemctl restart nmbd
6. Настройка брандмауэра (UFW):
Если у вас включен брандмауэр UFW, необходимо разрешить Samba-трафик:
sudo ufw allow samba sudo ufw enable
7. Подключение к общему ресурсу с Windows:
Откройте «Проводник» (File Explorer) в Windows. В адресной строке введите \\<IP-адрес_сервера>
или \\<имя_сервера>
. Например, \\192.168.1.100
или \\UBUNTU-SAMBA.
Вам будет предложено ввести имя пользователя и пароль Samba. Используйте имя пользователя и пароль, которые вы создали с помощью smbpasswd. Вы должны увидеть общий ресурс share.
8. Подключение к общему ресурсу с macOS:
В Finder выберите «Go» (Переход) -> «Connect to Server» (Подключиться к серверу). Введите smb://<IP-адрес_сервера>
или smb://<имя_сервера>
. Например, smb://192.168.1.100
или smb://UBUNTU-SAMBA
. Нажмите «Connect» (Подключиться). Вам будет предложено ввести имя пользователя и пароль Samba. Выберите общий ресурс share.
9. Подключение к общему ресурсу с Linux:
Использование командной строки:
sudo mount -t cifs //192.168.1.100/share /mnt -o user=user,password=password
Замените 192.168.1.100, share, user и password на соответствующие значения. /mnt — это точка монтирования (папка, куда будет подключен общий ресурс). Убедитесь, что эта папка существует.
Использование графического интерфейса (Nautilus, Thunar, etc.):
Откройте файловый менеджер. В адресной строке введите smb://<IP-адрес_сервера>/<имя_ресурса>. Например, smb://192.168.1.100/share. Вам будет предложено ввести имя пользователя и пароль Samba.
Важные замечания по безопасности:
- Не используйте guest ok = yes в производственной среде. Это открывает общий ресурс для неавторизованного доступа.
- Используйте строгие права доступа к файлам и папкам. Не предоставляйте пользователям ненужные права.
- Регулярно обновляйте Samba. Устанавливайте последние обновления безопасности.
- Рассмотрите возможность использования Kerberos для аутентификации. Kerberos обеспечивает более безопасную аутентификацию, чем стандартная аутентификация Samba.
- Используйте шифрование SMB3 (server min protocol = SMB3, client min protocol = SMB3). Это обеспечивает шифрование трафика между клиентом и сервером.
Устранение неполадок:
Не удается подключиться к общему ресурсу:
- Убедитесь, что Samba-сервер запущен.
- Проверьте правильность IP-адреса или имени сервера.
- Убедитесь, что брандмауэр не блокирует Samba-трафик.
- Проверьте правильность имени пользователя и пароля Samba.
- Проверьте права доступа к папке.
- Не удается записать файлы в общий ресурс:
- Убедитесь, что у пользователя есть права на запись в общий ресурс (writable = yes).
- Проверьте права доступа к папке.
- Проверьте значения create mask и directory mask.
Общий ресурс не отображается в сетевом окружении:
- Убедитесь, что browseable = yes.
- Проверьте настройки name resolve order.
Следуя этим инструкциям, вы сможете успешно настроить Samba-сервер в Ubuntu 24.04 и организовать общий доступ к файлам и папкам в вашей сети. Не забывайте о безопасности и принимайте необходимые меры для защиты ваших данных.
Установка и настройка файлового сервера Samba на Ubuntu или Debian
Обновлено:
Опубликовано:
Используемые термины: Samba, Ubuntu, SMB.
Samba позволяет настроить файловое хранилище различных масштабов — от малых офисов для крупных организаций. В данной инструкции мы рассмотрим процесс настройки файлового сервера. Сначала мы выполним установку и базовую настройку с предоставлением гостевого доступа. После будет приведены примеры разграничения доступа по пользователям, группам и пользователям Active Directory. Инструкция протестирована на системах Ubuntu и Debian.
Подготовка сервера к работе
Настройка времени
Брандмауэр
Установка и запуск сервиса Samba
Создание первой шары с гостевым доступом
Настройка доступа к папке по логину и паролю
Доступ к папке для пользователей и групп
Помещение удаленных файлов в сетевую корзину
Настройка клиентов для подключения к шаре
Windows
Linux
Некоторые полезные опции Samba
hosts allow
hosts deny
interfaces
force user/group
include
Читайте также
Подготовка сервера
Прежде чем перейти к установке файлового серера, выполним подготовку.
1. Время
Для корректного отображения дат, необходимо позаботиться о синхронизации времени. Для этого будем использовать демон chrony. Установим его:
apt update
apt install chrony
Разрешим автозапуск сервиса:
systemctl enable chrony
2. Брандмауэр
По умолчанию, в системах на базе Debian брандмауэр разрешает все соединения. Но если в нашем случае мы используем брандмауэр, необходимо открыть порты:
iptables -I INPUT -p tcp —dport 445 -j ACCEPT
iptables -I INPUT -p udp —dport 137:138 -j ACCEPT
iptables -I INPUT -p tcp —dport 139 -j ACCEPT
* где порт 445 используется для samba, а порты 137, 138 и 139 — для работы NetBIOS (использование имени компьютера для доступа).
Применяем настройки:
apt install iptables-persistent
netfilter-persistent save
Установка выполняется из репозитория одной командой:
apt update
apt install samba
И проверим, что сервис запустился:
systemctl status smbd
Проверяем, что сервер самба позволяет к себе подключиться. Для этого можно с компьютера обратиться к серверу по SMB, например, на компьютере с Windows это можно сделать из проводника, прописав путь к серверу с двух слэшей:
* в данном примере мы подключаемся к серверу Samba с IP-адресом 192.168.1.15.
Если мы настроили сервер правильно, система откроет пустую папку. На данном этапе проверка закончена и мы можем переходить к созданию первой шары.
Разберем самый простой пример предоставления доступа к папке — анонимный доступ всем пользователям без запроса пароля.
Открываем на редактирование конфигурационный файл samba:
vi /etc/samba/smb.conf
И добавляем настройку для общей папки:
[Общая папка]
comment = Public Folder
path = /data/public
public = yes
writable = yes
read only = no
guest ok = yes
create mask = 0777
directory mask = 0777
force create mode = 0777
force directory mode = 0777
* где:
- [Общая папка] — имя общей папки, которое увидят пользователи, подключившись к серверу.
- comment — свой комментарий для удобства.
- path — путь на сервере, где будут храниться данные.
- public — для общего доступа. Установите в yes, если хотите, чтобы все могли работать с ресурсом.
- writable — разрешает запись в сетевую папку.
- read only — только для чтения. Установите no, если у пользователей должна быть возможность создавать папки и файлы.
- guest ok — разрешает доступ к папке гостевой учетной записи.
- create mask, directory mask, force create mode, force directory mode — при создании новой папки или файла назначаются указанные права. В нашем примере права будут полные.
Создаем каталог на сервере и назначим права:
mkdir -p /data/public
chmod 777 /data/public
Применяем настройки samba, перезагрузив сервис:
systemctl restart smbd
Пробуем подключиться к папке. Мы должны зайти в нее без необходимости ввода логина и пароля.
Теперь создадим каталог, в который вход будет разрешен только авторизованным пользователям.
Открываем конфигурационный файл samba:
vi /etc/samba/smb.conf
Добавляем настройку для новой папки:
[Папка сотрудников]
comment = Staff Folder
path = /data/staff
public = no
writable = yes
read only = no
guest ok = no
create mask = 0777
directory mask = 0777
force create mode = 0777
force directory mode = 0777
* эти настройки, во многом, похожи на те, что использовались в примере выше. Вот основные различия:
- path = /data/staff — используем новый путь до папки.
- public = no — запрещаем публичный доступ.
- guest ok = no — не разрешаем гостевое подключение.
Создаем каталог для новой папки:
mkdir /data/staff
Задаем права на созданный каталог:
chmod 777 /data/staff
Создаем пользователя в системе Linux:
useradd staff1
* где staff1 — имя пользователя.
Задаем пароль для пользователя:
passwd staff1
Теперь создадим пользователя в samba:
smbpasswd -a staff1
Перезапускаем samba:
systemctl restart smbd
Пробуем зайти на сервер — общую папку мы должны открыть без авторизации, а при попытке открыть папку сотрудников должно появиться окно ввода логина и пароля.
Если мы авторизованы на компьютере, с которого пытаемся подключиться к серверу, под той же учетной записью, что создали для доступа к папке, samba может и не потребовать аутентификации.
Теперь создадим папку, доступ к которой будут иметь ограниченное количество пользователей.
Открываем конфигурационный файл samba:
vi /etc/samba/smb.conf
Добавляем настройку для новой папки:
[Приватная папка]
comment = Private Folder
path = /data/private
public = no
writable = no
read only = yes
guest ok = no
valid users = admin, staff2, staff3, @privateusers
write list = admin, staff2
create mask = 0777
directory mask = 0777
force create mode = 0777
force directory mode = 0777
inherit owner = yes
* стоит обратить внимание на следующие настройки:
- path = /data/private — используем новый путь до папки.
- writable = no и read only = yes — в данном примере мы разрешим запись в каталог только некоторым пользователям. Поэтому общие настройки, разрешающие запись в папку, должны быть запрещены.
- valid users — список пользователей, которым разрешено подключаться к каталогу. В данном примере разрешения работают для пользователей admin, staff2 и staff3, а также для всех, кто входим в группу privateusers.
- write list — список пользователей, которые имеют доступ к папке на чтение и запись. В данном примере мы разрешаем это только для пользователей admin и staff2.
- inherit owner — опция позволяем включить наследование владельца при создании папок и файлов.
* если мы хотим, чтобы доступ к каталогу был полный у определенных пользователей (без разделения на тех, кто может только читать и тех, кто может также писать в папку), то опцию write list можно не указывать, а опции writable и read only оставить как в примерах выше.
Создаем каталог для новой папки:
mkdir /data/private
Задаем права на созданный каталог:
chmod 777 /data/private
Для применения настроек перезапускаем samba:
systemctl restart smbd
Создать группу пользователей можно командой:
groupadd privateusers
Добавить ранее созданного пользователя в эту группу:
usermod -a -G privateusers staff1
Подробнее о работе с учетными записями в Linux.
Проверяем возможность работы с новым каталогом.
Сетевая корзина
При удалении файлов из общей папки, данные удаляются навсегда. Но мы можем настроить сетевую корзину — скрытый каталог, в который будут перемещаться удаляемые с самбы объекты.
Открываем конфигурационный файл:
vi /etc/samba/smb.conf
Создаем шару:
[Recycle]
comment = Snap Directories
path = /data/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
* где:
- vfs objects = recycle — использовать подсистему recycle.
- recycle:repository — где хранить удаленные объекты. В данном примере удаленные файлы попадут в скрытый каталог .recycle к котором создастся каталог с именем пользователя, удалившего файл или папку.
- recycle:keeptree — удалять объекты с сохранение дерева каталогов.
- recycle:touch — изменить ли дату изменения файла при его перемещении в корзину.
- recycle:versions — при удалении файлов с совпадающими именами, добавлять номер версии.
- recycle:maxsize — не помещать в корзину файлы, размер которых больше заданного параметра (в байтах). В данном примере, помещать файлы любого размера.
- recycle:exclude — исключить файлы.
- recycle:exclude_dir — исключить каталог.
Создаем каталог и задаем права:
mkdir /data/recycle
chmod 777 /data/recycle
Перезапускаем самбу:
systemctl restart smbd
Пробуем зайти в сетевой каталог Recycle и создать, а после удалить файл. Он должен оказаться к скрытой папке .recycle.
Для автоматической чистки сетевой корзины можно создать скрипт:
mkdir /scripts
vi /scripts/cleanrecycle.sh
#!/bin/bash
recyclePath=»/data/recycle/.recycle»
maxStoreDays=»30″
/usr/bin/find $recyclePath -name «*» -ctime +$maxStoreDays -exec rm {} \;
* в данном скрипте мы ищем все файлы в каталоге /data/recycle/.recycle, которые старше 30 дней и удаляем их.
Разрешаем запуск скрипта:
chmod +x /scripts/cleanrecycle.sh
Создаем задание в планировщике:
crontab -e
0 5 * * * /scripts/cleanrecycle.sh
* в данном примере мы будем запускать скрипт по очистке сетевой корзины каждый день в 05:00.
Подключение к шаре
Теперь разберем примеры подключения к нашим шарам из разных систем.
Windows
Для разового подключения можно использовать проводник, прописав в нем адрес сервера через косые линии:
Для подключения сетевого диска, который будет автоматически создаваться при запуске системы, в проводнике сверху нажимаем Простой доступ — Подключить как диск:
В открывшемся окне прописываем путь до сетевой папки и выбираем имя диска:
Сетевой диск настроен.
Но мы может сделать те же действия из командной строки:
net use x: \\samba.dmosk.local\AD ACL /persistent:yes
* где x: — имя сетевого диска; \\samba.dmosk.local\AD ACL — путь до сетевого каталога; persistent:yes — указывает на то, что нужно восстанавливать данный диск каждый раз при входе в систему.
Linux
Монтирование
В Linux мы можем монтировать удаленный каталог с помощью команды mount, например:
mount -t cifs «//192.168.1.15/ad» /mnt -o user=dmosk
* где 192.168.1.15 — IP-адрес сервера; mnt — каталог, куда монтируем сетевую шару; dmosk — пользователь, под которым выполняем подключение к сетевому каталогу.
** в систему должен быть установлен пакет cifs-utils.
Подробнее, процесс монтирования описан в инструкции Как в Linux монтировать шару CIFS.
SMB Browser
Также мы можем увидеть содержимое удаленных папок на samba при помощи клиента smb. Для начала установим данного клиента:
а) на Red Hat / CentOS / Fedora:
yum install samba-client
б) на Debian / Ubuntu / Mint:
apt install samba-client
После вводим команду:
smbclient -L 192.168.1.15 -U staff@dmosk.local
* где 192.168.1.15 — сервер samba, к которому мы пытаемся подключиться; staff@dmosk.local — учетная запись, под которой выполняется подключение.
… мы получим список каталогов, которые расшарены на сервере.
Также мы можем подключиться к конкретной папке, например:
smbclient \\\\192.168.1.15\\ad -U staff@dmosk.local
Мы подключимся клиентом samba — можно выполнить запрос на показ содержимого:
smb: \> ls
Или полный список возможных команд:
smb: \> help
Некоторые опции Samba
Рассмотрим некоторые полезные опции, которые могут пригодится при настройке Samba.
1. hosts allow
Параметр задает список разрешенных хостов или сетей, с которых можно подключаться к серверу. Если его прописать в секцию с настройкой шары, то он будет действовать только для нее, если прописать в [global], то для всех общих папок.
Пример использования параметра.
hosts allow = comp1, 192.168.1., 192.168.160.0/255.255.252.0
* в нашем примере мы разрешим доступ только для компьютера comp1, компьютеров из сетей 192.168.1.0/24 и 192.168.160.0/22.
2. hosts deny
Параметр аналогичный hosts allow, только он наоборот — запрещает доступ для хостов и сетей. Например:
hosts deny = comp2, 192.168.2., 192.168.164.0/255.255.252.0
hosts deny = ALL EXCEPT 192.168.3.
3. interfaces
По умолчанию samba использует все сетевые интерфейсы, кроме локальной петли (127.0.0.1). Параметр interfaces позволит указать, на каком сетевом адаптере файловый сервер должен принимать запросы. Пример:
interfaces = ens32 192.168.1.15/24 192.168.2.15/255.255.255.0
4. Force User/Group
Опции force user и force group позволяют задать пользователя и группу, от которых будет работать подключение пользователя к samba. Параметр может оказаться полезным для создания шары из каталога с уже назначенным владельцем, которого мы не хотим менять.
Прописывается для шары:
force user = apache
force group = apache
* данная настройка позволит подключаться к шаре под пользователем apache.
5. Include
Позволяет подключить дополнительный файл с конфигурацией.
include = /etc/samba/conf.d/shares.conf
* данная опция будет дополнительно подключать конфигурацию из файла /etc/samba/conf.d/shares.conf (прописывается полный путь).
Читайте также
Возможно, эти инструкции будут также Вам полезны:
1. Как в Linux монтировать шару CIFS.
2. Как настроить автоматическое монтирование дисков в Linux.
3. Настройка дисковых квот в Linux.
4. Установка и настройка samba в Linux CentOS.
Введение
В этом мануале разберем последовательную установку и настройку программного обеспечения 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 = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
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 = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
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 = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
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. В данном мануале также указаны ресурсы, на которых можно более детально увидеть значение необходимых директив.
Samba is a free/open source and popularly used software for sharing files and print services between Unix-like systems including Linux and Windows hosts on the same network.
In this guide, we will show how to setup Samba4 for basic file sharing between a Ubuntu systems and Windows machines. We will cover two possible scenarios: anonymous (unsecure) as well as secure file sharing.
Suggested Read: How to Install Samba4 on CentOS/RHEL 7 for File Sharing on Windows
Note that starting from version 4.0, Samba can be used as an Active Directory (AD) domain controller (DC). We have organized a special series for setting up Samba4 Active Directory Domain Controller, which comprises of key topics under Ubuntu, CentOS, and Windows.
- Setting Up Samba4 Active Directory Domain Controller
Install and Configure Samba in Ubuntu
Samba server is available to install from the default Ubuntu repositories using the apt package manager tool as shown.
$ sudo apt install samba samba-common python-dnspython
Once samba server installed, now its time to configure samba server as: unsecure anonymous and secure file sharing.
For this, we need to edit the main Samba configuration file /etc/samba/smb.conf (which explain various configuration directives).
First backup the original samba configuration file as follows.
$ sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.orig
Afterwards, we’ll proceed to configure samba for anonymous and secure file sharing services as explained below.
Important: Before moving any further, ensure that the Windows machine is in the same workgroup which will be configured on the Ubuntu server.
Check Windows Machine WorkGroup Settings
Login into your Windows machine, right click on “This PC” or “My Computer” → Properties → Advanced System Settings → Computer Name to verify the workgroup.
Alternatively, open the command prompt and view it by running the command below and look for “workstation domain”.
>net config workstation
Once you know your Windows workgroup its time to move ahead and configure samba server for file sharing.
Anonymous Samba File Sharing
First start by creating a shared samba directory where the files will be stored.
$ sudo mkdir -p /srv/samba/anonymous_shares
Then set the appropriate permissions on the directory.
$ sudo chmod -R 0775 /srv/samba/anonymous_shares $ sudo chown -R nobody:nogroup /srv/samba/anonymous_shares
Now open the configuration file.
$ sudo vi /etc/samba/smb.conf OR $ sudo nano /etc/samba/smb.conf
Next edit or modify the directive settings as described below.
global] workgroup = WORKGROUP netbios name = ubuntu security = user [Anonymous] comment = Anonymous File Server Share path = /srv/samba/anonymous_shares browsable =yes writable = yes guest ok = yes read only = no force user = nobody
Now verify current samba settings by running the command below.
$ testparm
Samba Current Configuration Settings
Load smb config files from /etc/samba/smb.conf rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384) WARNING: The "syslog" option is deprecated Processing section "[printers]" Processing section "[print$]" Processing section "[Shares]" Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions # Global parameters [global] netbios name = UBUNTU server string = %h server (Samba, Ubuntu) server role = standalone server map to guest = Bad User obey pam restrictions = Yes pam password change = Yes passwd program = /usr/bin/passwd %u passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . unix password sync = Yes syslog = 0 log file = /var/log/samba/log.%m max log size = 1000 dns proxy = No usershare allow guests = Yes panic action = /usr/share/samba/panic-action %d idmap config * : backend = tdb [printers] comment = All Printers path = /var/spool/samba create mask = 0700 printable = Yes [print$] comment = Printer Drivers path = /var/lib/samba/printers browseable = No [Anonymous] comment = Anonymous File Server Share path = /srv/samba/anonymous_shares force user = nobody read only = No guest ok = Yes
Then restart Samba services to effect the above changes.
$ sudo systemctl restart smbd [Systemd] $ sudo service smbd restart [Sys V]
Testing Anonymous Samba File Sharing
Go to the Windows machine, and open “Network” from a Windows Explorer window. Click on the Ubuntu host (TECMINT for our case), or else try to access the samba server using its IP address.
\2.168.43.168
Note: Use the ifconfig command to get your Ubuntu server IP address.
Then open the Anonymous directory and try to add files in there to share with other users.
Secure Samba File Sharing
To password-protect a samba share, you need to create a group “smbgrp” and set a password for each user. In this example I use aaronkilik as user and password as “tecmint“.
$ sudo addgroup smbgrp $ sudo usermod aaronkilik -aG smbgrp $ sudo smbpasswd -a aaronkilik
Note: The samba security mode: security = user requires clients to enter a username and password to connect to shares.
Samba user accounts are separate from system accounts, however, you can optionally install the libpam-winbind package which is used to sync system users and passwords with the samba user database.
$ sudo apt install libpam-winbind
Then create the secure directory where the shared files will be kept.
$ sudo mkdir -p /srv/samba/secure_shares
Next, set the appropriate permissions on the directory.
$ sudo chmod -R 0770 /srv/samba/secure_shares $ sudo chown -R root:smbgrp /srv/samba/secure_shares
Now open the configuration file.
$ sudo vi /etc/samba/smb.conf OR $ sudo nano /etc/samba/smb.conf
Next edit or modify the directive settings as described below.
[Secure] comment = Secure File Server Share path = /srv/samba/secure_shares valid users = @smbgrp guest ok = no writable = yes browsable = yes
Just like before, run this command to see your current samba settings.
$ testparm
Samba Current Configuration Settings
Load smb config files from /etc/samba/smb.conf rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384) WARNING: The "syslog" option is deprecated Processing section "[printers]" Processing section "[print$]" Processing section "[Shares]" Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions # Global parameters [global] netbios name = UBUNTU server string = %h server (Samba, Ubuntu) server role = standalone server map to guest = Bad User obey pam restrictions = Yes pam password change = Yes passwd program = /usr/bin/passwd %u passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . unix password sync = Yes syslog = 0 log file = /var/log/samba/log.%m max log size = 1000 dns proxy = No usershare allow guests = Yes panic action = /usr/share/samba/panic-action %d idmap config * : backend = tdb [printers] comment = All Printers path = /var/spool/samba create mask = 0700 printable = Yes [print$] comment = Printer Drivers path = /var/lib/samba/printers browseable = No [Anonymous] comment = Anonymous File Server Share path = /srv/samba/anonymous_shares force user = nobody read only = No guest ok = Yes [Secure] comment = Secure File Server Share path = /srv/samba/secure_shares valid users = @smbgrp read only = No
Once you done with the above configurations, restart Samba services to apply the changes.
$ sudo systemctl restart smbd [Systemd] $ sudo service smbd restart [Sys V]
Testing Secure Samba File Sharing
As before, in the Windows machine, and open “Network” from a Windows Explorer window. Click on the Ubuntu host (TECMINT for our case). You may get the error below, if not proceed to the next step.
Try to access the server using its IP address, e.g. \\192.168.43.168
like this. Then enter the credentials (username and password) for user aaronkilik and click OK.
You’ll now view all the shared directories, click on Secure to open it.
You can securely share some files with other permitted users on the network by dropping them in this directory.
Enable Samba in UFW Firewall in Ubuntu
If you have UFW firewall enabled/active on your system, you must add the rules to allow Samba to pass through your firewall.
To test this, we’ve used the 192.168.43.0 network scheme. Run the commands below specifying your network address.
$ sudo ufw allow proto udp to any port 137 from 192.168.43.0/24 $ sudo ufw allow proto udp to any port 138 from 192.168.43.0/24 $ sudo ufw allow proto tcp to any port 139 from 192.168.43.0/24 $ sudo ufw allow proto tcp to any port 445 from 192.168.43.0/24
You can also check out these useful articles concerning Samba file sharing on a network.
- Setting Up Samba4 Active Directory Domain Controller- Part 1 to 14
- How to Mount/Unmount Local and Network (Samba & NFS) Filesystems in Linux
- Using ACLs (Access Control Lists) and Mounting Samba / NFS Shares
- How to Fix SambaCry Vulnerability (CVE-2017-7494) in Linux Systems
That’s all! In this guide, we showed you how to setup Samba4 for anonymous and secure file sharing between Ubuntu and Windows machines. Use the feedback form below to share any thoughts with us.