Разрешить www-data выполнять rsync под другим пользователем (php)
Я хотел бы позволить php выполнять rsync под привилегиями других пользователей, скажем, пользователя wwwsync.
Как я могу добиться этого с помощью конфигурации sudo? Вот что я сделал:
В конфигурации sudo (sudo visudo)
www-data www-data-sync=(wwwsync) NOPASSWD: /usr/bin/rsync
Эта строка работает, как и ожидалось, когда вы зарегистрированы как пользователь wwwsync
rsync -avz -e "ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress ~/some/path/ [remoteuser]@[remotehost]:~/some/path/
Но эта строка, выполняемая из php с помощью shell_exec(), не работает
sudo -u wwwsync rsync -avz -e "ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress ~/some/path/ [remoteuser]@[remotehost]:~/some/path/
Это правильный способ выполнить rsync под пользователем wwwsync? Правильно ли настроена конфигурация sudo?
1 ответ
Я наконец узнал, как заставить это работать.
Конфигурация sudoer была неправильной. Псевдоним должен быть ВСЕМ, а не случайным псевдонимом. Кроме того, в "rsync" должна быть установлена опция "-H", поэтому команда устанавливает целевую домашнюю папку как домашнюю папку во время выполнения команды.
В конфигурации sudo (sudo visudo)
www-data ALL=(wwwsync) NOPASSWD: /usr/bin/rsync
Эта строка, выполняемая из php с использованием shell_exec(), работает (с ключом ssh, правильно установленным для пользователя wwwsync и удаленного хоста)
sudo -H -u wwwsync rsync -avz -e "ssh -i ~/.ssh/id_rsa -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" --progress /some/path/ [remoteuser]@[remotehost]:~/some/path/
Примечание: wwwsync rigths / perms должен быть осторожно настроен, чтобы www-data не синхронизировала нежелательные папки с удаленным хостом.
Наконец, это позволяет мне выполнять безопасную синхронизацию ресурсов между главным сервером и подчиненными серверами: безопасный способ синхронизации ресурсов между серверами через php / linux
Если бы это могло помочь...