Как установить приложение по файлу DEB только для одного пользователя?

33

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

Есть ли способ установить приложение только для одного пользователя?

Takkat
источник

Ответы:

5

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

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

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

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

Контроль видимости
У меня была, возможно, несколько похожая ситуация, но в моем случае пользователи были (пока) не очень искушенными (всем им было меньше 7 лет). Для меня просто скрывать меню Gnome и / или удалять настольные программы запуска.

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


Контроль выполнения Контроль ресурса может осуществляться через разрешения Unix, профили apparmor, разрешения SELinux и так далее. В зависимости от приложения могут присутствовать другие уровни фильтрации управления. В отсутствие более целенаправленных решений вам, возможно, придется написать обертки вокруг определенных программ для контроля доступа пользователей или процессов.

belacqua
источник
3
+1 за разделение видимости и аспекта контроля исполнения
Takkat
10

Ну, dpkgэто вам не поможет, так как это не является его целью. Он хочет быть единственной переписью пакетов, установленных в системе.

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

Однако это будет работать только для некоторых вещей. Множество пакетов разбиты на куски (исполняемые файлы или скрипты в /usr/bin, библиотеки в /libи другие вещи /usr/shareи т. Д.), И эти места жестко запрограммированы скриптами сборки. Таким образом, если вы попытаетесь втянуть нечто подобное в это ~, оно сломается. Вы могли бы часами разматывать зависимости, но вы могли бы сделать что-то полезное в свое время, например, найти лекарство от рака или впитать в себя часть красоты в мире.

Вы бы сделали намного лучше, просто взяв не упакованную версию у того, кто пишет программное обеспечение. Почти все свободное программное обеспечение доступно в виде сжатого архива в виде исходного кода, так что хватайте его и просто создавайте. Вы не делаете make installшаг. Ваше приложение создано, просто поместите его туда, куда хотите.

Оли
источник
1
Что касается последнего варианта: мне кажется, что он может помочь в некоторых (простых программах) случаях, но обычно пакет, например, устанавливает сценарии инициализации в /etc/init, ищет файлы конфигурации /etcили имеет некоторые другие пути в жестком коде.
устроить
2
Проекты, основанные на autoconf, могут позволить установить пользовательский каталог установки через ./configure --prefix=$HOME/local.
Инго Каркат
6

Я не слишком разбираюсь в этом вопросе, но из других ответов видно, что вы можете установить пакет в другой каталог вместо /с dpkgпомощью --rootпараметра, а затем выполнить chrootкоманду dir, которой был пакет " установлен "в (который, конечно, может быть каталогом в домашнем каталоге пользователя).

Чтобы установить пакет для пользователя, отличного от root, может быть возможно использовать вышеуказанный процесс с fakechrootвместо chroot.

Отказ от ответственности : Я не пробовал это, и не имеют большого опыта работы на момент написания с dpkgили chroot, но от того, что я действительно знаю об этих инструментах, этот процесс только может работать.

Ссылки, содержащие информацию, которая может быть полезна для людей, которые хотят достичь эффекта chrootбез rootвозможностей:

Обновить

Теперь я немного поработал над тем, что касается этой темы, и выяснил еще кое-что ...

Фрагменты (строительные блоки местной среды):

  • Fakechroot - эмулируетchroot(1)
  • Debootstrap - создайте другую иерархию файловой системы Debian внутри каталога
  • Fakeroot-NG / fakeroot - может претендовать на роль пользователя root
  • EmDebian - вариант debian, который использует меньше места и часто используется в средах chroot
  • binfmt_misc - может запускать файлы, используя их интерпретаторы, как если бы они были собственными двоичными файлами; полезно вместе с qemu-user для работы с двоичными файлами (или в (поддельном) chroot) сторонних архитектур ( scripts / qemu-binfmt-conf.sh, который поставляется с исходным кодом QEMU, автоматизирует это)
  • Пространство пользователя Qemu - может запускать двоичные файлы других архитектур; может использоваться с некоторыми из этих инструментов, если они не поддерживают некоторые процессорные архитектуры
  • LwIP - сетевой стек TCP / IP, который можно запустить из пространства пользователя

Полная (полная локальная среда провайдеров):

  • Пользовательский режим linux - запускает другую систему linux как обычный процесс / программу
  • Qemu - запустить полную виртуальную машину
  • PRoot - обеспечивает функциональные возможности chroot(1), mount --bind, binfmt_miscи работают бинарные программы из других архитектур , используя для QEMU пользовательского пространства
  • Пространства имен Linux - Позволяет иметь полный root в локальной среде при использовании пользовательских пространств имен , функция, которая доступна в ядре Linux версий 3.8 и более поздних.

Описание : эмулируя или фактически имея локальные привилегии root, пакеты DEB могут быть установлены для локальной среды.

Abbafei
источник
3
Не стесняйтесь переформатировать свой ответ полностью, если у вас есть информация, которая противоречит вашей предыдущей информации (или если вы думаете, что она что-то добавляет). Во многих случаях ваш ответ будет более понятным, если перефразировать вместо добавления дополнительных разделов «Изменить» или «Обновить». Ваша информация интересна, но, возможно, наиболее важные части застряли внизу.
Белаква
@jgbelacqua - переформатировал, спасибо за совет.
Аббафей
4

Вы, вероятно, можете использовать --rootопцию dpkgустановки в другой каталог. Но, вероятно, возникнут проблемы, если приложение будет искать вещи в фиксированных местах, например /etc.

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

Дариэль Дато-он
источник
2

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

организовать
источник
1
Общая мотивация желания установить приложение для одного пользователя - избегать необходимости использовать административные привилегии для установки.
rndrük
@ ændrük Но если он уже устанавливает с .deb, разве мы не принимаем права администратора?
Белаква
@jgbelacqua Насколько мне известно, да, установка из .deb требует прав администратора. Но, вообще говоря, установка чего-либо «только для одного пользователя» никогда не должна требовать повышения привилегий, используемых для системного администрирования. Например, я часто устанавливаю программы только для себя, помещая их в ~/bin. В этом вопросе есть двусмысленность относительно того, хочет ли Takkat ограничить доступ / видимость многопользовательского приложения, или он хочет установить однопользовательское приложение. Ваши вопросы и вопросы аранжировки используют первое толкование, а остальные предполагают второе.
ændrük
1

Сомнительно.

Дебы - это в основном архивы, которые извлекаются в корень вашей файловой системы при установке (плюс некоторые настройки). Если вы хотите установить их только для одного пользователя, вам нужно как-то установить их в папку / home / user. Даже если вы это сделаете, они не будут работать, так как двоичные файлы приложения не будут помещаться в / usr / bin (или что-то подобное), и система не найдет их, если вы попытаетесь их запустить. Точно так же библиотеки и т. Д. Были бы бесполезны, так как система не знала бы, что они находятся где-то в / home. Вы можете попробовать подход грубой силы и настроить переменную PATH так, чтобы она указывала, куда вы извлекли файлы из архива deb, но это будет не только ОЧЕНЬ небезопасно, но может привести к проблемам с совместимостью (например, пункты меню не будут работать, поскольку GNOME расширяет файлы .desktop в / usr / share / Applications).

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

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

Рафал Цеслак
источник