Гайд: 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.
- Опции клиента:
soft,echo_interval=10(быстрее детект мёртвого сервера), при агрессивных NAS —noserverino,actimeo=1. - Автомонтирование с
x-systemd.idle-timeout(вариант A) или autofs (E) — само «залечивает» маунт. - Сторожевой таймер:
/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 (важно!)
- Мандатный контроль (МРД/МКЦ, PARSEC). Системные службы монтируют на уровне 0 / низком уровне целостности. CIFS не хранит мандатные метки PARSEC, поэтому в сессии с ненулевым уровнем/категориями содержимое может быть недоступно, хотя
findmntпоказывает монтирование. Проверяйте: смонтировано ли вообще (findmnt) vs. доступ denied (journalctl -b | grep -i parsec, штатные средства просмотра меток, напримерpdp-ls -M, если утилита есть в вашей версии). Для многоуровневого доступа сценарий монтирования согласуется с политикой ИБ — не «лечится» опциями fstab. - МКЦ и права. При включённом мандатном контроле целостности поведение
uid/gid/file_mode/dir_modeможет отличаться от ожидаемого; для клиентских проверок прав иногда нуженnoperm. Диагностически полезно временно проверить конфигурацию штатной утилитойastra-mic-control(см.man) — только на тестовой машине и по согласованию с ИБ. - ЗПС / контроль ЭЦП (
astra-digsig-control) и запрет бита исполнения (astra-nochmodx-lock). Самописные скрипты из §7/§9/§10 могут не запускаться или запускаться с ограничениями. Смотрите отказы в журнале; при включённой ЗПС используйте штатные механизмы (fstab/automount/autofs) вместо сторонних скриптов. mount.cifsбез setuid. Обычный пользователь не смонтирует шару вручную (mount: only root can do that) — это нормально; монтирование должно идти через systemd/fstab от root. Опцияuserв fstab без setuid-хелпера не спасёт.- Двойное управление сетью. В Astra встречаются и NetworkManager (Fly), и ifupdown. Убедитесь, что интерфейс управляется чем-то одним, иначе wait-online будет обманывать.
- Керберос (
sec=krb5): нужныkeyutils, корректный/etc/krb5.conf, рабочийcifs.upcall(/etc/request-key.d/cifs.spnego.conf) и синхронизация времени — а NTP на старте тоже приходит позже сети. Это ещё один аргумент за automount. - После любых правок 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. Чек-лист
apt install cifs-utils keyutils, credentials в/etc/cifs/*.cred(600, root).- Ручное
mount -t cifs ...работает → значит проблема в порядке загрузки. - В fstab есть
_netdev,nofail(или отдельный.mount-юнит). - Включён ровно один корректный wait-online под ваш сетевой стек; таймаут увеличен до 60–90 с.
- Интерфейс:
auto(ifupdown) либо системное autoconnect-соединение NM без привязки к пользователю/keyring. - В UNC — IP или запись в
/etc/hosts(исключаем ранний DNS). - Нужна «шара сразу для сервисов» → вариант B/C/D. Нужна «шара без риска для загрузки» → вариант A (automount) или E (autofs).
systemctl daemon-reload→findmnt --verify→ тестовая перезагрузка →journalctl -b -u mnt-share.mount.- Astra SE: отдельно проверить мандатную политику/ЗПС, если монтирование есть, а доступа нет.
Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.