Сеть из Linux и Windows — обычное дело в офисах и дома. Общие папки на Windows-машине или NAS открываются по протоколу SMB, а в Linux монтируются через модуль cifs и утилиту mount.cifs из пакета cifs-utils. Настройка простая ровно до первого mount error(13), после чего начинается разбор версий протокола, прав и кодировок.

Что нужно на клиенте

Ядро Linux содержит модуль cifs с поддержкой SMB 3.1.1, поэтому отдельный клиент Samba не требуется. Нужны только утилиты монтирования и, желательно, smbclient для диагностики.

sudo apt install cifs-utils smbclient
sudo dnf install cifs-utils samba-client
modinfo cifs | head -10
smbclient --version

Проверка доступности

Прежде чем монтировать, убедитесь, что хост отвечает и порт 445 открыт, а также посмотрите список ресурсов. Гостевой доступ в Windows 11 по умолчанию запрещён, поэтому нужен обычный пользователь с паролем.

ping -c 3 192.168.1.10
nc -zv 192.168.1.10 445
smbclient -L //192.168.1.10 -U alice

Ручное монтирование

Минимальная команда требует указать сервер, ресурс, точку монтирования и пользователя. Владельца файлов задают через uid и gid, иначе доступ получит только root.

sudo mkdir -p /mnt/share
sudo mount -t cifs //192.168.1.10/share /mnt/share -o username=alice,uid=$(id -u),gid=$(id -g),vers=3.1.1
findmnt /mnt/share
df -h /mnt/share

Пароль в командной строке виден в истории и в списке процессов. Правильнее хранить учётные данные в отдельном файле с правами 600.

printf "username=alice\npassword=secret\ndomain=WORKGROUP\n" | sudo tee /etc/samba/creds-share >/dev/null
sudo chmod 600 /etc/samba/creds-share
sudo mount -t cifs //192.168.1.10/share /mnt/share -o credentials=/etc/samba/creds-share,uid=1000,gid=1000,vers=3.1.1

Запись в /etc/fstab

Для постоянного монтирования используют fstab. Опции nofail и _netdev не дают системе зависнуть на загрузке, если сервер недоступен, а x-systemd.automount монтирует ресурс при первом обращении.

//192.168.1.10/share /mnt/share cifs credentials=/etc/samba/creds-share,uid=1000,gid=1000,vers=3.1.1,iocharset=utf8,nofail,_netdev,x-systemd.automount,x-systemd.idle-timeout=60 0 0
sudo systemctl daemon-reload
sudo mount -a
systemctl status mnt-share.automount

Юнит .automount создаётся systemd автоматически из строки fstab. Если нужен полный контроль, пишут отдельные unit-файлы: mnt-share.mount с параметром What=//192.168.1.10/share и mnt-share.automount с Where=/mnt/share.

systemctl cat mnt-share.mount
journalctl -u mnt-share.mount -b --no-pager | tail -30
systemctl restart mnt-share.automount

Опции, которые важно понимать

  • vers — версия протокола: 2.0, 2.1, 3.0, 3.0.2, 3.1.1. Оставляйте 3.1.1, если сервер её поддерживает.
  • sec — способ аутентификации: ntlmssp для логина и пароля, krb5 для Kerberos, krb5p с шифрованием.
  • uid, gid, file_mode, dir_mode — какие права получат файлы на клиенте.
  • iocharset=utf8 — корректные русские имена файлов.
  • mfsymlinks — символические ссылки в стиле macOS, полезно для общих проектов.
  • cache=strict — предсказуемое кеширование, лучше для совместной работы.
  • hard или soft — поведение при потере сервера: hard ждёт, soft возвращает ошибку.
  • seal — требование шифрования SMB3, sign — обязательная подпись пакетов.

Для ноутбука с ненадёжной сетью разумно soft с echo_interval=30, чтобы зависший сервер не подвешивал файловый менеджер. Для баз данных и репозиториев наоборот: hard надёжнее, потому что не возвращает ошибку ввода-вывода посреди записи.

sudo mount -t cifs //192.168.1.10/share /mnt/share -o credentials=/etc/samba/creds-share,vers=3.1.1,soft,echo_interval=30,seal
grep -i cifs /proc/mounts

Kerberos и домен

В домене Active Directory пароль можно не хранить: клиент получает билет Kerberos и передаёт его ядру через cifs.upcall. Нужны krb5-user, настроенный /etc/krb5.conf и синхронизированное время.

sudo apt install krb5-user
kinit alice@EXAMPLE.COM
klist
sudo mount -t cifs //files.example.com/share /mnt/share -o sec=krb5,uid=1000,gid=1000,vers=3.1.1

Для автоматического монтирования при входе используют keytab и правило в /etc/request-key.conf, но это уже задача администратора домена: без корректной настройки DNS и времени Kerberos не заработает.

Диагностика ошибок

Коды ошибок mount.cifs соответствуют errno и часто указывают на причину точнее, чем текст сообщения.

  • mount error(13): Permission denied — неверный пароль, неподходящий sec или запрет гостевого доступа.
  • mount error(2): No such file or directory — опечатка в имени ресурса или точки монтирования.
  • mount error(6): No such device or address — несовпадение версии протокола или отключённый SMB1.
  • mount error(112): Host is down — сервер не отвечает, часто после сна ноутбука.
  • mount error(115): Operation now in progress — таймаут установки соединения.
sudo mount -t cifs //192.168.1.10/share /mnt/share -o credentials=/etc/samba/creds-share,vers=3.1.1 -v
sudo dmesg | tail -20
sudo journalctl -k -b | grep -i cifs | tail -20

Полезно проверить, какой протокол согласован: в dmesg при успешном монтировании видно версию SMB и размеры блоков. Если сервер старый и поддерживает только SMB1, включать SMB1 на стороне Windows не стоит — лучше обновить сервер или использовать промежуточный NAS с SMB3.

Безопасность и права

Общий доступ должен быть минимально необходимым: отдельная учётная запись, только нужный каталог, запрет гостевого входа. Файл с паролем не должен быть доступен другим пользователям, а в fstab не место открытому паролю. Шифрование SMB3 включается опцией seal, подпись — sign; для домашней сети достаточно подписи, для передачи документов по Wi-Fi лучше и то и другое. Отдельно проверьте, что на сервере отключён SMB1 и не разрешён гостевой доступ.

sudo chown root:root /etc/samba/creds-share
sudo chmod 600 /etc/samba/creds-share
sudo findmnt -o TARGET,SOURCE,FSTYPE,OPTIONS /mnt/share

Чек-лист

  1. Установите cifs-utils и проверьте модуль cifs.
  2. Проверьте порт 445 и список ресурсов через smbclient.
  3. Смонтируйте вручную с vers=3.1.1 и uid/gid.
  4. Перенесите пароль в файл с правами 600.
  5. Добавьте строку в fstab с nofail, _netdev и automount.
  6. Проверьте поведение при выключенном сервере и после перезагрузки.

Итог

CIFS в Linux работает надёжно, если сразу выбрать SMB 3.1.1, вынести учётные данные в защищённый файл и не забыть про uid с gid. Основные сложности возникают не в ядре, а в согласовании версии протокола, прав и кодировки. Автомонтирование через systemd избавляет от зависаний на загрузке, а диагностика сводится к smbclient, dmesg и журналу юнита. Для постоянной работы с файлами Windows стоит один раз настроить fstab и забыть о ручных командах, но проверить сценарий с недоступным сервером — обязательно.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте