Вопрос или проблема
Я установил пакет KeePassXC в формате snap на Ubuntu 17.10. У меня установлено несколько систем Linux на одном диске, поэтому я сделал большинство своих домашних папок, таких как ~/Documents, ссылками на отдельный раздел ext4 (пользователи имеют одинаковый uid, поэтому права доступа корректные). Я попытался открыть базу данных своих паролей, которая находится в Documents, но KeePassXC не может увидеть файлы внутри Documents. Если я помещаю файл в свою домашнюю папку, то он его видит.
Могут ли пакеты snap находить файлы вне моей домашней папки? Есть ли способ сделать так, чтобы KeePassXC (и остальные пакеты snap) получили доступ к файлам на моем отдельном разделе ext4 (возможно, есть какая-то конфигурация)?
Snaps обычно изолированы. По умолчанию snaps не могут получать доступ к ничему, кроме своих собственных записываемых областей, но они могут получить права доступа через интерфейсы. Есть два интерфейса, которые обеспечивают возможность доступа к файлам за пределами по умолчанию: интерфейс home
и интерфейс removable-media
. Я предполагаю, что KeePassXC использует интерфейс home
, что и позволяет получить доступ к ~/Documents
. Возможно, он даже использует интерфейс removable-media
, но это касается только того, что смонтировано в /media
или /mnt
. Если ваши другие разделы смонтированы в другом месте, snap не будет иметь разрешения на следование символическим ссылкам.
Способы сделать это, отсортированные по сложности:
- Промонтировать разделы в вашу домашнюю директорию вместо создания символических ссылок на них.
- Промонтировать разделы в
/media
и убедиться, что KeePassXC использует интерфейсremovable-media
. Это может потребовать изменения на уровне проекта, но небольшого. - Превратить KeePassXC в классический snap, тем самым сделав его не строго изолированным. Это более крупное изменение, и проект может не быть заинтересован в этом.
Обновление: Файл snapcraft.yaml
для KeyPassXC находится здесь. Похоже, он уже имеет интерфейс removable-media
. Все, что вам нужно сделать, чтобы выполнить (2) — это подключить его (это не подключено автоматически):
$ sudo snap connect keepassxc:removable-media
Я столкнулся с аналогичной проблемой с приложением snap makemkv на Ubuntu 20.04.
Мне удалось решить проблему с помощью привязки монтирования:
sudo mount --bind /data/wip /home/user/Videos/wip
Это позволило мне смонтировать мой дисковод данных в дерево /home/, чтобы приложение snap могло получить к нему доступ, как упоминал Кайл выше.
Просто чтобы добавить к ответу Кайла, некоторые пакеты из Ubuntu Software Store тоже требуют этой команды.
В моем случае kdenlive не мог получить доступ к моему другому жесткому диску. Следующая команда сработала:
sudo snap connect kdenlive:removable-media
Вот быстрое решение, чтобы приложение snap вело себя как классическая установка, то есть без какой-либо изоляции.
Просто создайте символическую ссылку на бинарный файл в /usr/local/bin, например так:
/usr/local/bin/pdftk -> /snap/pdftk/current/usr/bin/pdftk
(Удивительно, но это конкретное приложение настроено с “confinement: strict”, что очень неудобно, так как оно не будет работать с файлами из других файловых систем.)
Чтобы исправить это, например, для Arduino IDE:
sudo snap remove arduino
sudo apt install arduino
Ответ или решение
Ситуация, с которой вы столкнулись, связана с ограничениями, накладываемыми системой пакетов Snap. Snap-пакеты функционируют в изолированном окружении и по умолчанию могут взаимодействовать только с собственными для них доступными директориями. Для доступа к файлам вне своего контейнера используются специальные интерфейсы, такие как home
и removable-media
.
Решение проблемы
-
Проверка подключения интерфейсов:
Snap-пакет KeePassXC, вероятно, использует интерфейс
home
, что позволяет ему получать доступ к~/Documents
. Тем не менее, проблемы могут возникнуть, если ваша отдельная ext4-раздела, на которую вы переадресовываете, смонтирована не в домашней директории пользователя.Чтобы предоставить KeePassXC доступ к вашему разделу, попробуйте выполнить следующую команду в терминале для подключения интерфейса
removable-media
(если он еще не подключен):sudo snap connect keepassxc:removable-media
Это разрешит Snap-прикладному обеспечить доступ ко всем устройствам, подключенным как съемные.
-
Перемещение точек монтирования:
Если ваш дополнительный раздел смонтирован в какой-либо другой директории, например, в
/mnt
или/data
, Snap-приложение не сможет получить к ним доступ. Лучший способ решения этой проблемы – переместить точки монтирования в директорию вашего домашнего каталога. Например:sudo mount --bind /путь/к/вашей/папке/в/д.home/новая_папка
Убедитесь, что при использовании привязки точек монтирования выполняются необходимые шаги для регулярных монтированиеx.
-
Создание классической версии Snap:
Если ни один из вышеупомянутых методов не помог, можно рассмотреть вариант установки KeePassXC не в виде snap-пакета. Для этого выполните:
sudo snap remove keepassxc sudo apt install keepassxc
Это позволит избежать ограничений, связанных с контейнерной системой Snap.
Дополнительные рекомендации
- Не забудьте проверить, действительно ли KeePassXC и другие приложения, которые вы используете, соответствуют требованиям к доступу к файлам и корректно подключены все необходимые интерфейсы.
- При необходимости ознакомьтесь с документацией и возможностями Snap, чтобы знать, как управлять доступами для других приложений.
Эти шаги должны помочь решить вашу проблему с доступом приложения KeePassXC к файлам на другом разделе. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать их!