2016-05-03 4 views
1

Я хотел бы разрешить php выполнять rsync под привилегии других пользователей, скажем, пользователя wwwsync.Разрешить www-data выполнить rsync под другим пользователем (php)

Как я могу добиться этого с помощью конфигурации sudo? Вот что я сделал:

В SUDO configutaion (Судо visudo)

www-data www-data-sync=(wwwsync) NOPASSWD: /usr/bin/rsync 

Эта линия работает как excpected при входе в 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 была неправильной. Псевдоним должен быть ALL, а не случайным псевдонимом. Также «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-данные не синхронизировали нежелательные папки с удаленным хостом.

Это, наконец, позволяет мне выполнять безопасную синхронизацию Ressource между главным сервером и подчиненными серверами: Safe way to synchronize ressources between servers through php/linux

Если это может помочь ...