Готовое решение для раздачи материалов и сбора ученических работ по локальной сетиСобственно задача невелика. Расшарить на учительском компьютере пару папок для сетевого обмена файлами с учениками. Одну для раздачи ученикам по сети материалов, вторую - для сбора ученических работ.
Что мы хотим получить:- На
учительском компьютере создаются две сетевые папки:
-
"Материалы" - для раздачи файлов ученикам (только чтение)
-
"Сбор работ" - куда ученики сдают готовые задания (запись, но без возможности удалить саму папку)
- Учитель имеет полный доступ к обеим папкам
- Размер папок ограничен (по умолчанию по 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.img4. Примонтируйте обратно:
# mount /srv/share/share-1Это не сложно, но лучше сразу задать размер с запасом.
Как откатить всё обратно (если передумали)Если нужно полностью удалить настройки и вернуть систему в исходное состояние:
1. Удалите расшаренные папки из Samba (или переименуйте конфиг):
# mv /etc/samba/smb.conf /etc/samba/smb.conf.bak
# systemctl restart smb nmb2. Удалите скрипт очистки из папки ежедневных задач:
# rm /etc/cron.daily/clean_share3. Отмонтируйте образы и удалите их из 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.img5. Удалите папки (опционально):
# rm -rf /srv/share6. Удалите ярлыки с рабочего стола.
ИтакЕсли ранее использовали
эту и
эту темы, то теперь на вашей флешке лежат уже четыре скрипта:
-
archive_profile.sh и
deploy.sh - для создания "замороженного" профиля ученика
-
guest_cleanup.sh - для очистки мусора после гостевых сеансов
-
samba_teacher.sh - для настройки сетевых папок учителя
И думаю добавить ещё. Скажем, настройку монтирования ученику этих самых сетевых папок.