Вопрос или проблема
Я столкнулся с довольно странной проблемой: если я пытаюсь открыть файл .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
, расположенный в директории, начинающейся с точки (.
), браузеры сообщают о том, что доступ запрещен. Это проявляется следующим образом:
- При выполнении команды:
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
Как использовать скрипт
- Сохраните его в файле, например,
openinhome
. - Сделайте его исполняемым:
chmod +x openinhome
- Используйте его, когда браузер сообщает о проблеме с доступом к файлу, передавая ему "неисправный" URL, например:
openinhome file:///home/myuser/.cache/.fr-HWMTX2/2024-11-30-1915/myreport.html
Заключение
Отсутствие доступа к файлам в скрытых директориях на Ubuntu, работающей с snap
, привело к возникновению серьезной проблемы для многих пользователей. Тем не менее, используя предложенные обходные пути, можно минимизировать неудобства и продолжать работу без потери производительности.
Данное решение и поднятая проблема подчеркивают важность настройки прав доступа и безопасности в современных операционных системах, и пользователям следует быть внимательными к изменениям в среде, в которой они работают.
Если вас интересуют другие аспекты работы с snap
и их ограничениями, рекомендую ознакомиться с официальной документацией и форумами, чтобы быть в курсе последних обновлений и решений.