Никто из владельцев (99 99) в FTP не вызван функциями php? - PullRequest
2 голосов
/ 09 апреля 2010

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

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

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

Ответы [ 2 ]

3 голосов
/ 09 апреля 2010

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

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

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

Объясняя это лучше:

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

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

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

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

chmod("path_to_your_file", 0770);

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

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

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

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

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

1 голос
/ 09 апреля 2010

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

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

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

Попробуйте сначала:

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

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

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

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

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

...