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

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

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

Architecture

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

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

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

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

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

3) Можете ли вы придумать лучшую архитектуру? [+1121]

6
задан 8 February 2012 в 23:49

2 ответа

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

2) Его корректным там не является никакой пароль для www-пользователя-данных. Можно однако дать www-данным временный пароль и скопировать сертификат салями www-данным с ssh-копией команды. То, когда это - сделанная салями, может войти в систему и смонтироваться как www-данные без входа любого пароля. (Необходимо было создать сертификат с ssh-keygen.)

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

0
ответ дан 8 February 2012 в 23:49

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

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

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

Как я писал выше, последнее разрешение имеет только пользователь монтирования. Вы можете ослабить это, добавив -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 или на обоих. [+1145]

0
ответ дан 8 February 2012 в 23:49

Другие вопросы по тегам:

Похожие вопросы: