Назад | Перейти на главную страницу

Как я могу настроить настройку пользователя / группы / разрешений для общего веб-хостинга в Linux, чтобы предотвратить разрешение между веб-сервером и учетными записями пользователей?

У меня есть один веб-сервер Linux LAMP (Ubuntu) с некоторыми веб-сайтами.

Все они работают в одном экземпляре apache2 и доступны для разных хостов.

Большинством из них я управляю, но у меня также есть несколько сайтов друзей, размещенных там.

Я хочу и использую отдельные учетные записи пользователей для разных веб-сайтов для управления файлами, cronjobs и т. Д.

Веб-сервер работает как www-data.

Теперь для большинства файлов / каталогов не требуется разрешение на запись на веб-сайте, но для некоторых это необходимо. Я согласен с отдельной настройкой их на запись с пользователем, которого я использую для управления файлами. На самом деле я предпочитаю так.

Однако что меня всегда немного беспокоит, так это файлы, созданные веб-сервером. Например файлы кеша или сеанса. Следовательно, они принадлежат пользователю веб-сервера и с разрешениями по умолчанию не доступны для записи пользователю linux. В моем случае модификация файлов пользователем веб-серверов happyn исключительно с использованием PHP.

Теперь «лучшим» решением этой проблемы, которое я обнаружил, будет запуск suexec / suphp, чтобы позволить процессу php работать как владелец файла PHP. Однако это связано с большим недостатком преимуществ apache mod-php и большой потерей производительности, поскольку каждый процесс php работает поверх cgi. Но моя самая большая проблема - это код операции и кеширование памяти.

Теперь, как я думаю, я мог бы добавить всех пользователей, которые у меня есть, в группу www-data, чтобы с разрешениями по умолчанию 664/775 пользователь оболочки мог изменять файлы. Однако пользователь оболочки не сможет настроить chmods, потому что он / она не является владельцем, но это не должно быть проблемой, поскольку я не могу представить себе ситуацию, когда это было бы необходимо для файлов / каталогов, созданных веб-сервером. И веб-серверу как владельцу это все равно не понадобится.

Однако я совершенно не знаком со всей группой / пользователями / разрешениями, потому что у меня был свой собственный сервер для каждого проекта и никогда ничего не делал с общим хостингом.

Я знаю только структуры из plesk / confixx и подобных вещей и знаю, что они всегда проблематичны.

Поэтому я прошу использовать самый простой подход, который позволяет решить эту проблему с общими требованиями веб-хостинга.

Более того: как я могу эффективно «заключить» пользователя в его собственный каталог и сделать так, чтобы он выглядел как каталог верхнего уровня в scp / ssh? Я знаю, что это будет не совсем возможно, и никакая безопасность не должна полагаться на это (потому что пользователь может запустить php-скрипт, перечисляющий другие каталоги и т.д.), но это не мотивация. Мотивация состоит в том, чтобы все было немного изолировано и отделено для облегчения целей управления.

Я не думаю, что у этой проблемы есть "хорошее" решение. Лучше всего, наверное, cronjob, который chowns файлы для $user:www-data и chmods файлы, в которые веб-сервер должен записывать u=rwX,g=rwX,o=u=rwX,g=rX,o= для файлов, которые веб-серверу нужно только читать). С точки зрения изоляции SSH / SCP, вероятно, лучше всего использовать права доступа к файлам. Однако FTP / FTPS - лучшее решение, потому что FTP-сервер может chroot пользователей внутри их каталога.