Я искал> 5 дней, пробовал множество трюков и советов и даже пытался заставить автора lsync помочь, но все напрасно.Конфигурация lsync для использования не-root-логинов
У меня есть 2 веб-сервера Red Hat 6.3, которым необходимо синхронизировать свои каталоги изображений при загрузке изображения. Мы не можем контролировать, какой сервер он загружается, но он не загружается в другой, когда он загружается.
Мне просто нужно сказать lsync, чтобы использовать учетные данные другого пользователя, кроме имени пользователя root. Наша команда информационной безопасности не разрешает доступ к rootless root. Не могу сказать, что я их виню.
У меня есть учетная запись, которая имеет доступ к sudo для выполнения всего, что нужно, чтобы получить файлы до места назначения. Хотя я могу заставить rsync выполнять синхронизацию просто отлично, она не работает с разрешенной ошибкой при запуске от lsync.
Я могу даже скопировать команду, которая выполняется lsync из журнала, удалить квадратные скобки и успешно синхронизировать. Таким образом, я уверен, что проблема связана с lsync. Просто потому, что он запускается как root. Сценарий оболочки заставляет его запускаться с правами root. Я даже попытался изменить его на учетную запись, отличную от root, и все поддерживающие файлы были изменены вместе со скриптом, и он по-прежнему отказывается от синхронизации.
Вот подробности о сценариях и файлах, которые у меня есть: ОС: Red Hat Linux версии 6.3 (Santiago) lsyncd конфигурационный файл:
----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync, but executing moves through on the target.
--
-- For more examples, see /usr/share/doc/lsyncd*/examples/
--
-- sync{default.rsyncssh, source="/var/www/html", host="localhost", targetdir="/tmp/htmlcopy/"}
settings{
logfile = "/var/log/lsyncd.log",
statusFile = "/var/log/lsyncd-status.log",
delay = 1,
}
sync {
default.rsyncssh,
source="<Absolute path to source directory>",
host = "<Host IP>",
targetdir = "<Absolute path to target directory>",
rsync = {
binary = "/usr/bin/rsync",
rsh = "sudo -u <Domain>\\<User ID> ssh",
sparse = true,
update = true,
links = true,
times = true,
}
}
rsyncd.conf файл:
log file = /var/log/rsyncd.log
pid file = /var/log/rsyncd.pid
allow = localhost
deny = *
list = true
uid = 16777218
gid = 16777222
read only = false
timeout=600
use chroot = true
[Test1]
path = "<Absolute path to target/source>"
comment = Test for remote transfer
Файл rsyncd.conf был изменен для использования другого uid/gid, так как это то, к чему я хотел его изменить.
Вот журнал ошибок из lsyncd.log:
Thu Aug 22 07:58:57 2013 Debug: daemonizing now.
Thu Aug 22 07:58:57 2013 Function: Inotify.addWatch(<Absolute Path to Source>)
Thu Aug 22 07:58:57 2013 Inotify: addwatch(<Absolute Path to Source>)-> 1
Thu Aug 22 07:58:57 2013 Call: getAlarm()
Thu Aug 22 07:58:57 2013 Alarm: runner.getAlarm returns: (true)
Thu Aug 22 07:58:57 2013 Masterloop: immediately handling delays.
Thu Aug 22 07:58:57 2013 Call: cycle()
Thu Aug 22 07:58:57 2013 Function: invokeActions("Sync1", (Timestamp: 5491559.47))
Thu Aug 22 07:58:57 2013 Normal: recursive startup rsync: <Absolute Path to Target> -> <Host IP>:<Absolute Path to Target>
Thu Aug 22 07:58:57 2013 Exec: /usr/bin/rsync [--delete] [--ignore-errors] [-usltS] [--rsh=sudo -u <Domain>\<User ID> ssh] [-r] [<Absolute Path to Source>] [<Host IP>:<Absolute Path to Target>]
Thu Aug 22 07:58:57 2013 Function: write((Timestamp: 5491559.47))
Thu Aug 22 07:58:57 2013 Statusfile: writing now
Thu Aug 22 07:58:57 2013 Call: getAlarm()
Thu Aug 22 07:58:57 2013 Alarm: runner.getAlarm returns: (false)
Thu Aug 22 07:58:57 2013 Masterloop: going into select (no timeout)
rsync: Failed to exec sudo: Permission denied (13)
rsync error: error in IPC code (code 14) at pipe.c(84) [sender=3.0.6]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in IPC code (code 14) at io.c(600) [sender=3.0.6]
Thu Aug 22 07:58:57 2013 Call: collectProcess()
Thu Aug 22 07:58:57 2013 Delay: collected an event
Thu Aug 22 07:58:57 2013 Error: Temporary or permanent failure on startup of "<Absolute Path to Target>". Terminating since "insist" is not set.
Примечания: Я продезинфицировать файлы и предположил, что я понял все о намерении применения, куда должен быть источник и цель.
Так, только так мы ясны на цели:
- У меня есть 2 веб-серверы, балансировкой нагрузки.
- Изображения будут загружены без контроля относительно того, к какому серверу они идут.
- Я проектирую архитектуру синхронизации, используя lsyncd/rsync в качестве демона для обновления обоих серверов при загрузке. Это означает, что для обоих серверов потребуется запустить lsyncd/rsyncd без удаления. Ни одно исключение не предполагает, что если оба сервера получили другое изображение одновременно, а затем, когда сервер сначала проверил цель, он удалил бы файл цели, поскольку он не был на исходном.
Они говорили о попытке выяснить, как направлять изображения на один сервер, а затем мы могли бы использовать опцию удаления, чтобы заставить синхронизацию обоих серверов точно, не беспокоясь о том, что на обоих серверах есть службы синхронизации, а может и отсутствовать. по причине срочный. Кроме того, не знаю, что произойдет, если один файл будет открыт, а другой сервер попытается удалить его.
Я в отчаянии, так как не могу даже помочь автору.Возможно, этого не может быть сделано, но казалось бы, что у этого мощного приложения будет этот один глупый недостаток, который сделает его полностью непригодным для использования теми, у кого есть проблемы с безопасностью.
Спасибо!
вы добьетесь с этим ли? –
Любые выводы по этому вопросу? –
Пройдя одно и то же. Трудно поверить, что нет никакого работоспособного решения для non-root. Я могу просто разрешить вход в систему root. – Hal50000