# Создание файлового сервера при помощи Samba на Ubuntu
Создание файлообменника — одна из базовых задач при администрировании внутренних сетей предприятия. Частично эту задачу можно решить при помощи открытия доступа пользователям к каким-либо отдельным папкам на сервере, но лучше и правильнее создавать отдельный сервер, предназначенный для хранения и обмена файлами.
В этой инструкции мы установим Samba — стандартный сервис для создания файлообменника в Linux — на подготовленный к работе сервер под управлением Ubuntu, создадим нескольких пользователей, которым будет открыт доступ к файлообменнику, и добавим администратора с правами доступа во все папки.
# Установка Samba
Устанавливать Samba будем из стандартных репозиториев apt:
sudo apt update
sudo apt install samba
Сразу после установки автоматически запускается не только Samba (smbd), но и идущий в комплекте установки Samba NetBIOS server (nmbd). Он нужен для организации связи с Windows-машинами, поэтому на данном этапе нам не нужен — отключим его:
sudo systemctl stop nmbd.service
sudo systemctl disable nmbd.service
Проверим статус Samba:
sudo systemctl status smbd
# Output
smbd.service - Samba SMB Daemon
Loaded: loaded (/lib/systemd/system/smbd.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-04-19 11:51:11 +05; 4h 1min ago
Docs: man:smbd(8)
man:samba(7)
man:smb.conf(5)
…
Samba установлена и запущена. Можем переходить к настройке и запуску сервиса!
# Настройка Samba
Создадим его резервную копию основного файла настроек:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.orig
После этого можем переходить непосредственно к настройке файлового сервера. Сначала проверим, какие для нашего сервера доступны сетевые интерфейсы:
ip list
# Output
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: venet0: <BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default
link/void
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default
link/ether 02:42:a2:78:1c:13 brd ff:ff:ff:ff:ff:ff
В нашем случае три сетевых интерфейса:
Стандартный lo, отвечающий за обратную связь с внутренней сетью.
venet0 — основной интерфейс для подключения к внешней сети.
docker0 — интерфейс, используемый Docker, в данном случае он нам не интересен.
Откроем конфигурационный файл Samba:
sudo vim /etc/samba/smb.conf
В основной части конфигурационного файла — в разделе [global]
— много настроек и закомментированных строк, поясняющих их назначение. Нам нужно проконтролировать значения в следующих строках:
[global]
server string = samba.example.com
server role = standalone server
interfaces = lo venet0
bind interfaces only = yes
disable netbios = yes
smb ports = 445
log file = /var/log/samba/smb.log
max log size = 10000
Здесь указаны следующие значения:
server_string
— имя сервера, которое будет ему присвоено. Здесь мы выбрали такое же, как у нашего домена example.com, на котором мы будем его запускать;server role
— роль сервера в сети, в данном случае параметр standalone server означает, что это файловый сервер;interfaces
— в этой строке указываем оба сетевых интерфейса (интерфейс обратной связи и основной сетевой);bind interfaces only
— параметр, запрещающий подключаться к нашему серверу через другие сетевые интерфейсы;disable netbios
— отключает все интерфейсы NetBIOS;smb ports
— в этой строке можно указать порт, на котором будет работать Samba, по умолчанию это порт 445 (Samba будет работать на нём, даже если его не указывать здесь);log file
— адрес к логу Samba;max log size
— максимальный размер лога в байтах.
После сохранения сделанных изменений проверим, что конфигурация нашего файла правильная:
testparm
# Output
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
…
После этого можно будет нажать Enter, чтобы посмотреть заданные параметры сервера:
#Output
# Global parameters
[global]
bind interfaces only = Yes
interfaces = venet0 lo
log file = /var/log/samba/smb.log %n
logging = file
…
Добавим Samba в список исключений фаервола, если он у вас включён:
sudo ufw allow 445
Теперь файловый сервер готов к старту, осталось только добавить пользователей.
# Добавление пользователей на сервер
Мы добавим на сервер двух новых пользователей, для простоты назовём их user1 и user2, и пользователя admin. Для пользователей user1 и user2 создадим отдельные папки на сервере, к которым они будут иметь доступ, и одну общую папку для них. Пользователь admin будет иметь доступ ко всем трём папкам.
Сначала создадим отдельную папку, где у нас будет файлообменник, и обозначим её как папку файлообменника:
sudo mkdir /samba/
sudo chown :sambashare /samba/
Теперь создадим папку для первого пользователя:
sudo mkdir /samba/user1
После этого добавим пользователя user1 в качестве системного пользователя, но запретим ему подключение к серверу по SSH и не будем создавать для него домашнюю директорию — он будет пользоваться исключительно только что созданной папкой:
sudo adduser --home /samba/user1 --no-create-home --shell /usr/sbin/nologin --ingroup sambashare user1
После создания пользователя передадим ему все права на его папку:
sudo chown user1:sambashare /samba/user1/
sudo chmod 2770 /samba/user1/
Значение прав 2770 означает, что создаваемые внутри папки файлы будут получать те же права, что и сама папка.
Теперь осталось добавить пользователя user1 в базу данных Samba и активировать его. В Samba есть своя база данных с пользователями и паролями, куда мы и будем добавлять нашего нового пользователя:
sudo smbpasswd -a user1
sudo smbpasswd -e user1
Флаг -a
добавляет пользователя к базе данных Samba, а флаг -e
активирует его.
После этого нужно проделать такие же операции для пользователя user2.
Когда оба пользователя будут добавлены к серверу Samba, можно переходить к добавлению администратора сервера. Для администратора нужно будет проделать те же операции — основные различия в правах мы зададим чуть позже, на стадии описания папок:
sudo mkdir /samba/everyone
sudo adduser --home /samba/everyone --no-create-home --shell /usr/sbin/nologin --ingroup sambashare admin
sudo chown admin:sambashare /samba/everyone/
sudo chmod 2770 /samba/everyone/
sudo smbpasswd -a admin
sudo smbpasswd -e admin
Также создадим группу пользователей администраторы, у которых будет доступ ко всем файлам и папкам на сервере — группой и её членами управлять гораздо проще, чем прописывать каждому новому администратору доступ к каждой из папок вручную:.
sudo groupadd admins
sudo usermod -G admins admin
Первой командой мы создали группу admins, второй — добавили в неё нашего пользователя admin.
# Настройка доступа к папкам
Права на доступ к папкам настраиваются в основном конфигурационном файле Samba:
sudo vim /etc/samba/smb.conf
В открывшийся текстовый файл в самом конце нужно добавить описание директорий и пользователей, у которых есть право доступа к ним:
[user1]
path = /samba/user1
browseable = no
read only = no
force create mode = 0660
force directory mode = 2770
valid users = user1 @admins
Здесь:
[user1]
— общее имя описываемой файловой шары;path
— путь к директории, куда открывается доступ;browseable
— разрешение другим пользователям видеть содержимое этой папки (параметр no означает, что другие пользователи смогут видеть только само наличие этой папки, но не будут видеть, что находится внутри);read only
— указание на то, могут ли пользователи, у которых есть доступ к этой папке, только читать файлы, находящиеся здесь, или могут создавать здесь новые;force create mode
— какие права устанавливаются создаваемым файлам;force directory mode
— какие права устанавливаются создаваемым вложенным папкам;valid users
— имена пользователей, имеющих доступ к папке (в нашем случае это сам пользователь user1 и все пользователи из группы admins).
Делаем то же самое для директории для пользователя user2 и переходим к настройке общей папки:
[everyone]
path = /samba/everyone
browseable = yes
read only = no
force create mode = 0660
force directory mode = 2770
valid users = @sambashare @admins
Единственным отличием помимо параметра path
в данном случае будет группа пользователей, имеющих доступ к папке. В строке valid users
мы указываем всех пользователей из группы sambashare и группы admins. Это общая папка, куда сможет зайти каждый, имеющий доступ к серверу.
После сохранения конфигурационного файла снова запустим тест настроек:
testparm
# Output
Load smb config files from /etc/samba/smb.conf
Loaded services file OK.
Weak crypto is allowed
Server role: ROLE_STANDALONE
…
Всё в порядке, в конфигурационном файле нет ошибок — можно пробовать подключение к серверу.
# Samba-клиент
Чтобы подключиться к серверу с файлообменником, нам нужен будет клиент. Скачаем его — он стандартный:
sudo apt install samba-client
После установки клиента можно сразу же попробовать подключиться к нашему файловому серверу:
smbclient //samba.example.com/user1 -U user1
Нас попросят указать пароль для доступа, и после этого значок в командной строке сменится на smb: \>
. Это будет означать, что мы находимся в интерфейсе управления файлами и папками нашей файловой шары.
Проверим, как она работает — создадим папку и посмотрим список доступных:
mkdir first
ls
# Output
. D 0 Tue Apr 19 11:21:37 2022
.. D 0 Tue Apr 19 11:31:51 2022
first D 0 Wed Apr 20 10:44:14 2022
Мы успешно создали папку на нашем файлообменнике.