|
|
|
| Здравствуйте =))
В теме "Как настроить права доступа" была фраза...
"Если используется файловые варианты Web-приложений, файлы в которых редактируются по FTP, то через Web максимум что можно сделать это утащить сами служебные файлы"...
А если у меня файловый вариант, но используются не текстовые файлы, а php файлы, в которых все данные в виде массивов, доступ я к ним получаю через include(), а при редактировании переписываю весь файл, вместе с синтаксисом php.....
Ясно, что через WEB, доступа к их содержимому не получишь (или я лшибаюсь?), а вот как мне ограничить к ним доступ (предполагается, что "вредитель" как-то узнал имя файлов) скриптам, ну например которые запускаются не из етой же папки или папки на уровень выше. Установка прав, типа 0700 не подойдет - мои выполняются как noname. По большей части меня волнует их перезапись. Чтение не принцмпиально. Или можно как-то изменить, от какого имени исполняются мои скрипты на админа или группу? | |
|
|
|
|
|
|
|
для: Sfinks
(17.01.2005 в 14:44)
| | Хм... через Web переписать файлы не удасться... или имеется ввиду, если злоумышленнику будут доступны ваши имя и пароль к хостингу и он получит возможность выполнять на них скрипты? | |
|
|
|
|
|
|
|
для: cheops
(17.01.2005 в 15:44)
| | Имеется ввиду, если злоумышленик, с того же хостинга откроет файл на запись с абсолютным путем, типа....
<?php
$f = fopen("/home/.....путь к моим папкам..../имя_файла", "w");
fclose($f);
?>
|
Или он таким образом доступа не получит?
Тогда такой вариант хранения информации безопасен, и мне ничего не грозит при любых раскладах? ВЕРНО? | |
|
|
|
|
|
|
|
для: Sfinks
(17.01.2005 в 16:31)
| | Для директории где хранится ваш виртуальный хост скорее выставлены права доступа 0700, т.е. никто кроме вас туда попасть не может, вы также можете пометить файлы только для чтения 0444 - тогда их никто не сможет переписать... | |
|
|
|
|
|
|
|
для: cheops
(17.01.2005 в 17:10)
| | В FTP мой хост выглядит так:
docs - 0755
incs - 0755
logs - 0755
tmp - 0777
|
Значит ли ето, что перезаписывать файлы, находящиеся в папке docs не может никто, кроме скриптов, находящихся непосредственно в папке docs, даже если у етих файлов права стоят 0666?
А как у самой папки виртуального хоста могут быть права 0700, ести в папку tmp могут писать все кому не лень?
А установить права 0444 я не могу, т.к. мне самому нужно переписывать ети файлы, а т.к. мои скрипты noname, то мне подходит только 0666. | |
|
|
|
|
|
|
|
для: Sfinks
(17.01.2005 в 20:43)
| | Эти директории тоже ведь находятся в какой-то директории и вот уже она имеет соответствующие права доступа (должна по-крайней мере) - 0700. Даже если это не так то взлом крайне маловероятен, особенно если это коммерческий хостинг - владельцы сайтов этого делать не будут - их вычислит хостер, у которого имеются данные на владельцев. А ломать другую учётную запись на хосте, чтобы потом ломать ваш сайт.... легче сразу с вас начать. Профессионалы, даже если будут ломать сервер, конкретно вам они никак не помешают - их задача, не наводить шорох на хосте, а оставаться как можно дольше не замеченными, чтобы использовать ресурсы сервера или использовать данный хост для взлома следующего хоста (заметание следов). | |
|
|
|
|
|
|
|
для: cheops
(17.01.2005 в 20:55)
| | Короче, в двух словах (вернее даже в одном=)) Всего вышеперечисленного достаточно, чтоб жить спокойно? =)) | |
|
|
|
|
|
|
|
для: Sfinks
(17.01.2005 в 21:05)
| | Да. /*переживать по поводу сайтов вообще не надо - никакого здоровья не хватит :)))*/ | |
|
|
|
|
|
|
|
для: cheops
(17.01.2005 в 20:55)
| | Вот никак я не могу полностью понять, на кого распространяются какие права, и как влияют права родительских папок...
Давайте на примере!
Предположим, имеется такая структура:
any_dir // Права
|
|-----dir1 // 777
| |----last_dir // 222
| | |------last_file1.php // 666
| | '------last_file2.php // 444
| |
| |----file1.php // 666
| '----file2.php // 444
|
|-----dir2 // 444
| |----file3.php // 666
| '----file4.php // 444
|
'-----any_file.php
|
Здесь:
any_file.php может: прочитать и записать file1.php
только прочитать файлы file2.php, file3.php и file4.php
только записать last_file1.php
ничего не может сделать с last_file2.php
file1.php может: прочитать и записать - никого
только прочитать file2.php, file3.php и file4.php
только записать last_file1.php
ничего не может сделать с last_file2.php
file2.php может: прочитать и записать - file1.php
только прочитать file3.php и file4.php
только записать last_file1.php
ничего не может сделать с last_file2.php
file3.php может: прочитать и записать - file1.php
только прочитать file2.php, и file4.php
только записать last_file1.php
ничего не может сделать с last_file2.php
file4.php может: прочитать и записать - file1.php и file3.php
только прочитать file2.php
только записать last_file1.php
ничего не может сделать с last_file2.php
last_file1.php может: прочитать и записать - file1.php
только прочитать file2.php, file3.php, file4.php и last_file2.php
last_file2.php может: прочитать и записать - file1.php и last_file1.php
только прочитать file2.php, file3.php, file4.php
|
Я все верно понял, или где-то ошибся? =)) | |
|
|
|
|
|
|
|
для: Sfinks
(17.01.2005 в 23:10)
| | Всё верно (но file1.php может записать в last_file1.php). | |
|
|
|
|
|
|
|
для: cheops
(17.01.2005 в 23:57)
| | А я и написал, что file1.php может только записать в файл last_file1.php, но не может его прочитать. =))
И последнее забыл уточнить... Допустим у any_dir права 000, а у any_file.php - 777, тогда любой файл, папки any_dir, а также под-папок, под-под-папок и т.д. может делать с any_file.php все что угодно, а все, что за пределами any_dir не может ничего. Так?
Да, и что для php значит "исполнение"? Обращение через http или что-то другое? Т.е. не очень понятно, в чем разница между 666 и 777....
И еще, почему когда у папки стоит 666, то fopen в ней ничего не создает, а когда 777 создает? fopen() что, перед созданием (прочтением) файла меняет текущую дирректорию на папку файла? Тогда, вероятно, после fclose() php возвращается в папку, которая была перед fopen() ?
А почему, когда у файла права 644, rename() его без проблем переименовывает? Или rename() учитывает права папки, в которой лежит этот файл? Они стоят 777.
Ну и кажется последнее.... Если я входя на свой хостинг через FTP вижу 4 папки (docs; incs; logs и tmp), значит ли ето, что все они находятся в /home/...путь_к_моему_хосту.../ или возможно, что docs находится в /home/...путь_к_моему_хосту.../, tmp в какой-то общей TEMP дирректории всего хостинга, а остальное где-то еще?
Ух, сколько вопросов! Аж сам не ожидал =)) Ответьте пожалуйста на все =)) | |
|
|
|
|
|
|
|
для: Sfinks
(18.01.2005 в 02:21)
| | >И последнее забыл уточнить... Допустим у any_dir права 000,
>а у any_file.php - 777, тогда любой файл, папки any_dir, а
>также под-папок, под-под-папок и т.д. может делать с
>any_file.php все что угодно, а все, что за пределами any_dir
>не может ничего. Так?
Да, если обращение идёт по относительному, а не по абсолютному пути.
>Да, и что для php значит исполнение? Обращение
>через http или что-то другое? Т.е. не очень понятно, в чем
>разница между 666 и 777....
В Windows исполняемые файлы помечаются специальным расширением, *.exe, в UNIX - битом исполнения (1: 7 = 4 + 2 + 1), причём файл можно назначить исполняемым для владельца, но не исполняемым для всех остальных - удобно. Для директорий бит исполения означает возможность получения списка директории при помощи команды ls или других средств. Т.е. при 666 находясь на сервере вы можете писать в директорию и читать из неё файлы, но зайти в неё не можете. Это всё не актуально при удалённом администрировании машины - вы же арендуете на хостинге часть сервера и работаете удалённо через сервера (FTP, HTTP), так как эти сервера организуют свой собственный доступ к файловой системе...
>И еще, почему когда у папки стоит 666, то fopen в ней ничего
>не создает, а когда 777 создает? fopen() что, перед
>созданием (прочтением) файла меняет текущую дирректорию на
>папку файла?
Вообще так не должно быть.
>А почему, когда у файла права 644, rename() его без проблем
>переименовывает? Или rename() учитывает права папки, в
>которой лежит этот файл? Они стоят 777.
Чёрт его знает, может и ошибка в PHP, может ещё чего... тут недавно обнаружилась дыра в защищённом режиме, уж про права доступа наверное вообще мало кто думает...
>Ну и кажется последнее.... Если я входя на свой хостинг
>через FTP вижу 4 папки (docs; incs; logs и tmp), значит ли
>ето, что все они находятся в /home/...путь_к_моему_хосту.../
>или возможно, что docs находится в
>/home/...путь_к_моему_хосту.../, tmp в какой-то общей TEMP
>дирректории всего хостинга, а остальное где-то еще?
Да это вполне может быть, но это можно узнать, проверив является ли директория ссылкой или настоящей директорией. | |
|
|
|
|
|
|
|
для: cheops
(18.01.2005 в 03:10)
| | Как-то не получается закончить :-/
>Да, если обращение идёт по относительному, а не по
>абсолютному пути.
Это вы наверно имели ввиду выход за пределы защищенной дирректории? Т.е. даже ссылкой
include(../any_file.php);
из file1.php доступ будет, а если написать
include(../../any_dir/any_file.php);
то доступа уже не будет! Верно?
>В Windows исполняемые файлы .....
Это я все читал. я не это имел ввиду, а "что подразумевается под термином - исполняемый"?
В Windows исполняемый файл это ехе, а его исполнение - обработка машинного кода процессором! А что значит бит исполняемый для файла с расширением php? То, что WEB-сервер может взять его, обработать php-код и выдать пользователю HTML-результат, или что-то другое?!
Или, может, для php-файлов это вообще не актуально и на етот бит можно не обращать внимания, ведь права доступа не действуют на WEB-доступ?
>Это всё не актуально при удалённом администрировании
>машины
Еще как актуально! если я в FTP-менеджере снимаю с любой дирректории 7-ой бит, то не могу войти в ету дирректорию, пока не поставлю его обратно!
>Вообще так не должно быть.
Но так есть.... =((
>Чёрт его знает, может и ошибка в PHP, может ещё чего...
Причем не просто переименовывает, а перемещает в другую дирректорию!!! Правда у нее тоже права стоят 777.
>уж про права доступа наверное вообще мало кто думает...
Следует ли ето читать, как "Права доступа - это полная чушь!" ???
>это можно узнать, проверив является ли директория
>ссылкой или настоящей директорией.
А как это проверить?
Бррр.... Мрак! Чем дальше в лес, тем гуще сосны =(( | |
|
|
|
|
|
|
|
для: Sfinks
(18.01.2005 в 04:50)
| | 1) Я имел ввиду что можно обращаться как по относительному пути ../any_file.php, так и по абосолютному /path/to/file/any_file.php - если при обращении по абослютному пути встретися директорию, с ограниченными правами доступа - то может не получить доступ.
2) Исполняемый бит для файлов это вот что - есть допустим программа на сервере, написанная на С (пусть Web-сервер Apache) или на скриптовом языке (пусть на Perl, PHP) - запустить её на исполнение операционной системой можно только в том случае, если файл имеет бит исполнения (1). Это не имеет значение, когда файл интерпретируется другой программой (Apache или php-интерпретаром запущенным как CGI), но имеет значение для запуска CGI-программ и запуска скриптов в указанное время демоном cron.
3) Права доступа не имеют значения, если сервер получивший доступ к директориям "неправильно" интерпретирует их удалённому пользователю, например Web-сервер, в которому и не нужно следить за правами доступа (главное, чтобы он имел доступ к файлам). Например FTP-сервера корректно передают права доступа. О доступе PHP к директориям заботится операционная система - здесь имеет значение с какими правами работает PHP, но я так полагаю это права nobody, попробуйте полностью закрыть директорию - и поработать с ней из PHP - если получится, то это может означать, что PHP работает с правами root - об этом уже имеет смысл сообщить хостеру, так как это смахивает на дыру - пусть он хотя бы прокомментирует...
4) Каким FTP-менеджером вы пользуетесь и отображает ли он права доступа в виде: drwxr-xr-x? Первая буква означает тип файла, - файл, d директория, l - ссылка. | |
|
|
|
|
|
|
|
для: cheops
(18.01.2005 в 14:13)
| | >попробуйте полностью закрыть директорию - и поработать с ней из PHP.....
Мы снова не поняли друг друга....
С папками он работает корректно, а вопрос вызвало то, что функция rename() без проблем делает все че хочет с файлами с правами 644, но в дирректории с правами 777. Вот я и подумал, что rename() при выполнении учитывает не права файла, с которым каботает, а права дирректории в которой находится етот файл.
Но я все же поигрался еще с созданием, сменой прав и переименованием, и обнаружил ВАЩЕ ОЧЕНЬ ИНТЕРЕСНУЮ ШТУКУ......
Они сделали так, что за все, что создано по FTP отвечает FTP, а за все, что сделано из PHP отвечает PHP!!! Т.е. если я скопировал на хост файл по FTP, то даже chmod() могу менять только по FTP, а PHP выдает ошибку. Но если я создал файл из скрипта, то FTP при попытке смены прав говорит, что етот сервер не поддерживает chmod, а из скрипта chmod без проблем меняется!!!
Считаю ето очень надежным решением, а вопрос теперь такой:
Это нормальное явление, или ето етот конкретный хостер так мощно все продумал и защитился? Просто я нигде (на форуме) никаких упоминаний о подобном спрособе установки прав не читал..... | |
|
|
|
|
|
|
|
для: Sfinks
(18.01.2005 в 18:26)
| | /* Хм... вот так вот хакеры и рождаются... */
А ну тогда всё нормально, содержимое файла действительно не меняется - всё укладывается в UNIX-картину мира.
По второму нужно учитывать, что FTP и PHP работают с правами разных владельцев и разных групп, поэтому права доступа для них вроде должны быть разными...
PS определить владельца файла можно при помощи функции chown(). | |
|
|
|
|
|
|
|
для: cheops
(18.01.2005 в 19:02)
| | >/* Хм... вот так вот хакеры и рождаются... */
Так рождаються скрипт кидди =) | |
|
|
|
|
|
|
|
для: Akira
(18.01.2005 в 19:29)
| | >/* Хм... вот так вот хакеры и рождаются... */
Эт Вы про то, что я так до етих прав докапался? =))
Да позновато в 24 рождаться уже =))
>Так рождаються скрипт кидди =)
А ето кто еще такие =)) первый раз слышу =)) | |
|
|
|
|
|
|
|
для: Sfinks
(18.01.2005 в 20:36)
| | >>Так рождаються скрипт кидди =)
>А ето кто еще такие =)) первый раз слышу =))
Здесь на самом деле не совсем корректно использовать этот термин... они не знают о правах доступа :))) скрипт кидды - это скриптовые мальчики, т.е. низшая ступень кракеров, когда человек сам ничего делать не может, но может ломать другие скрипты, в основном за счёт подбора соответствующего параметра в строке запроса (а чаще заимствования чужих эксполоитов из Интернет). Им не ведомы атаки на переполнение буффера и срыв стека, так как там нужно много думать и программировать. | |
|
|
|
|
|
|
|
для: Sfinks
(18.01.2005 в 20:36)
| | мда в 24 уже на покой пора =Р | |
|
|
|
|
|
|
|
для: Akira
(18.01.2005 в 21:06)
| | Бе бе бе :-PbPb =)))
Лана, кажись тема кончилась (пока что=))
Начинаем следующую..... | |
|
|
|
|
|
|
|
для: Sfinks
(18.01.2005 в 22:02)
| | я бы хотел спросить как можно обеспечит защиту путём, запрета на просмотр HTML кода и запрета на сохранения страницы?
на каком то сайте я видел такое и когда сохраняешь страницу. то в ней ничего нет кроме шутливой надписи над теми кто её попытался сохранить. | |
|
|
|
|
|
|
|
для: morf
(18.01.2005 в 23:14)
| | Это надо в JavaScript.
Где-то я читал про это.
Только эта защита на "дураков" и легко обходиться.
Bob в разделе JavaScript на | |
|
|
|
|
|
|
|
для: Akira
(18.01.2005 в 23:19)
| | у меня некачаються скрипты с этого сайта уже гжето год.
http://script.woweb.ru/ | |
|
|
|
|
|
|
|
для: morf
(18.01.2005 в 23:26)
| | Смотря чем качать ;) У меня все ок было. | |
|
|
|
|
|
|
|
для: Sfinks
(17.01.2005 в 14:44)
| | С файлами вроде разобрался..
А вот с папками...
Во код:
for ($i..... ......
if(!file_exists("kontent/articles/$id")) mkdir ("kontent/articles/$id",0777);
if (move_uploaded_file($_FILES['img']['tmp_name'][$i],"l/kontent/articles/$id/$image"))
print"Скопированно $image<br>";
else print"Не могу скопировать $image<br>";
|
папка, которая создаётся делается 0755 (???!!)
пишет
Warning: move_uploaded_file(): SAFE MODE Restriction in effect. The script whose uid is 32399 is not allowed to access /home/.../.../.../kontent/articles/5 owned by uid 99 in /home/.../.../.../my_script.php on line 108
Почему Разный UID? Скрипт то один и тотже... | |
|
|
|
|
|
|
|
для: hate
(22.07.2005 в 14:31)
| | uid 32399 относится к файлу, а uid 99 к пользователю. | |
|
|
|
|
|
|
|
для: cheops
(22.07.2005 в 14:43)
| | А почему папка создаётся с разрешением 755 ?
А что тогда делать? | |
|
|
|
|
|
|
|
для: hate
(22.07.2005 в 21:36)
| | Может на хосте ограничения стоят - попробуйте спросить в тех.поддержке хостера... | |
|
|
|
|