Представь, что ты развернул файловый сервер на TrueNAS Scale, создал общую папку для команды, но новые файлы и подкаталоги наследуют не те права доступа, которые ты ожидал. Или при попытке настроить доступ через SMB или NFS сталкиваешься с ошибками "Permission denied". Давай разберем, как правильно настроить рекурсивные разрешения для общих папок в TrueNAS Scale, чтобы твоя файловая система была одновременно безопасной и удобной.
Что такое рекурсивные разрешения и зачем они нужны?
Рекурсивное применение разрешений — это процесс изменения прав доступа не только для указанного каталога, но и для всех файлов и подкаталогов внутри него. В контексте TrueNAS Scale это критически важно для:
- Корректной работы SMB/CIFS общих ресурсов в смешанных сетях (Windows/Linux/macOS)
- Настройки NFS-шаринга для Unix-подобных систем
- Создания структурированных рабочих пространств с единой политикой доступа
- Миграции данных между системами с сохранением нужных атрибутов
Подготовка: Создание набора данных (Dataset) с правильными ACL
Перед настройкой общей папки нужно правильно создать Dataset — базовую единицу хранения в TrueNAS. От его начальных настроек зависит многое.
Шаг 1: Создание Dataset через веб-интерфейс
- Перейди в Storage → Datasets
- Выбери родительский пул и нажми Add Dataset
- В разделе Advanced Options → Share Type выбери:
| Тип доступа | Когда использовать | Влияние на ACL |
|---|---|---|
| Generic | Универсальный доступ, смешанные ОС | Использует POSIX ACL с расширенными возможностями |
| SMB | Преимущественно Windows-клиенты | Включает поддержку Windows ACL (NFSv4) |
| Apps | Для контейнеров и приложений TrueNAS | Специальные настройки для изоляции |
Шаг 2: Настройка базовых разрешений при создании
В том же окне создания Dataset прокрути до Advanced Options → ACL Mode:
ACL Type: OPEN (для SMB) или PASSTHROUGH (для NFS/смешанного)
ACL Mode: RESTRICTED (рекомендуется)
Case Sensitivity: SENSITIVE (если важен регистр в именах)
Настройка рекурсивных разрешений через веб-интерфейс
Метод 1: Редактор ACL (рекомендуемый способ)
- Перейди в Storage → Datasets
- Найди нужный Dataset, нажми на три точки → Edit Permissions
- Выбери Use ACL Manager
- В интерфейсе ACL Manager:
1. Добавь пользователей/группы через "Add Item"
2. Для каждого элемента задай:
- Permission: Read/Write/Execute
- Type: Allow/Deny
- Flags: File Inherit / Directory Inherit
3. ВАЖНО: Отметь "Apply permissions recursively"
4. Также отметь "Apply permissions to child datasets" если нужно
Флаги наследования (Flags) — это ключ к рекурсивности:
- File Inherit (f): Правило применяется к новым файлам
- Directory Inherit (d): Правило применяется к новым каталогам
- Inherit Only (i): Правило только для наследования (не для текущего каталога)
Метод 2: Через оболочку (Shell) с максимальным контролем
Иногда веб-интерфейс не дает нужной гибкости. Давай подключимся по SSH и настроим всё вручную.
# 1. Подключись к TrueNAS Scale по SSH
ssh admin@truenas.local
# 2. Перейди в корень твоего Dataset
cd /mnt/pool-name/dataset-name
# 3. Просмотр текущих разрешений (ACL)
getfacl .
# 4. Пример: Рекурсивная установка владельца и группы
chown -R appuser:appgroup .
# 5. Пример: Рекурсивная установка базовых прав 755 для каталогов и 644 для файлов
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
# 6. Более продвинутый вариант с setfacl (расширенные ACL)
# Установка рекурсивных ACL для пользователя 'john' с полными правами
setfacl -R -m u:john:rwx .
# 7. Установка наследования: новые файлы получат rw-, новые каталоги rwx
setfacl -R -m d:u:john:rwx .
# 8. Просмотр результата с рекурсией
getfacl -R . | less
Интеграция с общими ресурсами (SMB/NFS)
Настройка SMB-шары с рекурсивными правами
- Перейди в Sharing → SMB → Add
- Выбери созданный Dataset
- В Advanced Options обрати внимание на:
Auxiliary Parameters: # Дополнительные smb.conf параметры
force user = appuser # Все файлы создаются от имени appuser
force group = appgroup # Все файлы создаются с группой appgroup
create mask = 0664 # Права для новых файлов
directory mask = 0775 # Права для новых каталогов
inherit permissions = yes # Наследовать права родителя
inherit owner = yes # Наследовать владельца
Настройка NFS-шары
Для NFS важно, чтобы UID/GID пользователей на клиенте совпадали с UID/GID на сервере.
# На клиентской машине (например, Ubuntu)
# 1. Узнай UID пользователя
id -u username # Например: 1001
# 2. На TrueNAS создай пользователя с таким же UID
# Через веб: Credentials → Local Users → Add
# Или через shell:
sudo midclt call user.create '{
"username": "remoteuser",
"full_name": "Remote User",
"uid": 1001,
"group": 1001,
"password": "securepassword"
}'
Типичные проблемы и решения
Проблема 1: Новые файлы не наследуют права
Решение: Проверь флаги наследования в ACL:
# Просмотр ACL с флагами
getfacl dataset-name/
# Должны быть строки типа:
# default:user::rwx
# default:user:john:rwx # default означает наследование
# Если default-записей нет, добавь их:
setfacl -m d:u:john:rwx dataset-name/
Проблема 2: Windows-клиенты не видят файлы
Решение: Настрой правильного владельца и проверь SMB-параметры:
# 1. Установи владельца, которого знает Windows
chown -R 'DOMAIN\\user' /mnt/pool/dataset
# 2. Или используй force user в SMB-настройках
# force user = windowsuser
# map archive = no # Отключи атрибут archive для совместимости
Проблема 3: Рекурсивные изменения затрагивают скрытые файлы
Решение: Используй точные команды find:
# Изменить права только для обычных файлов (не скрытых, не системных)
find . -type f -name "*" ! -name ".*" -exec chmod 644 {} \;
# Или исключить определенные каталоги
find . -type f -path "./backup/*" -prune -o -exec chmod 644 {} \;
Автоматизация через задачи (Tasks)
Для поддержания порядка создай периодическую задачу:
- Перейди в Tasks → Cron Jobs
- Нажми Add
- Настрой команду для исправления прав:
# Пример команды для Cron
find /mnt/pool/dataset -type d -exec chmod 755 {} \;
find /mnt/pool/dataset -type f -exec chmod 644 {} \;
chown -R appuser:appgroup /mnt/pool/dataset
# Или скрипт с логированием
#!/bin/bash
LOG="/var/log/fix-permissions.log"
echo "$(date): Starting permission fix" >> $LOG
find /mnt/pool/dataset -type d -exec chmod 755 {} \; 2>> $LOG
find /mnt/pool/dataset -type f -exec chmod 644 {} \; 2>> $LOG
echo "$(date): Permission fix completed" >> $LOG
Проверка и мониторинг
После настройки проверь работу:
# 1. Проверь рекурсивные права
find /mnt/pool/dataset -printf "%m %u:%g %p\n" | head -20
# 2. Проверь ACL рекурсивно
getfacl -R /mnt/pool/dataset | grep -E "(user|group):.*:rwx" | head -10
# 3. Создай тестовые файлы и проверь наследование
touch /mnt/pool/dataset/testfile.txt
mkdir /mnt/pool/dataset/testdir
ls -la /mnt/pool/dataset/test*
getfacl /mnt/pool/dataset/testfile.txt
# 4. Проверь доступ с клиента
# Для SMB:
smbclient //truenas/dataset-name -U username
# Для NFS:
showmount -e truenas.local
Правильная настройка рекурсивных разрешений в TrueNAS Scale — это не разовая акция, а процесс. Начни с четкого плана: кто, что и как должен делать с файлами. Настрой ACL с наследованием при создании Dataset. Протестируй на небольшом наборе данных. И только потом масштабируй на рабочие директории. Помни, что безопасность и удобство — это баланс: слишком открытые права приведут к уязвимостям, слишком строгие — к неработоспособности.
TrueNAS Scale дает все инструменты для тонкой настройки. Веб-интерфейс подходит для базовых сценариев, а Shell — для сложных. Главное — понимать, что ты делаешь и зачем. Удачи в настройке!