Комьюнити, привет.
Решил оставить данную записку на форуме в качестве инструкции для новичков, поэтому местами будет избыточно подробно.
К написанию текста сподвигла потребность в организации домашнего NAS на базе Samba сервера от TurnKey File Server.
Изначально всё было настроено по видео от товарища Stilicho2011, но хотелось чего-то большего, чем просто гостевая файловая шара без разгарничения доступов.
Краткое содержание:
- Настройка директории в Proxmox и монтирование в LXC с TurnKey File Server
- Настройка Turnkey FileServer
- Настройка подключения сетевой директории к клиентской машине на базе Proxmox c возможностью монтирования в unprivileged LXC контейнер
Версии ПО:
PVE 9.0.10
TurnKey File Server 18.0-1
Общая схема того, что будем реализовывать

→ Настройка директории в Proxmox и монтирование в LXC с TurnKey File Server
Исходим из того, что у вас уже подключен диск к гипервизору PVE и создан storage. В моём случае это жёсткий HDD_USB_1Tb смонтированный в качестве Directory, который я полностью отдал под нужды сетевого хранилища (NAS)
-
Изменить владельца для директории в Proxmox
chown 101000:101000 /mnt/HDD_USB_1Tb/
где 101000:101000 - uid и gid соответствующий будущему пользователю samba 1000:1000 в LXC (uid_proxmox=uid_lxc+100000, gid_proxmox=gid_lxc+100000) -
Изменить права директории
chmod 775 /mnt/HDD_USB_1Tb/
где 775 - полный доступ для владельца и группы и режим чтения для всех остальных пользователей. -
Проверить
ls -lh
Пример вывода:
drwxrwxr-x 6 101000 101000 4.0K Oct 25 23:32 HDD_USB_1Tb
- Смонтировать директорию в LXC с NAS (выполнить в Proxmox)
pct set ID_LXC -mp0 /mnt/HDD_USB_1Tb/,mp=/mnt/datasets/
где:
ID_LXC - ID вашего LXC TurnKey File Server
-mp0 - точка монтирования (если к LXC уже примонтированы другие директории, то указывается любой свободный номер точки монтирования -mp1, -mp2, …)
→ Настройка Turnkey FileServer
- Создать группы gid в TurnKey File Server через интерфейс Webmin
5.1 System → Users and Groups → Local Groups → Create a new group
5.1.1 Group name → smb_write
5.1.2 Group ID → 1000
5.1.3 Create group in other modules → Yes
5.1.4 Create
5.2 Sysytem → Users and Groups → Local Groups → Create a new group
5.2.1 Group name → smb_read
5.2.2 Group ID → 1001
5.2.3 Create group in other modules → Yes
5.2.4 Create
На этом шаге мы создали две группы для последующего разграничения доступа: smb_write - здесь будут пользователи, которые смогут читать/писать, а smb_read соответстенно для пользователей, которые смогут только читать контент.
-
Создать пользователей в LXC c TurnkeyFileserver через интерфейс Webmin
>>Владелец директории (опционально)
6.1 System → Users and Groups → Local Groups → Create a new user
6.1.1 Username → samba
6.1.2 User ID → 1000
6.1.3 Shell → /usr/bin/nologin (отключение возможности авторизации под данным пользователем в LXC)
6.1.4 Password → Normal password → ввести пароль для пользователя
6.1.5 Primary group → smb_write
6.1.6 Create home directory → No
6.1.7 Copy template files to home directory → No
6.1.8 Create user in other modules → Yes
6.1.9 Create
>>Пользователь с полномочиями на запись
6.2 Sysytem → Users and Groups → Local Groups → Create a new user
6.2.1 Username → user_write
6.2.2 User ID → 1001
6.2.3 Shell → /usr/bin/nologin (отключение возможности авторизации под данным пользователем в LXC)
6.2.4 Password → Normal password → ввести пароль для пользователя
6.2.5 Primary group → smb_write
6.2.6 Create home directory → No
6.2.7 Copy template files to home directory → No
6.2.8 Create user in other modules → Yes
6.2.9 Create
>>Пользователь с полномочиями на чтение
6.3 Sysytem → Users and Groups → Local Groups → Create a new user
6.3.1 Username → user_read
6.3.2 User ID → 1002
6.3.3 Shell → /usr/bin/nologin (отключение возможности авторизации под данным пользователем в LXC)
6.3.4 Password → Normal password → ввести пароль для пользователя
6.3.5 Primary group → smb_read
6.3.6 Create home directory → No
6.3.7 Copy template files to home directory → No
6.3.8 Create user in other modules → Yes
6.3.9 Create
Здесь мы создали технического пользователя samba, который будет владельцем сетевой папки, просто для красоты, можно обойтесь и без этого и назначить владельцем любого подходящего вам пользователя.
Так же добавили двух пользователей и поместили их в группы, которым будут предоставлены разные права: пользователь user_write, состоящий в группе smb_write сможет читать/писать, а user_read, состоящий в группе smb_read сможет только читать контент. -
Создать директорию для сетевого доступа через интерфейс Webmin
7.1 Tools → File Manager → перейти в /mnt/datasets → File → Create new directory
7.2 New directory name → share
7.3 Изменить владелца
7.3.1 Правый клик по директории → Properties → Change ownership
7.3.2 User name → samba
7.3.3 Group name → smb_write
7.3.4 Change
7.4 Изменить разрешения
7.4.1 Правый клик на директорию → Properties → Change permissions
7.4.2 Mode → 2775
где
2 - это setgid, все новые файлы и подкаталоги, созданные внутри такого каталога, наследуют группу родительского каталога (для порядка и предупреждения возможных проблем)
775 - полный доступ владельца samba (первый бит 7) и группы smb_write (второй бит 7), а для всех остальных пользователей только чтение (последний бит 5).
Таким образом была создана директория с разрешениями 2775 для последующего предоставления к ней сетевого доступа. -
Настройка сетевого доступа через интерфейс Webmin
8.1 Создание сетевого доступа для дирекории
8.1.1 Servers → Samba Windows File Sharing → Create a new file share
8.1.2 Share name → share
8.1.3 Directory to share → /mnt/datasets/share
8.1.4 Create with permissions → 775 (ни на что не влияет, т.к. разрешения на дирекотрию заданы на уровне файловой системы - п.7.3.2)
8.1.5 Available? → Yes
8.1.6 Browseable? → Yes
8.1.7 Create
8.2 Настройка доступа
8.2.1 Servers → Samba Windows File Sharing → share → Other Share Options → Security and Access Control
8.2.2 Writable? → No
8.2.3 Guest Access? → No
8.2.4 Valid groups → smb_write, smb_read
8.2.5 Read/write groups → smb_write
8.2.6 Save
8.3 Настройка разрешений
8.3.1 Servers → Samba Windows File Sharing → share → Other Share Options → File Permissions
8.3.2 New Unix file mode → 666
8.3.3 New Unix directory mode → 777
8.3.4 Save
8.4 Применение настроек
8.4.1 Servers → Samba Windows File Sharing → Restart Samba Servers (внизу страницы)
Разбираемся, что здесь произошло.
Для директории share был настроен сетевой доступ:
- Только для зарегистрированных пользователей (samba, user_write, user_read).
- Только для пользователей из разрешённых групп (Valid groups → smb_write и smb_read)
- Чтение и запись только для пользователей, состоящих в группе smb_write → user_write, samba.
- Только чтение для всех остальных пользователей, состоящих в группе smb_read → user_read.
- Создаваемые в директории share файлы будут иметь разрешения 666, а папки 777.
Важно отметить, что существует вариативность методов разграничения доступов.
К примеру можно модифицировать настройки выше таким образом чтобы директории share были присовены права 2777, где последний бит 7 означает полный доступ для всех остальных пользователей (в нашем случае для user_read) и ограничение доступа происходит уже на уровне настроек samba сервера, а не файловой системы (как в случае с правами 2775).
Настройки для варианта с разрешениями 2777
-
Создать директорию для сетевого доступа через интерфейс Webmin
7.1 Tools → File Manager → перейти в /mnt/datasets → File → Create new directory
7.2 New directory name → share
7.3 Изменить разрешения
7.3.1 Правый клик на директорию → Properties → Change permissions
7.3.2 Mode → 2777
где
2 - это setgid, все новые файлы и подкаталоги, созданные внутри такого каталога, наследуют группу родительского каталога (для порядка и предупреждения возможных проблем)
777 - полный доступ. Это важно для дальнейшей настройки разгарничения доступа (аналогично п.2 выше по тексту).
7.3.3 Change
7.4 Изменить владелца
7.4.1 Правый клик на директорию → Properties → Change ownership
7.4.2 User name → samba
7.4.3 Group name → smb_write
7.4.4 Change
Была создана директория с разрешениями 2777 для последующего предоставления к ней сетевого доступа. -
Настройка сетевого доступа через интерфейс Webmin
8.1 Создание сетевого доступа для дирекории
8.1.1 Servers → Samba Windows File Sharing → Create a new file share
8.1.2 Share name → share
8.1.3 Directory to share → /mnt/datasets/share
8.1.4 Create with permissions → 755 (ни на что не влияет, т.к. разрешения на дирекотрию заданы на уровне файловой системы - п.7.3.2, а права на чтение/запись разграничены между пользователями группами - п.8.2.5, 8.2.6)
8.1.5 Available? → Yes
8.1.6 Browseable? → Yes
8.1.7 Create
8.2 Настройка доступа
8.2.1 Servers → Samba Windows File Sharing → share → Other Share Options → Security and Access Control
8.2.2 Writable? → No
8.2.3 Guest Access? → No
8.2.4 Valid groups → smb_write, smb_read
8.2.5 Read only groups → smb_read
8.2.6 Read/write groups → smb_write
8.2.7 Save
8.3 Настройка разрешений
8.3.1 Servers → Samba Windows File Sharing → share → Other Share Options → File Permissions
8.3.2 New Unix file mode → 666
8.3.3 New Unix directory mode → 777
8.3.4 Save
8.4 Применение настроек
8.4.1 Servers → Samba Windows File Sharing → Restart Samba Servers (внизу страницы)
→ Настройка подключения сетевой директории к клиентской машине на базе Proxmox c возможностью монтирования в unprivileged LXC контейнер
Здесь приведу несколько модифицированный вариант моего комментария в соседней ветке
Справка:
Описанные действия предполагают:
- Доступ к сетевой папке share выполняется под пользователями user_write 1001 и user_read 1002.
- Команды монтирования к хосту Proxmox содержат uid=101001/101002 и gid=101000 с целью последующего корректного монтирования в непривилегированный LXC контейнер в Proxmox (uid_proxmox=uid_lxc+100000, gid_proxmox=gid_lxc+100000)
- Уточнение к параметрам file_mode (666) и dir_mode (777) в команде монтирования сетевого каталога к хосту Proxmox:
При монтировании сетевой папки (cifs) через /etc/fstab, Linux не может “узнать” реальные права доступа (chmod) на удалённой стороне (т.е. на SAMBA-сервере), потому что протокол SMB не передаёт эту информацию напрямую. Поэтому ты указываешь вручную, какие права доступа отображать локально при монтировании файлов и каталогов, при этом реальные права на samba сервере могут отличаться и будут приоритетными. - Выполнено монтирование для двух пользователей user_write и user_read с целью демонстриации разграничения прав доступа.
Команды:
-
Создать директории на хосте:
mkdir -p /mnt/pve/{share_write,share_read} -
Cоздать скрытый файл с авторизационными данными:
2.1 nano /root/.smbcredentials_write:
username=user_write
password=user_write
2.2 nano /root/.smbcredentials_read:
username=user_read
password=user_read -
Выставить строгие права:
chmod 600 /root/.smbcredentials_write
chmod 600 /root/.smbcredentials_read -
Добавить запись в /etc/fstab
nano /etc/fstab
Строки для добавления:
//IP_Samba_server/share /mnt/pve/share_write cifs credentials=/root/.smbcredentials_write,uid=101001,gid=101000,file_mode=0666,dir_mode=0777,nounix,noserverino 0 0
//IP_Samba_server/share /mnt/pve/share_read cifs credentials=/root/.smbcredentials_read,uid=101002,gid=101000,file_mode=0666,dir_mode=0777,nounix,noserverino 0 0
где:
//IP_Samba_server5/share - адрес сетевой директории на samba сервере
/mnt/pve/share_write - точка монтирования на хосте Proxmox под пользователем user_write
/mnt/pve/share_read - точка монтирования на хосте Proxmox под пользователем user_read
file_mode=0666 - все файлы на хосте Proxmox будут отображаться с правами rw-rw-rw-
dir_mode=0777 - все каталоги на хосте Proxmox будут отображаться с правами rwxrwxrwx
-
Смонтировать
mount -a -
Перезупустить службу (при необходимости):
systemctl daemon-reload -
Предположим, что писать в сетевую папку будет какое-нибудь приложение, установленное в unprivileged LXC контейнер (например FileBrowser, qBittorrent, …).
7.1 Для этого предварительно создадим в LXC деректории для монтирования по аналогии с хостом PVE:
mkdir -p /mnt/pve/{share_write,share_read}
7.2 Смонтируем сетевую папку с хоста в этот LXC контейнер:
pct set ID_LXC -mp1 /mnt/pve/share_write,mp=/mnt/pve/share_write
pct set ID_LXC -mp2 /mnt/pve/share_read,mp=/mnt/pve/share_read
где:
ID_LXC - ID вашего LXC с приложением
-mp1, -mp2 - точки монтирования (если к LXC уже примонтированы другие директории, то указывается любой свободный номер точки монтирования -mp3, -mp4, …)
Теперь проверим возможность чтения и записи в примонтированных директориях share_write и share_read из LXC контейнера (в моём случае это приложение File Browser):
root@FileBrowser:~# touch /mnt/pve/share_write/write_lxc.txt
root@FileBrowser:~# mkdir /mnt/pve/share_write/write_lxc
root@FileBrowser:~# ls -lh /mnt/pve/share_write/
total 0
drwxrwxrwx 2 1001 1000 0 Oct 26 10:48 write_lxc
-rw-rw-rw- 1 1001 1000 0 Oct 26 10:48 write_lxc.txt
root@FileBrowser:~# touch /mnt/pve/share_read/read_lxc.txt
touch: cannot touch '/mnt/pve/share_read/read_lxc.txt': Permission denied
root@FileBrowser:~# ls -lh /mnt/pve/share_read/
total 0
drwxrwxrwx 2 1002 1001 0 Oct 26 10:48 write_lxc
-rw-rw-rw- 1 1002 1001 0 Oct 26 10:48 write_lxc.txt
Как и ожидалось, user_write смог создать директорию и файл, а user_read может только читать.
Аналогичные действия из веб-интерфейса File Browser
Итоговый результат можно посмотреть в панеле Webmin на samba сервере:
Описанный выше пример может быть адаптирован под ваши задачи и иметь иной набор пользователей, групп, их идентификаторов (uid, gid), разрешений, струкуры директорий.
В качестве рекомендации не пренебрегайте перезагрузкой samba сервера после внесения изменений в конфигурацию.
Надеюсь мой опыт поможет сэкономить время таким же первопроходцам.






























