Использование lsync для синхронизации файлов apache webroot - проблемы с правами доступа

Я распределяю нагрузку между двумя веб-серверами, что означает, что все настройки Apache и vhosts в значительной степени идентичны, и я хотел убедиться, что они остаются такими же, используя LSync (или если есть другое решение, которое помогает с проблемой, которую я дайте, дайте мне знать)

Очевидно, что Apache работает как пользователь apache, и мы не можем включить root SSH-логины, поэтому я создал пользователя lsync, который может SSH между двумя серверами, используя ключи RSA.

И теперь я сталкиваюсь с некоторыми ошибками прав доступа, что, как я и ожидал, должно было произойти. Теперь я пытаюсь добавить пользователя lsync в группу apache, а пользователя apache - в группу lsync... и это работает нормально, если файлы разбиты на 7 как для пользователя, так и для группы....

Я думал о том, чтобы настроить работу cron на chown apache.apache и, возможно, даже chmod +rwx для группы и пользователя, но я уверен, что это вызовет некоторые другие проблемы.

Я думал о том, чтобы lsync запускался от имени пользователя Apache, но похоже, что домашний каталог apache должен действительно принадлежать root.root.. так что это может вызвать проблемы с пользователем Apache, пытающимся ssh и читать из .ssh каталог.

Я не мог найти много об этом, когда я смотрел в Google... Большинство людей просто использовали root-пользователя для lsync, о котором не может быть и речи.

Так что, если у кого-то есть решение, это было бы здорово! Спасибо

PS Я знаю, что могу позволить пользователю lsync выполнять определенные команды через sudo, если я правильно настрою конфигурацию sudoers... есть ли способ получить это sudo chown apache.apache /var/www && sudo chmod -R u+rwx /var/www или что-то?

2 ответа

rsync есть опция для принудительного разрешения прав доступа к файлам, которые он создает в месте назначения: --chmod=<blah>, lsyncd не имеет прямой поддержки для этого, но может передавать флаги rsync.

Попробуйте добавить это в вашу конфигурацию lsyncd:

_extra = {"--chmod=Dug+rwx,Fug+rw"}

Это должно гарантировать, что каталоги, D, имеют права на чтение / запись / выполнение для владельца и группы, а также файлов, F, имеют права на чтение / запись для владельца и группы. Любые другие разрешения должны быть установлены как они есть на исходном сервере.

Если вам нужно, чтобы файлы принадлежали пользователю apache, вы можете настроить задание chown cron, как вы предлагаете, но вы можете обнаружить, что постоянно работающий скрипт, который читает выходные данные из inotifywatch будет более отзывчивым (и в основном бездействующим).

Возможно, вы захотите, чтобы пользователь apache запустил демон rsync. Он мало используется, так как туннелирование rsync через ssh более удобно и безопасно, но может помочь обойти эту проблему.

Вам нужно настроить файл конфигурации, а затем просто запустить его с rsync --daemon используя любую систему инициализации вашего дистрибутива.

Затем вы можете настроить lsynd с target = "rsync://server/path",

Если соединение между серверами является локальным и сеть является доверенной, то все готово, в противном случае вам следует настроить демон rsync на прослушивание только 127.0.0.1, а затем использовать команду ssh -L сопоставление портов для маршрутизации трафика через зашифрованный туннель (владелец туннеля не важен).

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