У меня есть один веб-сервер 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 пользователей внутри их каталога.