1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

смена владельца файла

Тема в разделе "Web Coding", создана пользователем Blackster, 2 апр 2007.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Blackster

    Blackster Писатель

    Регистр.:
    29 мар 2007
    Сообщения:
    5
    Симпатии:
    0
    После закачки файла на сервер через форму multipart/form-data, файл сохраняется под владельцем apache.
    Соответственно, после этого я не могу средствами FTP клиента - который соединяется с сервером под другим именем - манипулировать атрибутами этого файла, перезакачивать его и т.п.
    Изменить владельца файла средствами PHP тоже не выходит:
    chown('test.jpg','otheruser') выдает ошибку: Operation not permitted
    exec('chown otheruser /home/path/test.jpg'); также ничего не изменяет

    Что можно еще сделать?
    Каждый раз заходить под рутом и менять владельца файла не удобно.
    Спасибо!
     
  2. pk2002

    pk2002

    Регистр.:
    14 ноя 2006
    Сообщения:
    382
    Симпатии:
    350
    А группу какую выставляет при закачке через форму?
    Можно добавить пользователя фтп в эту группу в системе и при закачке делать не chown, а chmod 664.
    Тогда при коннекте по ftp пользователь сможет изменять данные файлы.

    Еще вариант, но немного посложнее, разобраться с ACL.
    Только файловая система должна поддерживать такую возможность.
     
    Blackster нравится это.
  3. Blackster

    Blackster Писатель

    Регистр.:
    29 мар 2007
    Сообщения:
    5
    Симпатии:
    0
    группу тоже выставляет apache.
    Хм, наверно можно так сделать - добавить пользователя FTP в группу apache. Только не вредно ли это будет с точки зрения безопасности?
    PS: сервер я арендую, т.е. никаких других пользователей на нем нет
     
  4. pk2002

    pk2002

    Регистр.:
    14 ноя 2006
    Сообщения:
    382
    Симпатии:
    350
    Ну я и имею ввиду - добавить пользователя ftp в группу apache.
    Не вижу проблем с безопасностью. Просто пользователь фтп будет иметь доступ на подгружаемые через форму файлы. Так ты же этого и добиваешься.
     
  5. Blackster

    Blackster Писатель

    Регистр.:
    29 мар 2007
    Сообщения:
    5
    Симпатии:
    0
    ладно, попробую! Вроде бы такой простой способ, а в голову не приходил! Спасибо pk2002!
    И слава форуму! Столько ждал ответа на этот вопрос на форуме dklab (спецы блин) а тут меньше чем за полчаса подсказали :)
     
  6. loki.od.ua

    loki.od.ua Прохожие

    К сожалению, чтобы сделать chown, нужно быть рутом, иначе никак :( А файл будет сохраняться под uid/gid'ом пользователя, от имени которого запущен httpd. Я бы прописал пользователя, от имени которого происходит логин на ftp, в ту группу, от имени которой пущается httpd. После заливки файла останется только сделать на нём chmod 775.
     
  7. BaD DoG

    BaD DoG Создатель

    Регистр.:
    26 ноя 2006
    Сообщения:
    20
    Симпатии:
    3
    Иногда возникает задача, когда необходимо сменить владельца файла, директории на сервере. Файлы созданные скриптами не доступны для редактирования по ssh и ftp. Что делать? Просить хостера?
    проблемы с доступом к файлам площадки, созданным PHP-скриптами

    Дело
    в том, что PHP-сценарии, запущенные модулем mod_php, выполняются от
    имени пользователя wwwserver. Соответственно, если на
    чтение/модификацию не были выставлены разрешения для всех (достаточно
    666 - для файлов, 777 - для каталогов), то модификация созданных такими
    скриптами файлов (каталогов) пользователю uXXXX (id площадки) будет
    запрещена (при доступе по SSH, по FTP).

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

    Сделать это рекурсивно можно, исполнив PHP-сценарий:

    <?php
    function chmod_R($path, $perm) {

    $handle = opendir($path);
    while ( false !== ($file = readdir($handle)) ) {
    if ( ($file !== ".") && ($file !== "..") ) {
    if ( is_file($file) ) {
    chmod($path . "/" . $file, $perm);
    }
    else {
    chmod($path . "/" . $file, $perm);
    chmod_R($path . "/" . $file, $perm);
    }
    }
    }
    closedir($handle);
    }

    $path = $_SERVER["QUERY_STRING"];

    if ( $path{0} != "/" ) {
    $path = $_SERVER["DOCUMENT_ROOT"] . "/" . $path;
    }

    chmod_R($path, 0777);
    echo $path;
    ?>


    Разместите этот файл на площадке, в директории, доступной веб-серверу, например, как domain.tld/www/chmod.php

    Вызывать скрипт нужно так:
    http://domain.tld/chmod.php?path_to_problem_dir
    или так:
    http://domain.tld/chmod.php?/home/uXXXXX/domain.tld/www/path_to_problem_dir

    В
    первом случае - указывается путь, относительно DocumentRoot для данного
    домена (domain.tld/www/ в нашем примере). Во втором случае (uXXXXX -
    идентификатор вашей площадки)- абсолютный путь от корневой папки
    сервера.
     
Статус темы:
Закрыта.