Внимание! Некропостинг!
Заметка из цикла постов про настройку операционной системы РЕД ОС версии 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. Обратите внимание, что выполнять скрипт нужно только после добавления хоста в домен, иначе тарелочка не взлетит.