У меня несколько пользователей с FTP-доступом к моему серверу ubuntu, у каждого из которых есть собственный веб-сайт.
Apache работает по умолчанию после установки через apt-get. Я считаю, что www-data является пользователем apache. Если пользователь владеет своими файлами, apache не может их изменять (например, wordpress). Если файлы принадлежат apache, пользователи не могут использовать FTP и изменять их.
Как лучше всего решить эту проблему?
Правильный ответ: это зависит от обстоятельств. Если вы хотите разместить несколько сайтов, я также настоятельно рекомендую разделять сайты по идентификаторам пользователей, например, путем запуска отдельного пула PHP-FPM для каждого сайта. Для настройки Apache с FastCGI прочтите мой блог об этом.
Теперь, если вы это сделали, у вас есть два пути. Первый способ - запустить PHP для того же пользователя, с которым вы загружаете файлы. Это приведет к настройке, при которой у вас никогда не будет проблем с правами доступа к файлам, но вы торгуете некоторой безопасностью, поскольку код PHP может перезаписать себя.
Второе решение предполагает создание дополнительного пользователя «развертывания», который используется для загрузки кода, и общей группы для кода и контекста выполнения. Каталоги, которые должны быть доступны для записи, получают разрешение X для группы.
Наконец, я бы очень рекомендовал не развертывать серверы с использованием FTP, поскольку это нарушено дизайном на многих уровнях. Вместо этого установите SFTP-сервер (например, ProFTPd с mod_sftp).