У меня проблема с использованием GlusterFS для замены существующей, не HA, настройки NFS для обмена данными между машинами. Сначала немного о конфигурации:
Доказательство концепции glusterfs - это установка с двумя машинами и реплицированным томом. Затем есть 2 клиента, которые импортируют этот том. Один клиент - это SFTP-сервер, на котором клиенты могут подключаться и отправлять свои файлы, а другой - сервер, на котором работают наши приложения.
Проблема, с которой я сталкиваюсь, касается пользователей и разрешений. Пользователь, который подключается к серверу SFTP, будет заключен в тюрьму в определенном каталоге (chroot), а SFTP требует строгих разрешений (каталог, которым должен владеть пользователь root, и root, чтобы быть единственным пользователем, имеющим разрешение на запись). В то же время приложение на другом сервере, работающем от имени конкретного пользователя, потребуется полный доступ к дереву каталогов.
В установке, которую я заменяю, используется NFS, а экспорт монтируется с разными правами собственности / разрешениями (с использованием параметров uid и gid при монтировании) на двух клиентах; таким образом пользователи на двух серверах получают необходимые разрешения.
GlusterFS, с другой стороны, AFAIK, не позволяет монтировать том с определенным владельцем на каждой машине. Я знаю, что GlusterFS совместима с POSIX, и я могу использовать стандартные системы разрешений и ACL.
Я думал и / или тестировал несколько вариантов, но ни один из них меня не устраивает.
Использование ACL: при добавлении пользователю сервера приложений разрешения на чтение / запись, он будет считать это разрешение «групповым» разрешением, и SFTP будет жаловаться.
Создание общего пользователя на всех машинах: не очень гибкое, полагается на системных администраторов для обслуживания общего пользователя, а при переходе к производственной среде ситуация усложнится, поскольку придется взаимодействовать большему количеству систем.
Смонтируйте в другом месте и привяжите к правильному каталогу. Но потом я обнаружил, что не могу сменить владельца ...
Используя NFS / Ganesha или SAMBA. Это перебор, я могу установить клиент glusterfs и не хочу использовать дополнительные слои, которые нужно настраивать и поддерживать.
Сам том и все его содержимое принадлежат пользователю root и группе root.
Есть ли у кого-нибудь из вас идеи получше? Или знает функцию GlusterFS, которая позволяет мне более простую настройку?
Заранее спасибо.
Думаю, я нашел приемлемое решение. Я забыл о поведении демона SFTP. Это правда, что SFTP требует, чтобы каталог jail принадлежал пользователю root и только root имел права записи. Но подкаталоги могут иметь любое разрешение.
Вместо того, чтобы настраивать ACL для корня тома gluster, я изменяю ACL только для содержимого каталога jail следующим образом:
Клиент 1 - Сервер приложений
root@appsrv$ cd /path/to/gluster/volume
root@appsrv$ chown -R root:root *
root@appsrv$ chmod -R 2750 *
root@appsrv$ ls -la
total 6
drwxr-x--- 14 root root ./
drwxr-xr-x 4 appuser appgroup ../
drwxr-xr-x 3 root root .trashcan/
drwxr-s--- 5 root root User1/
drwxr-s--- 5 root root User2/
drwxr-s--- 5 root root User3/
root@appsrv$ setfacl -Rm u:appuser:rwx */*
root@appsrv$ setfacl -Rm g:appgroup:rx */*
root@appsrv$ setfacl -Rdm u:appuser:rwx */*
root@appsrv$ setfacl -Rdm g:appgroup:rx */*
root@appsrv$ ls -la
total 6
drwxr-x--- 14 root root ./
drwxr-xr-x 4 appuser appgroup ../
drwxr-xr-x 3 root root .trashcan/
drwxr-s---+ 5 root root User1/
drwxr-s---+ 5 root root User2/
drwxr-s---+ 5 root root User3/
Клиент 2 - SFTP-сервер
root@sftpsrv$ cd /path/to/gluster/volume
root@sftpsrv$ setfacl -Rm g:sftpgroup:rx *
root@sftpsrv$ setfacl -Rm g:sftpgroup:rwx */input
root@sftpsrv$ setfacl -Rdm g:sftpgroup:rx *
root@sftpsrv$ setfacl -dRm g:sftpgroup:rwx */input
root@sftpsrv$ ls -la
total 6
drwxr-x--- 14 root root ./
drwxr-xr-x 4 root root ../
drwxr-xr-x 3 root root .trashcan/
drwxr-x---+ 5 root root User1/
drwxr-x---+ 5 root root User2/
drwxr-x---+ 5 root root User3/
Теперь SFTP работает правильно и не жалуется на разрешения, а сервер приложений имеет полный доступ туда, где ему нужно.