Сеть из 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
Чек-лист
- Установите cifs-utils и проверьте модуль cifs.
- Проверьте порт 445 и список ресурсов через smbclient.
- Смонтируйте вручную с vers=3.1.1 и uid/gid.
- Перенесите пароль в файл с правами 600.
- Добавьте строку в fstab с nofail, _netdev и automount.
- Проверьте поведение при выключенном сервере и после перезагрузки.
Итог
CIFS в Linux работает надёжно, если сразу выбрать SMB 3.1.1, вынести учётные данные в защищённый файл и не забыть про uid с gid. Основные сложности возникают не в ядре, а в согласовании версии протокола, прав и кодировки. Автомонтирование через systemd избавляет от зависаний на загрузке, а диагностика сводится к smbclient, dmesg и журналу юнита. Для постоянной работы с файлами Windows стоит один раз настроить fstab и забыть о ручных командах, но проверить сценарий с недоступным сервером — обязательно.