Установка и настройка Samba на Debian - Делаем Linux дружелюбным к Windows
Привет, дорогой сисадмин (или просто любопытный гик)! Если ты здесь, значит, тебе надоело перекидывать файлы между Linux и Windows через флешки, облака или, не дай бог, электронную почту 😄
Сегодня мы превратим твой Debian-сервер в гостеприимного хозяина для Windows-машин с помощью Samba — мощного инструмента для общего доступа к файлам.
Установка Samba
Для начала обновим систему (чтобы не было "ой, а почему не работает?"):
apt update && apt upgrade -y
Теперь ставим сам Samba:
apt install samba -y
Если после установки вам показалось, что ничего не произошло — не пугайтесь, Samba просто скромная.
Также следует изменить настройку лимита на количество одновременно открытых файлов, в Linux это 1024, а в Windows 16384. Для этого откройте файл:
nano /etc/security/limits.conf
И добавьте в конце две строки:
* - nofile 16384
root - nofile 16384
После чего сервер следует перезагрузить.
Настройка Samba (или "Где мои файлы, Боб?")
Конфигурационный файл Samba лежит в /etc/samba/smb.conf
. Открываем его:
nano /etc/samba/smb.conf
Допустим, мы хотим расшарить папку /srv/share
для всех желающих (или нежелающих, но с паролем). Добавляем в конец файла:
[share]
comment = Общая папка для Windows-пользователей
path = /srv/share
read only = no
guest ok = no # Гостям вход воспрещён (если только это не тёща)
force create mode = 0770
directory mode = 2770
- comment - описание ресурса, необязательный параметр
- path - путь к директории
- read only - режим только чтения
- guest ok - разрешен ли гостевой доступ
- force create mode - устанавливает права на новые файлы, создаваемые через Samba, даже если клиент (Windows) попытается выставить другие права, Samba перезапишет их
- directory mode - аналогично, но для новых папок, бит
2
(setgid) — файлы в этой папке наследуют группу родителя
Сохраняем (Ctrl+O
, потом Ctrl+X
для nano) и перезапускаем Samba:
systemctl restart smbd
Создаём пользователей (чтобы не шарили все подряд)
Создадим группу для наших пользователей:
groupadd samba-users
Создадим каталог, если еще не создали:
mkdir /srv/share
Изменим группу владельца:
chgrp samba-users /srv/share
И установим права:
chmod 2770 /srv/share
Значение 2770
обозначает что мы предоставляем полные права владельцу и группе, для остальных доступ запрещен. А первая двойка устанавливает setgid для каталога, что обеспечивает присвоение группы каталога каждому создаваемому в нем файлу.
Допустим, у нас есть пользователь bob
, которому мы хотим дать доступ. В то же время иметь доступ к самому Samba-серверу ему необязательно. Сначала добавляем его в систему (если его ещё нет):
useradd -M -s /sbin/nologin bob
Ключ -M
заводит пользователя без создания домашнего каталога, а -s /sbin/nologin
исключает возможность входа такого пользователя в систему.
Теперь добавим его в группу:
usermod -aG samba-users bob
Затем добавляем его в Samba (это важно, иначе Боб не сможет зайти) и устанавливаем пароль:
smbpasswd -a bob
И включим учетную запись:
smbpasswd -e bob
Проверяем, что всё работает (а то вдруг нет?)
Подключение из Windows
- Открываем Проводник (да, тот самый, который иногда "не отвечает").
- В адресной строке пишем:
\\IP_вашего_сервера\share
- Вводим логин (
bob
) и пароль. - PROFIT! Теперь можно копировать файлы без танцев с бубном.
Автоподключение при загрузке Windows
Можно добавить сетевой диск через "Подключить сетевой диск" в Проводнике.
Подключение и автоматическое монтирование из Linux
Установка клиента Samba (если ещё нет):
apt install smbclient cifs-utils
Теперь нам нужно создать точку монтирования — папку, где появятся файлы из шары:
mkdir /mnt/samba_share
Чтобы избежать проблем с правами доступа, необходимо, чтобы папка, в которую монтируется общий ресурс (например, /mnt/samba_share
), принадлежала текущему пользователю Linux. Если вы создавали папку без использования sudo, то она уже принадлежит обычному пользователю. Однако если вы создавали папку с sudo (например, в /mnt
это невозможно сделать без него), то вам нужно изменить её владельца.
Откройте /etc/fstab
:
nano /etc/fstab
Добавьте строку:
//IP_СЕРВЕРА/ИМЯ_ШАРЫ /mnt/samba_share cifs username=ПОЛЬЗОВАТЕЛЬ,password=ПАРОЛЬ,uid=1001,iocharset=utf8,nofail,_netdev 0 0
Мы добавили опцию nofail
, которая позволяет операционной системе корректно загружаться даже в случае возникновения проблем с монтированием файловой системы. Также мы добавили опцию _netdev
, которая указывает на то, что файловая система расположена на устройстве, требующем подключения к сети. Это предотвращает попытки системы смонтировать файловую систему до тех пор, пока не будет подключена сеть.uid=1001
– владелец (обычно ваш основной пользователь).
Проверьте монтирование:
mount -a
ls /mnt/samba_share # Должны появиться файлы
Дополнительные фишки (потому что почему бы и нет?)
Логирование
Если что-то не работает, смотрим логи:
tail -f /var/log/samba/log.smbd
Смешанный доступ (пользователь + гость)
Предположим, вы хотите создать общую папку, содержащую установочные пакеты программ, к которым может получить доступ любой пользователь. Однако вы не хотите, чтобы кто-либо мог изменять содержимое этой папки, за исключением участников группы samba-users
.
В конфигурационном файле необходимо добавить следующую секцию:
[soft]
path = /srv/soft
read only = no
guest ok = yes
Теперь создадим папку и изменим группового владельца:
mkdir /srv/soft
chgrp samba-users /srv/soft
Ну и не забываем о правах, владелец и группа должны иметь полный доступ, а все остальные только чтение и выполнение, добавим:
[soft]
path = /srv/soft
read only = no
guest ok = yes
force create mode = 0775
directory mode = 2775
Перезапускаем Samba и убеждаемся, что без авторизации пользователь может только копировать и запускать файлы. Однако после авторизации пользователи получают возможность изменять и удалять содержимое общего ресурса.
Настройка скрытого общего ресурса
Скрыть общий ресурс из отображаемого списка. Например, служебные ресурсы, используемые в административных целях. Нет ничего проще, достаточно добавить в секцию ресурса еще одну опцию:
browseable = no
Настройка корзины для общего ресурса
Для активации корзины добавьте в секцию к общему ресурсу следующие строки:
vfs objects = recycle
recycle:repository = .recycle
recycle:versions = yes
recycle:keeptree = yes
В первой строке в общий ресурс будет добавлен новый объект — корзина. Во второй будет указано её местоположение — скрытая папка в корне.
Следующие две позволяют сохранять структуру папок при удалении и сохранять несколько версий файла с одним и тем же именем. Это помогает избежать ситуаций, когда в разных папках находятся файлы с одинаковым именем, но разным содержимым, или когда на место удалённого файла копируется ещё один такой же и также удаляется.
Ранее мы устанавливали права доступа. Корзина не является исключением. Если у вас включено сохранение структуры папок, то по умолчанию она будет создана с правами 0700, что означает, что восстановить файл сможет только тот, кто его удалил. Рекомендуется изменить это поведение и установить права, аналогичные указанным в directory mode. Для этого добавим ещё одну опцию:
recycle:directory_mode = 2770
Не забудьте перезапустить сервер Samba.
Заключение
Теперь у вас есть работающий Samba-сервер, и Windows-машины могут подключаться к нему без лишних нервов. Если что-то пошло не так — не переживайте, Samba иногда вредничает, но с правильными логами и Google всё починится.
Удачи в файлообмене, и пусть ваши сервера не падают! 🚀