Bash · 05.06.2026

Код красный: сетевая шара

Внимание! Некропостинг!

Заметка из цикла постов про настройку операционной системы РЕД ОС версии 7.3 в (относительно) корпоративной среде со всеми вытекающими. Первая часть цикла была здесь, а потом всё как-то пошло по наклонной и история так и не получила продолжения. Хотя, в прошлый раз я и без того нагородил знатный длиннопост.

Теперь по теме поста. Изначальным планом было выстраивание структуры на Linux рядом с уже существующей оконной средой на Active Directory. Предстоял ввод хостов в домен, подгон рабочего пространства под привычное для пользователей окружение и полное повторение привычного оконного функционала. По возможности. Но по максимуму. Проблема, о которой я сегодня расскажу, обнаружилась далеко не сразу.

В корпоративной среде присутствовал массивный файловый сервер со строго регламентированным доступом согласно членству пользователей в той или иной группе безопасности Active Directory. И вот, казалось бы, хрестоматийная вещь. Что может быть менее стандартно, чем данное решение? Всё, что нужно для реализации этого функционала, добавить автоматическое монтирование шары к файловой системе хоста и разместить на рабочем столе соответствующий desktop.

Подробнее о файлах desktop я писал где-то здесь.

К большому сожалению, я не предусмотрел тот факт, что все остальные вошедшие пользователи унаследуют права доступа к общим файлам самого первого авторизованного пользователя. И совсем не важно: разлогинился он или нет. Монтирование раздела уже выполнено.

Чтобы решить данную проблему нужно внести нижеуказанную команду в файл /etc/profile и дать разрешение для всех пользователей на её выполнение:

umount -a -t cifs -l && mount -a

При загрузке профиля пользователя общие ресурсы будут отмонтированы и примонтированы снова, но уже с учётом прав вошедшего пользователя.

В рамках проекта по развёртыванию РЕД ОС 7.3 подход пришлось изменить. Потребовалось написать скрипт, который бы обрабатывал полный цикл работы с файловой шарой.

В конечном итоге, весь этот путь и привёл нас сюда:

#!/bin/bash

# Создаём папку
mkdir -p /mnt/pub

# Даём права (всем можно всё)
chmod 777 /mnt/pub

# Строка для добавления в файл fstab
line="//share.local.domain.ru/share /mnt/pub/ cifs rw,users,sec=krb5,_netdev,nofail,domain=local.domain.ru"

# Проверяем, существует ли строка в файле /etc/fstab
if ! grep -Fxq "$line" /etc/fstab; then
    # Если строки нет, добавляем ее в файл
    echo "$line" >> /etc/fstab
    echo "Строка добавлена в /etc/fstab."
else
    echo "Строка уже существует в /etc/fstab."
fi

# Устанавливаем права для файла mount.cifs
if [[ ! -u /usr/sbin/mount.cifs ]]; then/etc/profile 
    chmod u+s /usr/sbin/mount.cifs
    echo "Setuid bit установлен на /usr/sbin/mount.cifs"
else
    echo "Setuid bit уже установлен на /usr/sbin/mount.cifs"
fi

# Разрешаем команду для не админов
SUDOERS_LINE="ALL ALL=(ALL) NOPASSWD: /bin/umount -a -t cifs -l, /bin/mount -a"
if ! grep -Fxq "$SUDOERS_LINE" /etc/sudoers; then
    echo "$SUDOERS_LINE" | sudo tee -a /etc/sudoers > /dev/null
    echo "Команда перемонтирования разрешена для всех пользователей!"
else
    echo "Строка уже существует в sudoers."
fi

# Записываем монтирование в файл /etc/profile
if ! grep -q 'sudo umount -a -t cifs -l && mount -a' /etc/profile; then
    echo 'if [[ "$USER" != "root" ]]; then' >> /etc/profile
    echo '    sudo umount -a -t cifs -l && mount -a' >> /etc/profile
    echo 'fi' >> /etc/profile
    echo "Команда успешно добавлена в /etc/profile для всех пользователей, кроме root."
else
    echo "Команда уже присутствует в /etc/profile."
fi

Всё, что нужно — подстроить под себя значение переменной line:

line="//share.local.domain.ru/share /mnt/pub/ cifs rw,users,sec=krb5,_netdev,nofail,domain=local.domain.ru"

С помощью этой конструкции происходит монтирование сетевого ресурса через функционал /etc/fstab. Обратите внимание, что выполнять скрипт нужно только после добавления хоста в домен, иначе тарелочка не взлетит.