LINUX.ORG.RU

nginx - Доступ к содержимому папок только по их md5

 ,


0

2

Доброго времени суток. Есть такая задача: спрятать реальные имена папок, но не трогать их содержимое и чтоб имя спрятанной папки было статичным. Пример прост:

http://example.com/one/two/35d6d33467aae9a2e3dccb4b6b027878/four/file.mp3

Здесь хеш это md5 имени папки, в нашем случае это «three». Думаю смысл ясен.

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

Secure link не подходит, так как хеш папки рознится от имени файла, к которому идёт запрос внутри папки, а мне это делать нельзя.



Последнее исправление: cetjs2 (всего исправлений: 1)

Ответ на: комментарий от smilessss

Тогда необходимо сделать так, чтоб при добавлении папки СРАЗУ же создавался симлинк, так как скорость очень важна (вплоть до секундного отклика), но чтоб при этом жёсткий диск не помер от количества необходимых io операций.

Gallardo994
() автор топика
Ответ на: комментарий от surefire

Можешь тогда подсказать со скриптом для крона? Желательно, чтоб оно могло делать симлинки из нескольких папок типа «two», в nginx я это сделал примерно так:

location ~* ^/one/(.+)$ {
        internal;
        root /my/root/folder;
        try_files /two/$1 /two-2/$1 @missing;
}
И редирект на неё из secure link.

Gallardo994
() автор топика
Ответ на: комментарий от Gallardo994

Почитал про secure_link, ранее не был знаком.

И могу сказать, он оно не прячет путь файла, а только сверяет корректность хеша, по выражению. Хеш нужно рассчитать по известному выражению и передать клиенту вместе с ссылкой на файл. При запросе nginx опять рассчитает хеш по тому же выражению и сравнит. Это говорит, о том, что ты оказался не прав написав:

Secure link не подходит, так как хеш папки рознится от имени файла, к которому идёт запрос внутри папки, а мне это делать нельзя.

Так как из документации следует:

Выражение должно содержать защищаемую часть ссылки (ресурс) и секретную составляющую.

Ты можешь защищать только часть ссылки и имя файла не обязательно.

surefire ★★★
()
Ответ на: комментарий от surefire

Что бы было понятней. Путь к файлу для secure_link нельзя прятать, так как это:

  • реальный путь, где nginx будет искать файл
  • одна из необходимых переменных для выражения, по которому рассчитывается хеш.
surefire ★★★
()
Ответ на: комментарий от surefire

Я думаю в свете вышесказанного тебе можно вернуться к варианту c secure_link. Так как в итоге цель ограничить доступ, а не скрыть папку.

surefire ★★★
()
Ответ на: комментарий от Gallardo994

Собственно уже все сказали, таблицу хешей все равно нужно хранить, nginx их брутфорсить не будет, убедись, что в ФС включены индексы и все будет ок.

goingUp ★★★★★
()
Последнее исправление: goingUp (всего исправлений: 1)
Ответ на: комментарий от surefire

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

basedir="/home/gallardo/storagereal"
targetdir="/home/gallardo/storage"
cd $basedir
for dir in */; do
  cd $dir
  topname=$(basename $dir)
  for subdir in */; do
    name=$(basename $subdir)
    hash=$(echo -n $name | openssl dgst -sha1 | sed 's/^.* //')
    sfrom="$targetdir"/"$hash" sto="$basedir"/"$topname"/"$name"
   ! [ -L "$sfrom" ] && ln -s "$sto" "$sfrom" && echo "New symlink at $sfrom -> $sto"
  done
  cd ..
done

Gallardo994
() автор топика
Ответ на: комментарий от Gallardo994

Используй inotify.

Храни список того, что УЖЕ имеет соответствие.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.