Возможно ли временно отключить или заблокировать Samba-ресурс без перезагрузки сервера?

Вопрос или проблема

У меня есть сервер Linux, который предоставляет отдельный общий доступ Samba для пользователей на некоторых Windows-клиентах (каждый пользователь также будет иметь Linux-клиент, который получает доступ к своей общей папке) (у пользователей есть приложение для аутентификации на отдельных устройствах). Я хочу, чтобы эти ресурсы автоматически монтировались с сохраненным паролем, но я хочу настроить TOTP на сервере так, чтобы:

  1. Периодически сервер отключал соединение/блокировал доступ к ресурсу Samba.
  2. (возможно, пользовательское) программное обеспечение/веб-приложение, доступное на Windows-клиенте, вызывало появление запроса для пользователя ввести код TOTP, который будет отправлен на сервер для проверки.
  3. Ввод кода позволит вернуть соединение/доступ к ресурсам.

Важно, чтобы клиент не производил отключение/блокировку, а это происходило через сервер.

Я знаю, что на сервере может быть скрипт для изменения конфигурации Samba, чтобы удалить/закомментировать общий доступ для пользователя и перезапустить сервер (и установить время так, чтобы это не вызвало конфликт с другими тайм-аутами), но я предполагаю, что перезапуск сервера Samba может быть разрушительным для других пользователей (даже если это короткое время) и может привести к порче файлов для файлов, которые активно изменяются или передаются. Существует ли вариант Samba для этого, который может вступить в силу после перезагрузки конфигурации, а не перезапуска?

У меня нет контроля над IP-адресами, с которыми подключаются клиенты, поэтому я не могу реализовать временное правило брандмауэра, чтобы заблокировать доступ.

Можно ли это сделать с помощью ACL? Эти ресурсы содержат тысячи файлов. Можно ли изменить корневой каталог общего доступа на другого владельца и сделать так, чтобы файлы внутри унаследовали разрешения, не тратя время на ожидание обновления разрешений для всех файлов (я хочу предотвратить указание пути за пределами корневого каталога общего доступа для доступа к нему, потому что разрешения для него не были изменены)?

Я предполагаю, что если ответ «нет» на все вышеперечисленное, я мог бы владеть общим доступом Samba как другой пользователь, хранить файлы общего доступа Samba в другом месте, сделать связывающее монтирование (это вместо символической ссылки, чтобы уменьшить проблемы с SELinux) из другого местоположения в Samba общий доступ, а затем размонтировать по мере необходимости, и поскольку фактический общий доступ Samba принадлежит другому пользователю с ограничительными разрешениями, это вызовет ошибки доступа приложений, желающих записать или прочитать данные, но я не уверен, как это или другие возможности повлияют на активную передачу файлов, приложения в процессе записи или другое.

Вы можете отключить ACL для общего доступа, используя sharesec. Например, удалить всех (я думаю, что отсутствие ACL означает отсутствие доступа):

# sharesec --view-all

[smbshare1]
REVISION:1
CONTROL:SR|DP
OWNER:
GROUP:
ACL:S-1-1-0:ALLOWED/0x0/FULL

# sharesec -r S-1-1-0:ALLOWED/0x0/FULL smbshare1

Но вы также можете явно запретить всем:

# sharesec -a S-1-1-0:DENIED/0x0/FULL smbshare1

S-1-1-0 — это все.

Ответ или решение

Да, временно отключить или заблокировать Samba-сеть без перезагрузки сервера возможно, и существуют несколько методов для этого. Рассмотрим наиболее эффективные подходы, которые соответствуют вашим требованиям и учитывают сложность сценария.

1. Использование управления ACL

Система контроля доступа (ACL) позволяет управлять правами пользователей на доступ к ресурсам на уровне файлов и директорий. Вы можете использовать команду sharesec для управления правами доступа к вашим Samba-шарам. Такой подход позволит вам временно отключить доступ к шаре для всех пользователей, не требуя перезагрузки сервера.

Пример использования sharesec

  1. Показать текущие настройки ACL:

    sharesec --view-all
  2. Удалить доступ для всех пользователей:

    sharesec -r S-1-1-0:ALLOWED/0x0/FULL smbshare1
  3. Явно запретить доступ для всех:

    sharesec -a S-1-1-0:DENIED/0x0/FULL smbshare1

Во втором случае вы просто запрещаете доступ для всех пользователей. Когда вы захотите восстановить доступ, просто исправьте права с помощью аналогичных команд для разрешения.

2. Использование скриптов для изменения прав доступа

Если вам необходимо сделать это по расписанию, вы можете создать скрипт, который будет использовать setfacl для изменения прав доступа к директории вашей Samba-share.

Пример скрипта

#!/bin/bash
# Отключение доступа к Samba-шаре
setfacl -m u:username:0 /path/to/samba/share
# Уведомление пользователя о необходимости ввести TOTP
echo "Пожалуйста, введите TOTP-код для разблокировки доступа."
# Логика для проверки кода TOTP...

3. Использование временных привилегий

Если у вас есть возможность, вы можете временно изменить владельца директории Samba-шары на системного пользователя с ограниченными правами, что также заблокирует доступ к файлам.

chown newuser:newgroup /path/to/samba/share

Однако этот метод потребует ручного восстановления прав доступа, что может стать неудобным.

4. Виртуальные файлы и точки монтирования

Другой подход – использование временного связывания (bind mount) из другой директории, к которой у пользователей нет доступа. Вам нужно будет создать отдельное место для хранения файлов и использовать «bind mount», чтобы создать доступную точку монтирования для Samba.

mount --bind /path/to/secure/location /path/to/samba/share
# Для отключения
umount /path/to/samba/share

Этот метод безопасен, но может вызвать проблемы, если пользователи в данный момент работают с файлами на шаре.

Рекомендации

  1. Мониторинг активных сессий: Настоятельно рекомендуется отслеживать активные сессии Samba, чтобы предотвратить отключение пользователей, которые в данный момент работают с файлами.

  2. Тестирование подходов: Перед внедрением любого из предложенных решений, протестируйте их в контролируемой среде, чтобы убедиться в отсутствии негативного влияния.

  3. Документация: Подготовьте четкую документацию для пользователей, чтобы не вызвать недопонимание при временном отключении доступа.

В заключение, существует несколько способов временно отключить доступ к Samba shares без перезагрузки сервера. Вам необходимо будет выбрать метод, который соответствует вашим требованиям и особенностям вашей среды. Использование ACL и управления правами является одним из наиболее простых и безопасных подходов для реализации вашей задачи по организации временного доступа.

Оцените материал
Добавить комментарий

Капча загружается...