Я пытаюсь найти наиболее безопасный способ передачи файлов с одного сервера на другой.
У меня есть следующая архитектура:
В настоящее время я использую основного пользователя 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]
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, и выбрать файлы из репозитория. Это дает Вам хорошее управление версиями Ваших исходных кодов.
SSHFS - это файловая система FUSE . Этими процессами управляет пользовательский процесс, который запускается как пользователь, монтирующий файловую систему: этот sshfs
процесс, который вы запускаете, удваивается как драйвер файловой системы. По умолчанию большинство файловых систем FUSE разрешают монтируемому пользователю только доступ к файлам внутри.
Чтобы иметь возможность доступа к файлам через sshfs, вам нужны три вещи:
Как я писал выше, последнее разрешение имеет только пользователь монтирования. Вы можете ослабить это, добавив -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]