Гайд: Astra Linux: CIFS‑шара не монтируется при загрузке (сеть поднимается позже) - Часть 2

Как настроить автоматическое монтирование CIFS в Astra Linux, если сеть поднимается позже. Решения через fstab, systemd-automount и autofs без ошибок загрузки.

2026.11.14                  


Гайд: Astra Linux: CIFS‑шара не монтируется при загрузке (сеть поднимается позже) - Часть 2Гайд: Astra Linux: CIFS‑шара не монтируется при загрузке (сеть поднимается позже) - Часть 2

6. Вариант C: собственный .mount-юнит

Даёт полный контроль над порядком и таймаутами. Имя файла обязано соответствовать пути: /mnt/share → /etc/systemd/system/mnt-share.mount.

[Unit]
Description=CIFS share //192.168.1.10/share
Wants=network-online.target
After=network-online.target nss-lookup.target
Before=remote-fs.target

[Mount]
What=//192.168.1.10/share
Where=/mnt/share
Type=cifs
Options=credentials=/etc/cifs/share.cred,vers=3.0,iocharset=utf8,uid=1000,gid=1000,file_mode=0664,dir_mode=0775,noserverino,soft,_netdev
TimeoutSec=60

[Install]
WantedBy=multi-user.target


sudo systemctl daemon-reload
sudo systemctl enable --now mnt-share.mount
systemctl status mnt-share.mount

Строку из fstab при этом удалите (иначе два юнита за одну точку). Проверка корректности: systemd-analyze verify mnt-share.mount.


У .mount-юнитов нет Restart= — автоповтор делается либо автомонтированием (вариант A), либо сервисом-обёрткой (вариант D).


7. Вариант D: сервис с повторными попытками («железобетон»)

Подходит, когда сеть появляется непредсказуемо поздно (Wi‑Fi, 802.1X, медленный DHCP).

/usr/local/sbin/mount-cifs-retry.sh:

#!/bin/bash
set -u
MP="/mnt/share"
SRV="192.168.1.10"
PORT=445
TRIES=60
SLEEP=5

mountpoint -q "$MP" && exit 0
for ((i=1;i<=TRIES;i++)); do
    if timeout 3 bash -c "cat < /dev/null > /dev/tcp/$SRV/$PORT" 2>/dev/null; then
        if /bin/mount "$MP"; then
            logger -t cifs-retry "mounted $MP (attempt $i)"
            exit 0
        fi
    fi
    logger -t cifs-retry "attempt $i failed, retry in ${SLEEP}s"
    sleep "$SLEEP"
done
logger -t cifs-retry "FAILED to mount $MP"
exit 1
sudo chmod 700 /usr/local/sbin/mount-cifs-retry.sh

/etc/systemd/system/cifs-retry.service:

[Unit]
Description=Mount CIFS shares with retry until network is ready
Wants=network-online.target
After=network-online.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/sbin/mount-cifs-retry.sh
ExecStop=/bin/umount -l /mnt/share
TimeoutStartSec=360

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now cifs-retry.service
journalctl -t cifs-retry -b

В fstab оставьте строку с noauto,nofail,_netdev (чтобы работал mount /mnt/share), но без x-systemd.automount.


8. Вариант E: autofs (классика для «плавающей» сети)

sudo apt install autofs
echo '/mnt /etc/auto.cifs --ghost --timeout=60' | sudo tee /etc/auto.master.d/cifs.autofs
sudo tee /etc/auto.cifs >/dev/null <<'EOF'
share -fstype=cifs,credentials=/etc/cifs/share.cred,vers=3.0,iocharset=utf8,uid=1000,gid=1000,file_mode=0664,dir_mode=0775,noserverino,soft ://192.168.1.10/share
EOF
sudo chmod 600 /etc/auto.cifs
sudo systemctl enable --now autofs
ls /mnt/share

Доступ будет по /mnt/share. --ghost создаёт видимые каталоги-«призраки». autofs сам переподключает шару при обращениях — переживает обрывы сети лучше статичного mount. Из fstab строку убрать.


9. Вариант F: хуки сетевого стека

NetworkManager dispatcher

/etc/NetworkManager/dispatcher.d/50-cifs-share (владелец root, права 0755, без расширения .sh):

#!/bin/bash
IFACE="$1"; ACTION="$2"
[ "$IFACE" = "eth0" ] || exit 0
case "$ACTION" in
    up|dhcp4-change|connectivity-change)
        /bin/systemctl start --no-block mnt-share.mount ;;
    down|pre-down)
        /bin/systemctl stop --no-block mnt-share.mount ;;
esac

Вызывайте именно systemctl --no-block, а не mount напрямую: dispatcher-скрипты ограничены по времени, а pre-down может «подвиснуть» на мёртвой шаре.


ifupdown

/etc/network/if-up.d/50-cifs-share (chmod 755):

#!/bin/sh
[ "$IFACE" = "eth0" ] || exit 0
[ "$MODE" = "start" ] || exit 0
/bin/mount /mnt/share || true

И парный /etc/network/if-down.d/50-cifs-share с umount -l -f /mnt/share || true.


10. Если сеть отваливается уже после загрузки

Признак: ls /mnt/share висит или Stale file handle / Host is down.

  1. Опции клиента: soft,echo_interval=10 (быстрее детект мёртвого сервера), при агрессивных NAS — noserverino, actimeo=1.
  2. Автомонтирование с x-systemd.idle-timeout (вариант A) или autofs (E) — само «залечивает» маунт.
  3. Сторожевой таймер:



/usr/local/sbin/cifs-watchdog.sh:

#!/bin/bash
MP=/mnt/share
timeout 10 ls "$MP" >/dev/null 2>&1 && exit 0
logger -t cifs-watchdog "$MP is dead, remounting"
umount -f -l "$MP" 2>/dev/null
mount "$MP"

cifs-watchdog.service (Type=oneshot, ExecStart=...) + cifs-watchdog.timer:

[Timer]
OnBootSec=2min
OnUnitActiveSec=1min
AccuracySec=10s
sudo systemctl enable --now cifs-watchdog.timer

11. Специфика Astra Linux (важно!)

  1. Мандатный контроль (МРД/МКЦ, PARSEC). Системные службы монтируют на уровне 0 / низком уровне целостности. CIFS не хранит мандатные метки PARSEC, поэтому в сессии с ненулевым уровнем/категориями содержимое может быть недоступно, хотя findmnt показывает монтирование. Проверяйте: смонтировано ли вообще (findmnt) vs. доступ denied (journalctl -b | grep -i parsec, штатные средства просмотра меток, например pdp-ls -M, если утилита есть в вашей версии). Для многоуровневого доступа сценарий монтирования согласуется с политикой ИБ — не «лечится» опциями fstab.
  2. МКЦ и права. При включённом мандатном контроле целостности поведение uid/gid/file_mode/dir_mode может отличаться от ожидаемого; для клиентских проверок прав иногда нужен noperm. Диагностически полезно временно проверить конфигурацию штатной утилитой astra-mic-control (см. man) — только на тестовой машине и по согласованию с ИБ.
  3. ЗПС / контроль ЭЦП (astra-digsig-control) и запрет бита исполнения (astra-nochmodx-lock). Самописные скрипты из §7/§9/§10 могут не запускаться или запускаться с ограничениями. Смотрите отказы в журнале; при включённой ЗПС используйте штатные механизмы (fstab/automount/autofs) вместо сторонних скриптов.
  4. mount.cifs без setuid. Обычный пользователь не смонтирует шару вручную (mount: only root can do that) — это нормально; монтирование должно идти через systemd/fstab от root. Опция user в fstab без setuid-хелпера не спасёт.
  5. Двойное управление сетью. В Astra встречаются и NetworkManager (Fly), и ifupdown. Убедитесь, что интерфейс управляется чем-то одним, иначе wait-online будет обманывать.
  6. Керберос (sec=krb5): нужны keyutils, корректный /etc/krb5.conf, рабочий cifs.upcall (/etc/request-key.d/cifs.spnego.conf) и синхронизация времени — а NTP на старте тоже приходит позже сети. Это ещё один аргумент за automount.
  7. После любых правок fstab в Astra обязательны systemctl daemon-reload и проверка findmnt --verify. Актуальные версии: 1.7 (systemd ~241) и 1.8 (systemd ~252) — все x-systemd.* опции из гайда поддерживаются.

12. Шпаргалка

Полезные опции CIFS

Опция Зачем
credentials=/etc/cifs/x.cred логин/пароль/домен вне fstab, права 600
vers=3.1.1 / 3.0 / 2.1 версия SMB: Win10/2016+ → 3.x; старые NAS → 2.1/2.0; 1.0 — небезопасно и часто отключено в ядре
sec=ntlmssp типовая аутентификация NTLMv2; krb5 — домен Kerberos
iocharset=utf8 корректная кириллица в именах файлов
uid=, gid=, file_mode=, dir_mode= владелец и права (CIFS без unix-расширений их не отдаёт)
noserverino сервер отдаёт дублирующиеся inode (частая беда NAS/Samba)
noperm не проверять права на клиенте (полезно при несовпадении UID/мандатной политике)
soft + echo_interval=10 операции завершаются ошибкой, а не висят вечно; быстрый детект обрыва
mfsymlinks, cifsacl, multiuser, seal симлинки, ACL, доступ от разных пользователей, шифрование SMB3



Коды ошибок

Ошибка Причина Куда смотреть
(101) Network is unreachable сеть ещё не поднялась §4–§7
(113) No route to host маршрут/файрвол/VLAN сеть, ip r, порт 445
(110) Connection timed out 445 закрыт, сервер не отвечает nc -zv srv 445
(2) No such file or directory нет такой шары / не резолвится имя UNC, /etc/hosts, smbclient -L
(13) Permission denied логин/пароль/домен/sec= credentials, sec=ntlmssp
(95) Operation not supported не та vers=/sec= версия SMB
(112) Host is down несогласование версий SMB (часто клиент 1.0 vs сервер 2+) vers=3.0 или 2.1
(22) Invalid argument опечатка в опциях / нет модуля dmesg \| grep CIFS
bad option ... /sbin/mount.<type> не установлен cifs-utils apt install cifs-utils
Юнит failed, загрузка в emergency нет nofail/_netdev §4

13. Чек-лист

  1. apt install cifs-utils keyutils, credentials в /etc/cifs/*.cred (600, root).
  2. Ручное mount -t cifs ... работает → значит проблема в порядке загрузки.
  3. В fstab есть _netdev,nofail (или отдельный .mount-юнит).
  4. Включён ровно один корректный wait-online под ваш сетевой стек; таймаут увеличен до 60–90 с.
  5. Интерфейс: auto (ifupdown) либо системное autoconnect-соединение NM без привязки к пользователю/keyring.
  6. В UNC — IP или запись в /etc/hosts (исключаем ранний DNS).
  7. Нужна «шара сразу для сервисов» → вариант B/C/D. Нужна «шара без риска для загрузки» → вариант A (automount) или E (autofs).
  8. systemctl daemon-reload → findmnt --verify → тестовая перезагрузка → journalctl -b -u mnt-share.mount.
  9. Astra SE: отдельно проверить мандатную политику/ЗПС, если монтирование есть, а доступа нет.

Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (специалист по ЗИ)

Комментарии

Загрузка...
Если комментарии не загружаются, можете попробовать отключить блокировщик рекламы для этого сайта