Файлы SSHFS с одного сервера на другой

Я пытаюсь найти наиболее безопасный способ передачи файлов с одного сервера на другой.

У меня есть следующая архитектура:

Архитектура

В настоящее время я использую salamis основного пользователя, чтобы смонтировать каталоги.

Файлы в исходном каталоге создаются с помощью диспетчера файлов PHP.

К сожалению, я не могу move , rename или delete любой файл из смонтированного каталога через PHP. Я получаю разрешение.

1) Это потому, что я монтировал файловую систему с использованием salamis вместо www-data ?

2) Безопасно ли монтировать файловую систему на Server 2 виде www-data ? Если да, как я могу это достичь? www-data не имеет пароля, и я не могу войти в систему, используя su -m www-data . У меня authentication failure .

3) Можете ли вы подумать о лучшей архитектуре?

SSHFS – файловая система FUSE . Они управляются процессом пользовательской земли, который запускается как пользователь, который монтирует файловую систему: этот процесс sshfs запускается в качестве драйвера файловой системы в два раза. По умолчанию большинство файловых систем FUSE позволяют только пользователю устанавливать доступ к файлам внутри.

Чтобы иметь доступ к файлам через sshfs, вам нужно три вещи:

  1. Пользователь, прошедший проверку подлинности через ssh на сервере server1, должен иметь доступ к файлам.
  2. Пользователь, который пытается получить доступ к файловой системе sshfs на сервере2, должен иметь необходимые разрешения доступа.
  3. Пользователь, который пытается получить доступ к файловой системе sshfs на сервере2, должен иметь доступ к этой файловой системе.

Как я писал выше, только последний пользователь имеет последнее разрешение. Вы можете расслабиться, добавив -o allow_user в командную строку sshfs , но это не решит две другие проблемы. Обратите внимание, что -o allow_user вступает в силу, если /etc/fuse.conf содержит user_allow_user или вы используете sshfs как root.

На server2 вам нужно либо запустить sshfs качестве пользователя www-data (которому вы должны будете предоставить доступ к закрытому ключу SSH), либо разрешить allow_user и организовать для локальных www-data доступ к файлам, которые ему нужны. Существует несколько способов сделать это: через опцию uid или передав -o default_permissions или передав -o umask 770,gid=www-data . Если вы включите allow_user , убедитесь, что вы не разрешаете www-data получать доступ к большему количеству файлов, чем нужно, и что вы не позволяете другим пользователям видеть или изменять то, что им не нужно. Запуск sshfs поскольку www-data имеет преимущество простоты, у вас гораздо больше шансов не быть слишком разрешительным.

Для проблемы № 1 вам необходимо ssh в учетную запись www-data на server1 или разрешить учетную запись, которую вы используете для доступа к этим файлам. Существует некоторая польза в том, что вы не позволяете удаленным входам в системные учетные записи, такие как www-data , потому что они делают для плохого аудита (вы не можете знать, кто действительно использовал эту учетную запись). Однако это не может быть и речи, и его несколько проще настроить. Если вы не хотите разрешать удаленный вход в учетную запись www-data , добавьте salamis ¹ в группу www-data , убедитесь, что файловая система на server1 смонтирована с опцией acl (добавьте ее в соответствующую запись в /etc/fstab если необходимо) и добавьте ACL в файлы www-data :

 setfacl -d -m group:www-data:rwx -R /path/to/www-root setfacl -m group:www-data:rwx -R /path/to/www-root 

¹ Если это ваша учетная запись на server1 , я не понял из вашего вопроса, был ли salamis пользователем на server1 , на server2 или на обоих.

1) Да, точно так же, как ответил Жиль, идентификатор входа, который вы используете, является владельцем созданных файлов по умолчанию. Это справедливо для большинства протоколов.

2) Правильно, нет пароля для пользователя www-data. Тем не менее вы можете предоставить www-data временный пароль и скопировать сертификат salamis на www-data с помощью команды ssh-copy. Когда это будет сделано, салями могут войти и подключиться как www-данные без ввода какого-либо пароля. (У вас должен быть сертификат, созданный с помощью ssh-keygen.)

3) Еще одно возможное решение – rsync файлы между двумя серверами. Rsync использует ту же защищенную инфраструктуру, что и ssh / sftp / sshfs, вы можете использовать ssh-copy так же, как и в 2. С помощью rsync вы можете позволить www-data извлекать файлы из салями. Использование ssh-copy дает возможность сценариев синхронизации, в большинстве случаев достаточно одного лайнера в /etc/cron.[dayly|hourly]. Rsync надежны, если есть проблемы с сервером salamis, ваше приложение все еще может функционировать с последними файлами, которые вы синхронизировали, ваше приложение не замедляется сетью, но у вас есть задержка между изменением файла в салями -каталог и на сервере. Вы также можете рассмотреть возможность использования VCS, например bzr, и извлечение файлов из репозитория. Это дает вам хороший контроль версий ваших исходных кодов.