TrueNAS доступ к папкам: настройка SMB, NFS, ACL за 5 шагов | AdminWiki

TrueNAS доступ к папкам: полное руководство по настройке и управлению

23 января 2026 8 мин. чтения #acl #devops #nas #nfs #samba #truenas #хранение данных

Представь, что ты развернул TrueNAS как централизованное хранилище для своей команды разработки или домашней лаборатории. Диски настроены, пулы созданы, но теперь встает главный вопрос: как организовать доступ к папкам для разных пользователей и систем? Давай разберем эту задачу как настоящий DevOps инженер — системно и с пониманием механизмов работы.

Основы архитектуры доступа в TrueNAS

Перед тем как перейти к настройке доступа к папкам, важно понять базовые концепции. TrueNAS использует классическую Unix-подобную модель прав доступа, расширенную ACL (Access Control Lists). Каждый файл и папка имеют:

  • Владельца (owner) и группу (group)
  • Базовые права: чтение (r), запись (w), выполнение (x)
  • Расширенные ACL для тонкой настройки
  • Разные протоколы доступа: SMB (Windows), NFS (Linux), AFP (macOS)
Важно: Права доступа на уровне файловой системы (ZFS) имеют приоритет над настройками в протоколах. Сначала настраивай базовые права, затем протоколы.

Шаг 1: Создание пользователей и групп

Без правильной структуры пользователей и групп truenas доступ к папкам превратится в хаос. Создадим базовую структуру:

webui
# Путь в веб-интерфейсе:
# Credentials → Local Users → Add
# Credentials → Local Groups → Add

# Пример создания через CLI (если предпочитаешь терминал):
sudo midclt call user.create '{
  "username": "dev_user",
  "full_name": "Developer User",
  "password": "secure_password_123",
  "group_create": true,
  "groups": [1001]
}'

sudo midclt call group.create '{
  "name": "developers",
  "gid": 1001
}'

Рекомендуемая структура групп:

Группа GID Назначение
admins 1000 Полный доступ ко всем ресурсам
developers 1001 Доступ к папкам с кодом и билдами
media_users 1002 Только чтение медиатеки
backup 1003 Доступ только для записи бэкапов

Шаг 2: Создание и настройка датасетов (папок)

В TrueNAS папки — это датасеты ZFS. Создадим структуру для проекта:

webui
# Storage → Pools → три точки у пула → Add Dataset

# Параметры датасета:
Name: project_alpha
Comments: Основной проект Alpha

# ACL Type: NFSv4 (рекомендуется для смешанных сред)
# Case Sensitivity: Sensitive (для разработки)
# Share Type: Generic

# После создания нажимаем на три точки → Edit Permissions

Настройка прав через ACL Editor:

В редакторе ACL установи:

  • Owner: root (или специальный пользователь)
  • Owner Group: admins
  • Apply permissions recursively: ✓ (чтобы применить ко всем файлам внутри)
  • Apply permissions to child datasets: ✓ (если создаешь вложенные датасеты)
Внимание: Не используй ACL Type "POSIX" в смешанных средах (Windows + Linux). Это приведет к проблемам с сохранением прав при доступе через SMB.

Шаг 3: Настройка SMB доступа (для Windows и Linux)

SMB (Samba) — самый распространенный протокол. Настроим шару для разработчиков:

webui
# Sharing → Windows Shares (SMB) → Add

# Basic параметры:
Path: /mnt/pool_name/project_alpha
Name: project_alpha
Purpose: No presets (выбираем Default для полного контроля)

# Advanced параметры:
Auxiliary Parameters: # Дополнительные настройки Samba
  veto files = /.git/.idea/.vscode/ # Скрываем служебные папки
  delete veto files = yes
  hide dot files = yes
  guest ok = no # Запрещаем гостевой доступ
  valid users = @developers @admins
  write list = @developers @admins
  read list = @media_users

Проверка конфигурации SMB:

bash
# Проверяем конфиг Samba
testparm -s

# Смотрим активные подключения
smbstatus

# Перезагружаем SMB службу
sudo midclt call service.restart 'cifs'

Шаг 4: Настройка NFS доступа (для Linux и Kubernetes)

NFS необходим для Linux-серверов, Docker хостов и Kubernetes Persistent Volumes:

webui
# Sharing → Unix Shares (NFS) → Add

# Параметры:
Path: /mnt/pool_name/project_alpha

# Networks: 192.168.1.0/24 (или конкретные IP)
# Authorized Networks: 192.168.1.0/24

# Mapall User: root (или специальный пользователь)
# Mapall Group: admins

# Security: sys (для локальной сети)
# Enabled NFSv4: ✓

Пример монтирования на Linux клиенте:

bash
# Устанавливаем NFS клиент
sudo apt install nfs-common  # Debian/Ubuntu
sudo yum install nfs-utils   # RHEL/CentOS

# Создаем точку монтирования
sudo mkdir -p /mnt/nas/project_alpha

# Монтируем NFS шару
sudo mount -t nfs -o vers=4.2,rw,hard,intr \
  192.168.1.100:/mnt/pool_name/project_alpha \
  /mnt/nas/project_alpha

# Для автоматического монтирования при загрузке
# Добавляем в /etc/fstab:
192.168.1.100:/mnt/pool_name/project_alpha  /mnt/nas/project_alpha  nfs  vers=4.2,rw,hard,intr,noauto,x-systemd.automount  0  0

Шаг 5: Расширенные ACL и наследование прав

Для сложных сценариев используем расширенные ACL. Пример — разные права для разных подпапок:

bash
# Устанавливаем ACL через CLI
# Давай представим структуру:
# /project_alpha
#   /source_code    (только developers)
#   /builds         (developers + CI система)
#   /documentation  (все читают, только tech writers пишут)

# Устанавливаем наследуемые ACL для source_code
setfacl -R -m g:developers:rwx /mnt/pool_name/project_alpha/source_code
setfacl -R -d -m g:developers:rwx /mnt/pool_name/project_alpha/source_code

# Для builds даем доступ CI системе (отдельный пользователь)
setfacl -R -m u:ci_system:rwx /mnt/pool_name/project_alpha/builds
setfacl -R -d -m u:ci_system:rwx /mnt/pool_name/project_alpha/builds

# Смотрим текущие ACL
getfacl /mnt/pool_name/project_alpha/source_code

Маска доступа (Access Mask):

Важное понятие в ACL — маска, которая фильтрует максимальные права для групп и пользователей:

  • rwx — полные права
  • r-x — только чтение и выполнение
  • r-- — только чтение
  • --- — нет прав (но может наследовать от родителя)

Диагностика проблем с доступом

Когда truenas настройка доступа к папкам не работает, используй этот чеклист:

bash
# 1. Проверяем базовые права
ls -la /mnt/pool_name/project_alpha

# 2. Смотрим ACL
getfacl /mnt/pool_name/project_alpha

# 3. Проверяем пользователя и группы
id username

# 4. Логи Samba
tail -f /var/log/samba4/log.smbd

# 5. Логи NFS
tail -f /var/log/messages | grep nfs

# 6. Проверяем сетевую доступность
ping 192.168.1.100
nc -zv 192.168.1.100 445  # SMB порт
nc -zv 192.168.1.100 2049 # NFS порт

# 7. Перезапускаем службы
sudo midclt call service.restart 'cifs'
sudo midclt call service.restart 'nfs'
Совет DevOps: Для production сред автоматизируй настройку через TrueNAS API или Ansible. Это обеспечит консистентность и возможность восстановления из кода.

Автоматизация через API

Для DevOps подходов используй TrueNAS API:

python
import requests
import json

class TrueNASClient:
    def __init__(self, host, api_key):
        self.base_url = f"https://{host}/api/v2.0"
        self.headers = {
            "Authorization": f"Bearer {api_key}",
            "Content-Type": "application/json"
        }
    
    def create_smb_share(self, path, name, comment=""):
        """Создание SMB шары"""
        data = {
            "path": path,
            "name": name,
            "comment": comment,
            "purpose": "DEFAULT_SHARE",
            "guestok": False,
            "abe": True  # Access Based Enumeration
        }
        
        response = requests.post(
            f"{self.base_url}/sharing/smb",
            headers=self.headers,
            data=json.dumps(data),
            verify=False  # для самоподписанных сертификатов
        )
        return response.json()
    
    def set_dataset_permissions(self, dataset_path, owner, group, mode="755"):
        """Настройка прав датасета"""
        data = {
            "path": dataset_path,
            "mode": mode,
            "user": owner,
            "group": group,
            "acl": [],
            "recursive": True
        }
        
        response = requests.post(
            f"{self.base_url}/filesystem/setperm",
            headers=self.headers,
            data=json.dumps(data)
        )
        return response.json()

# Использование
nas = TrueNASClient("192.168.1.100", "your-api-key-here")
result = nas.create_smb_share(
    path="/mnt/pool/project_alpha",
    name="project_alpha",
    comment="Automated share for developers"
)
print(f"Share created: {result}")

Безопасность и лучшие практики

  • Минимальные привилегии: Давай только те права, которые действительно нужны
  • Сетевые ограничения: Настрой firewalls и доступ только с доверенных подсетей
  • Регулярный аудит: Раз в месяц проверяй who имеет доступ к данным
  • Шифрование трафика: Для SMB используй SMB3 с шифрованием, для NFS — VPN или IPsec
  • Бэкап ACL: Экспортируй настройки прав и храни в git

FAQ: Частые вопросы по доступу к папкам

Вопрос: Почему пользователи Windows не видят все папки?

Включи Access Based Enumeration (ABE) в настройках SMB шары. Это скроет папки, к которым у пользователя нет доступа.

Вопрос: Как дать доступ только на запись (для бэкапов)?

Создай отдельную папку, установи ACL: setfacl -m u:backup_user:wx. Пользователь сможет создавать файлы, но не читать существующие.

Вопрос: NFS монтируется, но нельзя создать файлы

Проверь параметры монтирования: нужно rw (read-write) и no_root_squash если пишешь от root. Также проверь права на уровне ZFS.

Вопрос: Как мигрировать права из старой NAS?

Используй getfacl -R /старая/папка > права.txt на старом сервере и setfacl --restore=права.txt на TrueNAS. Не забудь синхронизировать UID/GID пользователей.

Важное напоминание: После изменения прав всегда тестируй доступ с учетной записи обычного пользователя, а не администратора. Частая ошибка — проверять от root и думать, что все работает.

Теперь у тебя есть полное руководство по truenas доступ к папкам. Помни главный принцип: начинай с простой структуры, документируй изменения, используй группы вместо индивидуальных прав. И самое важное — автоматизируй там, где это возможно. Удачи в настройке!

Поделиться:
Сохранить гайд? В закладки браузера