Ни один владелец (99 99) в FTP, вызванный функциями php?

У меня есть скрипт (Joomla), который создает файлы и каталоги на сервере. Проблема в том, что он создает их под владельцем 99 99 (никто), и после этого я не могу удалить или изменить их по FTP без помощи администратора сервера.

Я думаю, что это move_uploaded_file функция php.

Есть ли решение этой проблемы WHM или админом сервера? Могу ли я изменить владельца по умолчанию в ftp?


person hacen    schedule 09.04.2010    source источник
comment
есть окончательное решение этой проблемы?   -  person hacen    schedule 09.04.2010


Ответы (2)


Что происходит, так это то, что HTTP-сервером управляет пользователь с именем «никто», а ваш FTP-пользователь — другой. Когда происходит загрузка, HTTP-сервер создает файл под своим именем пользователя, и ваш FTP-пользователь не имеет права записывать (или удалять) эти файлы.

Самый простой способ исправить это (но не совсем безопасный) — добавить обоих пользователей в одну группу и изменить права доступа к файлам, чтобы разрешить пользователям одной и той же группы читать/записывать эти файлы.

Ваш администратор должен позаботиться об этом, но вам придется вызвать chmod(), чтобы изменить права доступа к вашим загруженным файлам.

Объясни лучше:

Права доступа к файлу linux/unix состоят из разрешений пользователя (u), группы (g) и других (o). Здесь я рассмотрю только 3 типа прав доступа к файлам: чтение (r), запись (w) и выполнение (x). Итак, у вас получится что-то вроде этого:

-rw-rw---x   1 jweyrich  staff  12288 Oct 24 00:22 avatar.png
  • Первый rw- это разрешение (чтение/запись) ПОЛЬЗОВАТЕЛЯ, которому принадлежит файл (jweyrich).
  • Второй rw- это разрешение (чтение/запись) ГРУППЫ, которой принадлежит файл (персонал).
  • --x в конце - это разрешения (выполнение) ДРУГИХ пользователей.

Ваши PHP-скрипты запускаются от имени пользователя «никто» (и, скажем, от группы «никто»), поэтому каждый файл, который вы создаете на своем PHP, будет принадлежать пользователю «никто» (и его группе). Пользователь может быть частью одной или нескольких групп.

Чтобы решить проблему с разрешениями, ваш FTP-пользователь и «никто» должны находиться в группе common, допустим, администратор поместил вашего пользователя в «никто». Когда они находятся в одной группе, ваш PHP-скрипт должен предоставить права «rw» (чтение/запись) членам группы «никто». Для этого:

chmod("path_to_your_file", 0770);

0770 эквивалентен "u+rwx,g+rwx,o-rwx", который я объясню здесь:

  • u+rwx = для пользователя (владелец, то есть «никто»), дать права на чтение/запись/выполнение
  • u+rwx = для группы (которая также "никто"), дать права на чтение/запись/выполнение
  • o-rxw = для других удалить разрешения на чтение/запись/выполнение

После этого ваш FTP-пользователь, который теперь входит в группу «никто», будет иметь доступ на чтение//запись к загруженным файлам и, таким образом, также сможет удалять файлы. Это будет выглядеть так:

-rwxrwx---   1 nobody  nobody  12288 Oct 24 00:22 avatar.png

Это не идеальное введение в права доступа к файлам unix, но я надеюсь, что это поможет.

person jweyrich    schedule 09.04.2010
comment
не могли бы вы объяснить больше и что я должен сделать именно - person hacen; 09.04.2010
comment
добавлено объяснение прав доступа к файлам. - person jweyrich; 09.04.2010
comment
Вы упомянули самый простой способ решить эту проблему, но какой самый правильный (/ безопасный) способ? - person James; 21.04.2011
comment
@ J-P: ИМО, самый правильный и безопасный способ, - это создать уникальную учетную запись пользователя для каждого веб-сайта, а затем настроить виртуальный хост для каждого из них, заставив его запускать интерпретатор (в данном случае php) под этим соответствующим пользователем (документация Apache). FTP должен использовать тех же пользователей, поэтому изменение разрешений загружаемых файлов не требуется. Кроме того, рассмотрите возможность chroot обоих демонов (пример с Apache). - person jweyrich; 21.04.2011

Пользователь, под которым работает PHP — nobody — устанавливается системным администратором. Вы ничего не можете с этим поделать.

Вы можете попробовать chown(), чтобы изменить владельца файла, если вы знаете идентификатор пользователя FTP. Однако обычно вам не разрешается делать это из PHP.

В зависимости от групповой ситуации на сервере может случиться так, что если вы используете chmod для изменения прав доступа к файлу после того, как файл был загружен, учетная запись FTP может получить доступ к файлу:

Сначала попробуйте это:

chmod($uploaded_file, 0660); // owner+group read+write

Если это не сработает, попробуйте следующее:

chmod($uploaded_file, 0666); // global read+write

один из них должен сделать файл доступным для использования учетной записью FTP.

Использование 0666 настоятельно не рекомендуется, поскольку другие пользователи на сервере могут вносить изменения в ваши файлы, но в некоторых конфигурациях это единственный способ начать работу.

person Pekka    schedule 09.04.2010
comment
@hacen, тогда может случиться так, что это невозможно исправить без помощи системного администратора. - person Pekka; 09.04.2010