Установка и настройка 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/softchgrp 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 всё починится.
Удачи в файлообмене, и пусть ваши сервера не падают! 🚀