Какая разница куда лучше определять временную папку в файловой системе?

Главные вкладки

Комментарии

Аватар пользователя sg85 sg85 1 апреля 2014 в 4:34

например, на сервере может быть закрыт доступ к /tmp во имя безопасности, кроме того, друпал при установке возьмет настройки временной папки из конфигов php, например, какой-нибудь /home/foo/mod-tmp, а при переносе сайта на другой хостинг, допустимая папка для временных файлов может оказаться /home/bar/mod-tmp, то есть, надо будет зайти в настройки и сменить этот путь.

в вашем случае files/tmp это будет папка DRUPAL_ROOT/files/tmp, то есть корень_друпала/files/tmp, довольно странное размещение...

Аватар пользователя Ch Ch 1 апреля 2014 в 11:35

/tmp это системная директория, доступная для чтения и записи всем пользователям системы. На шаред хостинге это означает, что любой аккаунт будет иметь доступ к вашим временным файлам. Среди этих файлов вполне могут оказаться приватные данные, например дамп базы данных сделанный модулем Backup and Migrate. Поэтому files/tmp вполне адекватный вариант.

Аватар пользователя sg85 sg85 2 апреля 2014 в 20:20

это от настроек сервера зависит, если сервер настраивал не школьник, то проблем с приватностью быть не должно(есть множество различных средств контрацепции), а если школьник, то там кроме общего доступа во временную папку может так же быть и доступ далеко не ко временным файлам, например, к соседским settings.php даже если он с правами 0400

Аватар пользователя Ch Ch 2 апреля 2014 в 21:24

"sg85" wrote:
это от настроек сервера зависит, если сервер настраивал не школьник, то проблем с приватностью быть не должно(есть множество различных средств контрацепции),

Если сервер настраивал не школьник, то /tmp дожна быть доступна для чтения и записи всем пользователям. От этого зависит работоспособность приложений в системе. Поэтому за пробемы с приватностью временных файлов отвечает разработчик.

Аватар пользователя sg85 sg85 2 апреля 2014 в 21:49

"VasyOK" wrote:
Если ставить
files/tmp
противопоказания есть?

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

"Ch" wrote:
Если сервер настраивал не школьник, то /tmp дожна быть доступна для чтения и записи всем пользователям. От этого зависит работоспособность приложений в системе. Поэтому за пробемы с приватностью временных файлов отвечает разработчик.

любой юзер в системе может писать в папку /tmp, любой юзер может читать или изменять ТОЛЬКО СВОИ файлы в папке /tmp и не имеет доступа к файлам других пользователей в этой папке, такое происходит по причине того, что права на все файлы в папке /tmp 0600, и на большинстве ядер системы изменить эти права нельзя, максимум, что злоумышленник может от туда получить - это имена самих файлов, при этом, эти имена обычно временные, потому представляют из себя случайный и бесполезный набор букв и цифр.

Аватар пользователя VasyOK VasyOK 2 апреля 2014 в 22:06

"При этом, скорее всего Вы сами не будете иметь прав на удаление этих файлов"
Удаляю спокойно. Хотя там 400 КБ всего за год деятельности сайта.

На эти файлы права 644. На папку tmp 755. Разве так не должно быть?

Аватар пользователя sg85 sg85 2 апреля 2014 в 22:23

"VasyOK" wrote:
"При этом, скорее всего Вы сами не будете иметь прав на удаление этих файлов"
Удаляю спокойно. Хотя там 400 КБ всего за год деятельности сайта.

это от настроек сервера зависит.

На некоторых хостингах для пользователей создается индивидуальная временная папка с очисткой от хлама и т.д.(например, папка tmp в корне вашей домашней папки)

"VasyOK" wrote:
На эти файлы права 644. На папку tmp 755. Разве так не должно быть?

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

Аватар пользователя Ch Ch 3 апреля 2014 в 7:37

"sg85" wrote:
права на все файлы в папке /tmp 0600

А почему именно 0600 ? Права на файлы могут быть абсолютно любые, за это отвечает приложение, которое их создает. Друпал по умолчанию ставит 0664, см drupal_chmod. Да и не спасет 600, если владельцем файла является допустим www-data. Сама директория /tmp в линукс системах обычно имеет 1777.

"VasyOk" wrote:
На эти файлы права 644. На папку tmp 755. Разве так не должно быть?

Не должно быть. См. http://drupal-kalabro.tumblr.com/post/67294710925/drupal

Аватар пользователя sg85 sg85 5 апреля 2014 в 16:07

"Ch" wrote:
А почему именно 0600 ?

чтобы кроме владельца никто не имел доступа к файлу.

"Ch" wrote:
Права на файлы могут быть абсолютно любые, за это отвечает приложение, которое их создает

а вот и хрен, за это отвечает ОС ориентируясь на umask, а далее их можно поменять на любые, но не всегда для этого есть доступ

"Ch" wrote:
Друпал по умолчанию ставит 0664, см drupal_chmod

а какие должен выставлять? эта функция ставит такие права для загруженных в паблик файлов, поставьте на них 0600 или даже 0660 и в браузере у вас попросту не будет ни одной картинки на сайте, а вместо них 403 ошибка. 664 означают следующее(в идеале) - друпал может удалить или изменить загруженный им на сервер файл(обычно это картинки или вложения прикрепленные через IMCE или модуль file), пользователь веб мастера может удалить или изменить загруженный друпалом файл(в идеале php и вебмастер должны входить в одну группу), и nginx или что там у вас должен иметь права на чтение этого файла для передачи его по http протоколу

"Ch" wrote:
Да и не спасет 600, если владельцем файла является допустим www-data. Сама директория /tmp в линукс системах обычно имеет 1777.

повторюсь еще раз, если вы смогли почесть чужой временный файл, то так же сможете прочесть и чужой settings.php получив пароль и логин к чужой БД, на фига этот геморой с временными файлами когда все можно сделать гораздо проще?

при нормальной настройке безопасности на хостинге, у вас пользователь php процессов будет уникальным, не равным www-data или еще кому-то, либо же у вас попросту не будет доступа к папке /tmp или вообще куда-то за пределы вашей домашней папки.

PS чтобы предупредить кучу бессмысленных постов, сразу скажу - на apache-mpm-prefork свет клином не сошелся, на нормальных шаред хостингах его давно уже не используют, и прежде чем что-то еще писать, сперва погуглите mpm-itk, например.

Аватар пользователя Ch Ch 5 апреля 2014 в 18:14

"sg85" wrote:
а вот и хрен, за это отвечает ОС ориентируясь на umask, а далее их можно поменять на любые, но не всегда для этого есть доступ
В каком дистрибутиве файлы получают chmod = 600 по умолчанию? Дефолтную маску можно менять из приложения (см. umask). Некоторые фреймворки так и делают, либо как друпал вызывают chmod после создания файла. Поэтому за права доступа к файлу отвечает именно приложение.

"sg85" wrote:
повторюсь еще раз, если вы смогли почесть чужой временный файл, то так же сможете прочесть и чужой settings.php
А как же я его прочту? Он ведь в чужой домашней директории, которая в отличии от /tmp закрыта для чтения.

Пару лет назад проверял /tmp на нескольких популярных хостингах (в т.ч. на it-patrol). В каждом случае в ней была куча доступных для чтения файлов с разных аккаунтов.

Аватар пользователя sg85 sg85 5 апреля 2014 в 18:56

"Ch" wrote:
В каком дистрибутиве файлы получают chmod = 600 по умолчанию?

например, в debian php-fpm(dotdeb) имеет umask 0077 по умолчанию.

"Ch" wrote:
Дефолтную маску можно менять из приложения (см. umask)

из приложения можно так же выполнить абсолютно любую shell команду, и что дальше?

"Ch" wrote:
Пару лет назад проверял /tmp на нескольких популярных хостингах (в т.ч. на it-patrol). В каждом случае в ней была куча доступных для чтения файлов с разных аккаунтов.

то есть, если их переложить в другую папку, то их нельзя будет прочесть? мне это напоминает суеверие с изменением порта для SSH, этим вы лишь на несколько минут отсрочите неизбежное.

Единственная ситуация, когда есть смысл убирать файлы из /tmp, это если единственная(то есть других защит нет, ВООБЩЕ) защита от доступа к чужим данным на сервере это open_basedir и при этом /tmp находится в списке разрешенных, тогда да, убираем временную папку к себе, однако, необходимо убрать права на чтение\запись для всех остальных пользователей и группы, или, как минимум, закрыть доступ к самой папке(тогда для доступа надо будет знать точный адрес файла), в противном случае все это лишено какого-либо смысла.

Аватар пользователя sg85 sg85 5 апреля 2014 в 18:57

"Ch" wrote:
А как же я его прочту? Он ведь в чужой домашней директории, которая в отличии от /tmp закрыта для чтения.

так как так вышло, что временные файлы открыты для чтения, а постоянные закрыты?)

Аватар пользователя Ch Ch 5 апреля 2014 в 19:25

"sg85" wrote:
из приложения можно так же выполнить абсолютно любую shell команду, и что дальше?

Дальше надо нужно настраивать приложение так, чтобы настройки сервера не влияли на безопасность приложения.

"sg85" wrote:
то есть, если их переложить в другую папку, то их нельзя будет прочесть?

В домашней папке нельзя будет конечно.

"sg85" wrote:
так как так вышло, что временные файлы открыты для чтения, а постоянные закрыты?)
Это типовая конфигурация на шаред хостинге, 777 для /tmp и 750 для домашней директории.