Автор Тема: Настройка сетевых папок учителя  (Прочитано 175 раз)

Оффлайн gadfly7

  • Участник
  • *
  • Сообщений: 23
Готовое решение для раздачи материалов и сбора ученических работ по локальной сети

Собственно задача невелика. Расшарить на учительском компьютере пару папок для сетевого обмена файлами с учениками. Одну для раздачи ученикам по сети материалов, вторую - для сбора ученических работ.

Что мы хотим получить:

- На учительском компьютере создаются две сетевые папки:
  - "Материалы" - для раздачи файлов ученикам (только чтение)
  - "Сбор работ" - куда ученики сдают готовые задания (запись, но без возможности удалить саму папку)
- Учитель имеет полный доступ к обеим папкам
- Размер папок ограничен (по умолчанию по 2 ГБ), чтобы не забить диск
- Папка "Сбор работ" автоматически очищается от старых файлов (срок задаётся в настройках)
- Всё настраивается одним скриптом за пару минут

Собственно ИМЕННО ЭТО было основной целью. Сделать так, чтобы все настройки выполнялись одним скриптом. Запустил один скрипт - получил готовые папки, можно работать.

Важно: Это решение делалось в Альт Образование 11 (XFCE) и для него. В других дистрибутивах могут быть какие-то свои особенности (например, другое название папки "Рабочий стол"), но при желании скрипт можно адаптировать.

Потребуются

1. Флешка
2. Учительский компьютер
3. Ученические компьютеры (любые - с Windows или Linux), которые будут подключаться по сети


Шаг 0. Смотрим блок настроек

Перед запуском скрипта заглянем в его начало - там есть блок настроек:

# --- БЛОК НАСТРОЕК (Меняйте здесь при необходимости) ---
SIZE_1="2G"             # Размер папки "Материалы"
SIZE_2="2G"             # Размер папки "Сбор работ"
GROUP_NAME="teachers"   # Имя группы для учителей
KEEP_DAYS=14            # Сколько дней хранить файлы в "Сборе"
# -------------------------------------------------------

Здесь можно менять:

- SIZE_1 и SIZE_2 - максимальный размер папок. Можно указать, например, 1G (1 гигабайт) или 512M (512 мегабайт). Важно: размер задаётся ДО первого запуска. Если потом захотите увеличить - придётся делать это вручную (об этом позже).
- GROUP_NAME - имя группы учителей. По умолчанию teachers. Если в школе несколько учителей информатики, их всех потом нужно будет занести в эту группу.
- KEEP_DAYS - срок хранения файлов в папке "Сбор работ". Файлы старше этого количества дней будут автоматически удаляться.


Шаг 1. Создаём скрипт

На флешке создайте новый текстовый файл и назовите его samba_teacher.sh.

Важно про окончания строк! Если вы создаёте файл в Windows (в Блокноте), потом придётся конвертировать - точно так же, как я описывал в предыдущих темах. Напомню об этом позже.

Откройте файл в текстовом редакторе и вставьте туда вот этот код:

#!/bin/bash
# =====================================================================
# НАСТРОЙКА СЕТЕВЫХ ПАПОК ДЛЯ УЧИТЕЛЯ
# =====================================================================

# --- БЛОК НАСТРОЕК (Меняйте здесь при необходимости) ---
SIZE_1="2G"             # Размер папки "Материалы"
SIZE_2="2G"             # Размер папки "Сбор работ"
GROUP_NAME="teachers"   # Имя группы для учителей
KEEP_DAYS=14            # Сколько дней хранить файлы в "Сборе"
# -------------------------------------------------------

if [ "$EUID" -ne 0 ]; then echo "Запустите от имени root (su -)"; exit 1; fi

# Установка ACL (если не установлен)
echo "--- Подготовка. Дождитесь окончания.. ---"
apt-get update && apt-get install -y acl

echo "--- 1. Группы и пользователи ---"
getent group $GROUP_NAME >/dev/null || groupadd $GROUP_NAME

# Определяем пользователя-админа
REAL_USER=${SUDO_USER:-$(logname 2>/dev/null)}
[ -z "$REAL_USER" ] && REAL_USER=$(who | awk '{print $1}' | head -n1)

echo "--- 2. Создание контейнеров (дисков) ---"
mkdir -p /srv/share

for i in 1 2; do
    IMG="/srv/share-${i}.img"
    MNT="/srv/share/share-${i}"
   
    # Определяем нужный размер из переменных в начале
    [ "$i" -eq 1 ] && TARGET_SIZE=$SIZE_1 || TARGET_SIZE=$SIZE_2
   
    if [ ! -f "$IMG" ]; then
        echo "Создание диска $MNT на $TARGET_SIZE..."
        truncate -s "$TARGET_SIZE" "$IMG"
        mkfs.ext4 -F "$IMG"
    else
        echo "Файл $IMG уже существует. Пропускаю создание, чтобы не удалить данные."
    fi
   
    mkdir -p "$MNT"
    # Добавляем в fstab с поддержкой ACL
    if ! grep -q "$IMG" /etc/fstab; then
        echo "$IMG $MNT ext4 defaults,loop,acl 0 2" >> /etc/fstab
    fi
done

mount -a

echo "--- 3. Настройка прав доступа (ACL) ---"
# Корневые папки принадлежат root (защита от удаления самих папок)
chown root:root /srv/share/share-1 /srv/share/share-2
chmod 755 /srv/share/share-1 /srv/share/share-2

# Учителя (группа teachers) получают полные права ВНУТРИ
for folder in /srv/share/share-1 /srv/share/share-2; do
    setfacl -b "$folder"  # Сброс старых прав
    setfacl -m g:$GROUP_NAME:rwx "$folder"
    setfacl -d -m g:$GROUP_NAME:rwx "$folder"
done

echo "--- 4. Настройка Samba (smb.conf) ---"
[ -f /etc/samba/smb.conf ] && cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

cat <<EOF > /etc/samba/smb.conf
[global]
   workgroup = WORKGROUP
   server string = Alt Teacher Server
   map to guest = bad user
   guest account = nobody
   usershare allow guests = yes

[Раздача-Материалы]
   path = /srv/share/share-1
   comment = Только чтение для учеников
   guest ok = yes
   read only = yes
   browseable = yes
   veto files = /lost+found/.Trash-*/
   delete veto files = yes

[Сбор-Работы]
   path = /srv/share/share-2
   comment = Сюда сдаем работы
   guest ok = yes
   read only = no
   browseable = yes
   force group = $GROUP_NAME
   create mask = 0664
   directory mask = 0775
   force create mode = 0664
   force directory mode = 0775
   inherit acls = yes
   map acl inherit = yes
   veto files = /lost+found/.Trash-*/
   delete veto files = yes
EOF

systemctl enable --now smb nmb

echo "--- 5. Скрипт ежедневной очистки ---"
cat <<EOF > /etc/cron.daily/clean_share
#!/bin/bash
# 1. Удаляем файлы старше $KEEP_DAYS дней
find /srv/share/share-2 -type f -mtime +$KEEP_DAYS -delete
# 2. Очищаем скрытые корзины
find /srv/share/share-1/.Trash-* /srv/share/share-2/.Trash-* -mindepth 1 -delete 2>/dev/null
# 3. Удаляем пустые папки (кроме системных)
find /srv/share/share-2 -mindepth 1 -type d -not -path '*/.*' -empty -mtime +$KEEP_DAYS -delete
EOF

chmod +x /etc/cron.daily/clean_share
echo "✅ Скрипт очистки установлен в /etc/cron.daily/ и будет запускаться ежедневно"

echo "--- 6. Создание ярлыков и добавление в группу ---"
# В шаблон профиля
SKEL_DESKTOP="/etc/skel/Рабочий стол"
mkdir -p "$SKEL_DESKTOP"
ln -sf /srv/share/share-1 "$SKEL_DESKTOP/Материалы"
ln -sf /srv/share/share-2 "$SKEL_DESKTOP/Сбор_работ"

# Текущему пользователю (админу)
if [ -n "$REAL_USER" ] && [ "$REAL_USER" != "root" ]; then
    usermod -aG $GROUP_NAME "$REAL_USER"
    USER_HOME=$(eval echo "~$REAL_USER")
    for dt in "Рабочий стол" "Desktop"; do
        if [ -d "$USER_HOME/$dt" ]; then
            ln -sf /srv/share/share-1 "$USER_HOME/$dt/Материалы"
            ln -sf /srv/share/share-2 "$USER_HOME/$dt/Сбор_работ"
            chown -h "$REAL_USER:$GROUP_NAME" "$USER_HOME/$dt/Материалы" "$USER_HOME/$dt/Сбор_работ"
        fi
    done
fi

echo "-------------------------------------------------------"
echo "НАСТРОЙКА ЗАВЕРШЕНА!"
echo "Вместимость папок: Материалы $SIZE_1 / Сбор $SIZE_2."
echo "Очистка папки 'Сбор' ежедневно удаляет файлы старше $KEEP_DAYS дней."
echo "Права записи в папки имеют члены группы $GROUP_NAME."
echo "Администратор, выполнявший этот скрипт, добавлен в $GROUP_NAME автоматически."
echo "Других учителей добавляем через Центр управления (acc)"
echo "или командой usermod -aG $GROUP_NAME имя_пользователя"
echo "ВАЖНО: Для активации прав группы сделайте LOGOUT/LOGIN (или перезагрузку)."
echo "-------------------------------------------------------"

Сохраните файл.


Шаг 2. Запускаем скрипт на учительском компьютере

1. Вставляем флешку.
2. Открываем терминал.
3. Переходим в root:
su -   (вводим пароль администратора)

4. Переходим в папку с флешкой (наш "волшебный" способ с Tab):
   - Введите # cd /run/media/  пока не нажимаем Enter   - Нажмите Tab - подставится ваш логин
   - Нажмите Tab ещё раз - подставится имя флешки
   - Нажмите Enter - мы перешли в корень флешки.

5. Если вы создавали скрипт в Windows, перед запуском нужно исправить окончания строк:
Я использую dos2unix
   Если утилиты dos2unix нет - ставим:
# apt-get update
# apt-get install dos2unix
Исправляем файл
# dos2unix samba_teacher.sh
(А можно вместо этого открыть файл samba_teacher.sh в редакторе Mousepad, в верхнем меню выбрать "Документ" - "Завершение строк" - "Unix (LF)" и пересохранить файл.)

6. Запускаем скрипт:
# sh samba_teacher.sh
Скрипт начнёт работу:
- установит пакет acl (перестраховка, он наверняка уже есть)
- создаст группу учителей (по умолчанию teachers)
- создаст два файла-образа (/srv/share-1.img и /srv/share-2.img) размером по 2 ГБ (задаётся в настройках)
- отформатирует их и пропишет в /etc/fstab для автоматического монтирования
- настроит права доступа через ACL
- создаст конфигурационный файл Samba
- включит службы smb и nmb
- добавит скрипт автоматической очистки в планировщик (anacron)
- создаст ярлыки на рабочем столе для текущего пользователя и для всех новых пользователей
- добавит текущего пользователя в группу учителей

Шаг 3. Перезагрузка

Скрипт добавил текущего пользователя в группу teachers, но чтобы группа заработала, нужно перезапустить сеанс.

Самый надёжный способ - перезагрузить компьютер:
Или можно просто выйти из системы и зайти снова.

После перезагрузки на рабочем столе появятся две папки-ярлыка:
- Материалы (ведёт внутрь образа /srv/share/share-1)
- Сбор работ (ведёт внутрь образа /srv/share/share-2)

Проверьте: вы должны иметь полный доступ - создавать, изменять, удалять файлы в обеих папках.

Шаг 4. Добавляем других учителей

Если в классе работают несколько учителей, их нужно добавить в группу teachers, чтобы они тоже могли полноценно работать с папками.

Способ 1 - через Центр управления

Способ 2 - через терминал:
# usermod -aG teachers имя_пользователя
После этого учитель должен перелогиниться (или перезагрузиться), чтобы группа активировалась.

Ярлыки на рабочем столе у новых пользователей появятся автоматически при первом входе (мы прописали их в /etc/skel). Для уже имеющихся придётся сделать вручную. В эти папки на своём же компьютере они будут ходить локально - сделайте ярлыки на папки /srv/share/share-1 и /srv/share/share-2


Как это устроено

- Папки "Материалы" и "Сбор работ" на самом деле находятся внутри файлов-образов (/srv/share-1.img и /srv/share-2.img). Это такие виртуальные диски.
- Они монтируются в папки /srv/share/share-1 и /srv/share/share-2.
- Права доступа настроены через ACL (расширенные списки контроля доступа): группа teachers имеет полные права внутри, а корневые папки принадлежат root, чтобы никто случайно не удалил сами папки.
- Samba "расшаривает" эти папки по сети: "Раздача-Материалы" - только чтение, "Сбор-Работы" - запись.
- Каждый день (обычно вскоре после включения компьютера) запускается скрипт clean_share, который удаляет из папки "Сбор работ" файлы старше заданного количества дней. Для его запуска используется планировщик anacron.



Как изменить размер папок после создания

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

1. Отключите монтирование (если образ используется):
# umount /srv/share/share-12. Увеличьте размер файла-образа (например, до 3 ГБ):
# truncate -s 3G /srv/share-1.img3. Проверьте и расширьте файловую систему внутри образа:
#e2fsck -f /srv/share-1.img
# resize2fs /srv/share-1.img
4. Примонтируйте обратно:
# mount /srv/share/share-1
Это не сложно, но лучше сразу задать размер с запасом.


Как откатить всё обратно (если передумали)

Если нужно полностью удалить настройки и вернуть систему в исходное состояние:

1. Удалите расшаренные папки из Samba (или переименуйте конфиг):
# mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
# systemctl restart smb nmb

2. Удалите скрипт очистки из папки ежедневных задач:
# rm /etc/cron.daily/clean_share
3. Отмонтируйте образы и удалите их из fstab:
# umount /srv/share/share-1
# umount /srv/share/share-2
   Отредактируйте /etc/fstab и удалите строки с /srv/share-1.img и /srv/share-2.img.

4. Удалите сами файлы-образы:
# rm /srv/share-1.img /srv/share-2.img
5. Удалите папки (опционально):
# rm -rf /srv/share
6. Удалите ярлыки с рабочего стола.


Итак

Если ранее использовали эту и эту темы, то теперь на вашей флешке лежат уже четыре скрипта:

- archive_profile.sh и deploy.sh - для создания "замороженного" профиля ученика
- guest_cleanup.sh - для очистки мусора после гостевых сеансов
- samba_teacher.sh - для настройки сетевых папок учителя

И думаю добавить ещё. Скажем, настройку монтирования ученику этих самых сетевых папок.