Представь, что ты развернул TrueNAS как централизованное хранилище для своей команды разработки или домашней лаборатории. Диски настроены, пулы созданы, но теперь встает главный вопрос: как организовать доступ к папкам для разных пользователей и систем? Давай разберем эту задачу как настоящий DevOps инженер — системно и с пониманием механизмов работы.
Основы архитектуры доступа в TrueNAS
Перед тем как перейти к настройке доступа к папкам, важно понять базовые концепции. TrueNAS использует классическую Unix-подобную модель прав доступа, расширенную ACL (Access Control Lists). Каждый файл и папка имеют:
- Владельца (owner) и группу (group)
- Базовые права: чтение (r), запись (w), выполнение (x)
- Расширенные ACL для тонкой настройки
- Разные протоколы доступа: SMB (Windows), NFS (Linux), AFP (macOS)
Шаг 1: Создание пользователей и групп
Без правильной структуры пользователей и групп truenas доступ к папкам превратится в хаос. Создадим базовую структуру:
# Путь в веб-интерфейсе:
# 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. Создадим структуру для проекта:
# 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: ✓ (если создаешь вложенные датасеты)
Шаг 3: Настройка SMB доступа (для Windows и Linux)
SMB (Samba) — самый распространенный протокол. Настроим шару для разработчиков:
# 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:
# Проверяем конфиг Samba
testparm -s
# Смотрим активные подключения
smbstatus
# Перезагружаем SMB службу
sudo midclt call service.restart 'cifs'
Шаг 4: Настройка NFS доступа (для Linux и Kubernetes)
NFS необходим для Linux-серверов, Docker хостов и Kubernetes Persistent Volumes:
# 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 клиенте:
# Устанавливаем 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. Пример — разные права для разных подпапок:
# Устанавливаем 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 настройка доступа к папкам не работает, используй этот чеклист:
# 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'
Автоматизация через API
Для DevOps подходов используй TrueNAS API:
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 пользователей.
Теперь у тебя есть полное руководство по truenas доступ к папкам. Помни главный принцип: начинай с простой структуры, документируй изменения, используй группы вместо индивидуальных прав. И самое важное — автоматизируй там, где это возможно. Удачи в настройке!