Ситуация следующая:
apache работает под пользователем ftp:webserv. Несколько виртуальных хостов администрируются по ssh пользователем user:ftp. Файлы создаются с правами 770, поэтому проблем нет. Проблемы начинаются тогда, когда php-скрипт создаёт файл с правами, например 700. Пользователь user ничего с этим файлом напрямую сделать не может. Как разрулить эту ситуацию, и дать пользователю возможность спокойно удалять все свои файлы? Ходить апачу под user'ом не предлагать, ибо кроме user'а есть админы других вирт. хостов, у них начнутся проблемы.
Настройка прав доступа apache
Ситуация следующая:
apache работает под пользователем ftp:webserv. Несколько виртуальных хостов администрируются по ssh пользователем user:ftp. Файлы создаются с правами 770, поэтому проблем нет. Проблемы начинаются тогда, когда php-скрипт создаёт файл с правами, например 700. Пользователь user ничего с этим файлом напрямую сделать не может. Как разрулить эту ситуацию, и дать пользователю возможность спокойно удалять все свои файлы? Ходить апачу под user'ом не предлагать, ибо кроме user'а есть админы других вирт. хостов, у них начнутся проблемы.
А все эти файлы принадлежат этому пользователю? По сути если пользователем является владельцем папки или файла он может делать что угодно.
А все эти файлы принадлежат этому пользователю? По сути если пользователем является владельцем папки или файла он может делать что угодно.
Новые файлы, создаваемые средствами php, принадлежат тому пользователю, под которым бегает апач, т.е. ftp:webserv
Вариант 1: прописывайте chmodы в скриптах
Вариант 2: настройте sudo
Вариант 1: прописывайте chmodы в скриптах
Вариант 2: настройте sudo
Вариант 3: не городить костылей и выставить SGID на каталог.
Может начать с того, что просто выставить нормально права на файлы, а также запускать сервисы от нормальных пользователей и групп?
Вариант 3: не городить костылей и выставить SGID на каталог.
Простите, не уловил. Группа у меня и так совпадает у пользователя и у веб-сервера, но права на созданный при помощи PHP файл у группы 0 (700).
Может начать с того, что просто выставить нормально права на файлы, а также запускать сервисы от нормальных пользователей и групп?
Как посоветуете? В этом, собственно, и был мой вопрос.
[quote=An9hyg]Вариант 3: не городить костылей и выставить SGID на каталог.
Простите, не уловил. Группа у меня и так совпадает у пользователя и у веб-сервера, но права на созданный при помощи PHP файл у группы 0 (700).
Может начать с того, что просто выставить нормально права на файлы, а также запускать сервисы от нормальных пользователей и групп?
Как посоветуете? В этом, собственно, и был мой вопрос.
[/quote]
Моё мнение - исправлять php-скрипт:
1) права в нём на 770
2) chown ЛяЛя:webserv и chmod 700, если важно разграничить доступ между пользователями webserv
Вылавливать мух - неблагодарное дело. Скрипт ведь не один. Последний казус - после автоматической установки посредством php-скрипта фотогалереи, пользователь не смог удалить папку с непонравившейся галереей, ибо 700. Так же, на может синхронизироваться по ssh. При принудительной смене владельца или прав скрипт просто выдаёт обработанную ошибку. Видимо, где-то проверяются права, и в случае их нарушения скрипт блокирует свою работу. Конечно, в единичном случае можно было бы и отследить, но не перерывать же все движки в такой ситуации?
А что это вообще за php-файл?
Вылавливать мух - неблагодарное дело. Скрипт ведь не один. Последний казус - после автоматической установки посредством php-скрипта фотогалереи, пользователь не смог удалить папку с непонравившейся галереей, ибо 700. Так же, на может синхронизироваться по ssh. При принудительной смене владельца или прав скрипт просто выдаёт обработанную ошибку. Видимо, где-то проверяются права, и в случае их нарушения скрипт блокирует свою работу. Конечно, в единичном случае можно было бы и отследить, но не перерывать же все движки в такой ситуации?
Может быть как-то umask установить на соответствующую директорию/директории ? umask 770...
Мне вот интересно, по какой причине веб-сервер работает не от своего пользователя, а другого? была какая-то причина сделать именно так?
Мне вот интересно, по какой причине веб-сервер работает не от своего пользователя, а другого? была какая-то причина сделать именно так?
А какая разница - в какой группе сервер?
Я понял, что KS нужно, чтобы пользователи заходили ещё и по ftp и имели каждый свои права.
Потому что судя по его указаниям, веб-сервер работает от пользователя ftp и группа его webserv... а пользователь действует от user:ftp... как я вижу, группа не совпадает у сервера и пользователя... для чего менять стандарты, а потом пытаться починить права на файлы?
также он пишет, что файлы создаются с правами 770. Кем создаются эти файлы?
И я так и не получил ответа, что за php-скрипт используется. И что значит "php-скрипт создает файл с правами, например, 700"? Что значит "например"?
Он или создает с такими правами, или нет. Или разные скрипты создают файлы с разными правами?
Потому что судя по его указаниям, веб-сервер работает от пользователя ftp и группа его webserv... а пользователь действует от user:ftp... как я вижу, группа не совпадает у сервера и пользователя... для чего менять стандарты, а потом пытаться починить права на файлы?
Да не суть важна группа. Если скрипт создаёт файл с правами 700, то группа тут ни к чему, у неё ноль прав. А пользователя апача я назвал так, как мне удобнее, ибо под тем же пользователем поднял ftps, почту и многое другое. Что изменилось бы, если бы пользователь звался apache?
также он пишет, что файлы создаются с правами 770. Кем создаются эти файлы?
Я уже сказал: Файлы создаются скриптом. Какое из этих трёх слов вам не понятно?
И я так и не получил ответа, что за php-скрипт используется. И что значит "php-скрипт создает файл с правами, например, 700"? Что значит "например"?
Какая разница, что за php-скрипт? Я уже написал, что таких скриптов несколько, один из них - скрипт фотогалереи. А "Например" означает, что права могут быть 600, или 611, или 701 - в любом случае пользователь user не имеет полных прав (чтение+запись) на этот файл.
Или разные скрипты создают файлы с разными правами?
Конечно, с разными. Скрипты вполне свободно могут оперировать chmod, если вы не знали.
P.S. Хоть что-то полезное скажите? От вас вместо ответов получил пачку глупых вопросов, из которых половина - от невнимательности чтения моего сообщения.
Ок. Больше донимать вопросами не буду. В таком случае читайте внимательно документацию по Вашему веб-серверу, а также документацию по секретному php-скрипту фотогалереи.
Особо советую обратить внимание на пользователя и группу, под которыми работает веб-сервер, а также на пользователя и группу, под которыми выполняется скрипт.
С момента вашего первого сообщения прошло больше, чем двое суток. У Вас самого есть какие-то варианты решения проблемы?
А пользователя апача я назвал так, как мне удобнее, ибо под тем же пользователем поднял ftps, почту и многое другое. Что изменилось бы, если бы пользователь звался apache?
Безопасность, безопасность... Особенно "у хостера".
P.S. Хоть что-то полезное скажите?
Сделай скрипт и дай юзерам. Если нужно будет, они его запустят и изменят права файлов на 777 (или владельца/группу, по выбору).
--
Upd:
Один известный хостер и регистратор поступил именно так.
Цитата из ихнего FAQ:
По умолчанию веб-сервер работает от собственного имени пользователя (например www), а для работы PHP используется обычный mod_php. Файлы и папки, созданные через панель управления, FTP или SSH доступ, получают владельца-пользователя и не могут быть отредактированы средствами PHP скриптов. Для того, чтобы такая возможность появилась, проставьте на нужные файлы или директории права доступа 777 (rwx-rwx-rwx).
Скрипт выполняется под теми же правами, что и работет апач:
[quote=.snif]А все эти файлы принадлежат этому пользователю? По сути если пользователем является владельцем папки или файла он может делать что угодно.
Новые файлы, создаваемые средствами php, принадлежат тому пользователю, под которым бегает апач, т.е. ftp:webserv[/quote]
Вариантов кроме suexec пока нет.
Suexec не подходит:
1) Нагрузка на сервер значительно возрастает, недопустимо.
2) Начинаются проблемы с ftp, ибо пользователи там виртуальные, т.е. все работают от одного реального - ftp но чрутятся в свой каталог. Если владелец у виртуалхостов будет на ftp, то войти не смогут. В принципе, эту ситуацию можно разрулить, повозившись пару дней, но нет смыла, ибо см. пункт 1)
[quote=KS]А пользователя апача я назвал так, как мне удобнее, ибо под тем же пользователем поднял ftps, почту и многое другое. Что изменилось бы, если бы пользователь звался apache?
Безопасность, безопасность... Особенно "у хостера".
P.S. Хоть что-то полезное скажите?
Сделай скрипт и дай юзерам. Если нужно будет, они его запустят и изменят права файлов на 777 (или владельца/группу, по выбору).[/quote]
В данном случае по другому не реализуешь, да и не нужно. Ресурсы для ftp и для http общие, зачем разделять их на двух юзеров и плясать с бубном?
А скрипт - это не подходит. Конечно, реализовать это можно, но не подходит. Ибо многие php-программы проверяют права файла скрипта, и если они не такие, как им нравится, то не запускаются. Например, всё тот же движок галереи отказывается запускаться если права группы или остальных на файл конфига с паролями не равны 0.
KS! Наверное, Вы заметили мой пост, но я ещё раз повторюсь на всякий случай.
Если заранее задать на нужные каталоги umask 007 ftpdir htdocsdir и т.д., то все вновь создаваемые файлы будут иметь права 770 + те резрешения, что добавят скрипты.
Это не решит проблемы? (ссори, если совсем туплю)
А если имеющиеся php-скрипты задают права в явном цифровом виде chmod 770, а не chmod gu+rwx, то можно написать скрипт, который внесёт соответствующие изменения в эти скриты, чтобы не исправлять их руками. То есть, везде, где встречается chmod, заменить цифры на соответствующие разрешения. А все запреты типа u-rwx исключить. Не прокатит?
xaljava, я писал выше, что, к сожалению, многие скрипты проверяют права файла, и они должны совпадать с правами, которые были изначально. Да и скриптов очень много, несколько десятков виртуалхостов. Почти у каждого из них свой вебмастер. Взбунтуются они. Некоторые из них, я уверен, даже не знают что такое chmod(), ибо виндовс. Видимо, придётся оставить ftp-доступ для всех под одним системным юзером, но чрутить каждого виртуального юзера в свой каталог...