# Создание файлового сервера при помощи 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
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:
В основной части конфигурационного файла — в разделе [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 в список исключений фаервола, если он у вас включён:
Теперь файловый сервер готов к старту, осталось только добавить пользователей.
# Добавление пользователей на сервер
Мы добавим на сервер двух новых пользователей, для простоты назовём их user1 и user2, и пользователя admin. Для пользователей user1 и user2 создадим отдельные папки на сервере, к которым они будут иметь доступ, и одну общую папку для них. Пользователь admin будет иметь доступ ко всем трём папкам.
Сначала создадим отдельную папку, где у нас будет файлообменник, и обозначим её как папку файлообменника:
sudo mkdir /samba/ sudo chown :sambashare /samba/
Теперь создадим папку для первого пользователя:
После этого добавим пользователя 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:
В открывшийся текстовый файл в самом конце нужно добавить описание директорий и пользователей, у которых есть право доступа к ним:
[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
Мы успешно создали папку на нашем файлообменнике.
© Джино, 2003–2022. «Джино» является зарегистрированным товарным знаком.
Лицензия на телематические услуги связи №150549 от 09.03.2017.