Отказано в доступе при открытии локальных файлов в веб-браузерах

Вопрос или проблема

Я столкнулся с довольно странной проблемой: если я пытаюсь открыть файл .html в директории, начинающейся с точки (.), браузер утверждает, что у него нет разрешения для его просмотра, например:

mkdir -p ~/.test/
echo "Hello, World!" > ~/.test/test.html
chmod -R 777 ~/.test/
firefox ~/.test/test.html    # Работает на Ubuntu 21.10, но не на 22.04.
chromium ~/.test/test.html   # Не работает на Ubuntu 21.10 и 22.04.

Это какая-то проблема с песочницей браузера? Если да, есть ли какое-то общее решение?

Одно, что я заметил о Firefox: Ubuntu перешел на пакет snap в 22.04, связано ли это как-то с этими разрешениями? Кроме того, Chromium также, похоже, является пакетом snap (в обоих случаях).

На случай, если кто-то еще столкнется с этой проблемой:

Это “ошибка/функция” (неполноценная функция?), введенная изменением, чтобы запускать эти браузеры внутри пакетов snap. В настоящее время приложения snap могут получать доступ только к файлам в домашнем каталоге. Любой файл в директории, начинающейся с точки, явно исключен.

Тем не менее, похоже, есть какой-то “интерес” к разрешению приложению доступа к небольшому подмножеству директорий, как упомянуто в билете, который я открыл здесь:

https://bugs.launchpad.net/snapd/+bug/1979060

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

И да, я нахожу это невероятно раздражающим и устаревшим подходом.

Я нашел подходящее решение для Firefox:

  • Когда возникает ошибка, вырежьте и вставьте URL file://.... в качестве параметра в следующий скрипт, доступный в PATH (я назвал его openinhome):
    #!/usr/bin/env bash
    
    for F in $* ; do
       path=${F#"file://"}
       B="$(basename "$path")"
       T="$HOME/OpenInHome_${RANDOM}${RANDOM}_$B"
       cp -l -v "$path" "$T"
       # обновить дату, так как он был создан сейчас:
       touch "$T"
       open "$T"
    done
    
  • и передайте ему “плохой”, неработающий URL, например:
    openinhome file:///home/myuser/.cache/.fr-HWMTX2/2024-11-30-1915/myreport.html
    

Использовано на Ubuntu 24.04.

Обратите внимание, что опцию -l команды cp можно опустить, но это быстрее и не занимает место.

Ответ или решение

Проблема "Доступ запрещен" при открытии локальных файлов в веб-браузерах: Причины и Решения

В последние версии Ubuntu, а именно начиная с 22.04, пользователи сталкиваются с неожиданной проблемой: при попытке открыть локальный файл .html, расположенный в директории, начинающейся с точки (.), браузеры сообщают о том, что доступ запрещен. Это проявляется следующим образом:

  1. При выполнении команды:
    mkdir -p ~/.test/
    echo "Hello, World!" > ~/.test/test.html
    chmod -R 777 ~/.test/
    firefox ~/.test/test.html  # Работает на Ubuntu 21.10, но не 22.04.
    chromium ~/.test/test.html  # Не работает на Ubuntu 21.10 и 22.04.

люди не могут получить доступ к файлам в директориях с названием, начинающимся на ..

Причины возникновения проблемы

Эта проблема связана с новыми механиками, внедренными для обеспечения безопасности в браузерах, работающих в среде пакетов snap. Данная система изоляции создаёт ограничения на доступ к файловой системе.

  • Изоляция данных: Snap-пакеты исполняются в изолированной среде, что позволяет улучшить безопасность приложения. Однако, это также приводит к тому, что такие приложения могут получать доступ только к определенным директориям, находящимся в домашнем каталоге пользователя.
  • Исключение скрытых директорий: Директории, начинающиеся с точки, такие как ~/.test, отключены по умолчанию из доступа приложений, работающих под snap. Это сделано из соображений безопасности, так как такие директории обычно используются для хранения конфиденциальных данных и настроек.

Обойти ограничения

Несмотря на эти ограничения, существует несколько способов, позволяющих обойти эту проблему. Одним из практических решений является следующий скрипт для Firefox и, в некоторых случаях, для других браузеров:

#!/usr/bin/env bash

for F in $* ; do
   path=${F#"file://"}
   B="$(basename "$path")"
   T="$HOME/OpenInHome_${RANDOM}${RANDOM}_$B"
   cp -l -v "$path" "$T"
   # Обновить дату, как будто файл был создан сейчас:
   touch "$T"
   open "$T"
done

Как использовать скрипт

  1. Сохраните его в файле, например, openinhome.
  2. Сделайте его исполняемым:
    chmod +x openinhome
  3. Используйте его, когда браузер сообщает о проблеме с доступом к файлу, передавая ему "неисправный" URL, например:
    openinhome file:///home/myuser/.cache/.fr-HWMTX2/2024-11-30-1915/myreport.html

Заключение

Отсутствие доступа к файлам в скрытых директориях на Ubuntu, работающей с snap, привело к возникновению серьезной проблемы для многих пользователей. Тем не менее, используя предложенные обходные пути, можно минимизировать неудобства и продолжать работу без потери производительности.

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

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

Оцените материал
Добавить комментарий

Капча загружается...