web-dev-qa-db-ja.com

単一のユーザーのみにDEBファイルでアプリケーションをインストールするにはどうすればよいですか?

ソフトウェアセンターまたはDEBファイルを使用してアプリケーションをインストールする場合、通常はすべてのユーザーに対してシステム全体にインストールされます。

単一のユーザーのみにアプリケーションをインストールする方法はありますか?

33
Takkat

達成したい内容に応じて、この作業を行うためのさまざまな方法があります(または、少なくとも、必要な機能をハックして見せる)。

多くの方法でのソフトウェアのインストールは、リソースを利用可能にするか、システムに既に存在するものへのアクセスを許可することに帰着します。

プリンターへのアクセスを許可するか、ユーザーが特定のディレクトリでプログラムを実行できるようにするかどうかにかかわらず、これを実現する方法があります。Ubuntuにネイティブかもしれませんが、これらの種類のソリューションは一般に(もちろん) .debインストールの後に追加されます。

追加できるインストール後制御の2つの一般的なクラスを次に示します。適切な環境、たとえば厳密に制御されたグループポリシーが適切に設定されている場合、基本システムを適切に設定しておけば、これは簡単になります。これらの種類の許可は、LDAPまたはユーザーまたはグループごとに認証と許可を与えることができる同様のシステムに結び付けることさえできます。

可視性制御
私はおそらく多少似たような状況に陥りましたが、私の場合、ユーザーは(まだ)あまり洗練されていませんでした(全員が7歳未満です)。私にとっては、Gnomeメニューを非表示にするか、デスクトップランチャーを削除するだけで機能しました。

ディレクトリから実行可能ビットを削除すると、プロセスがそれらを検索またはトラバースすることができなくなります。これらを効果的に非表示にし、ユーザーごとに使用不可にすることができます。たとえば、ファイルアクセスに基づいてメニューを作成するデフォルトのシステムポリシーがある場合、この種の化粧品のソリューションを取得し、追加の労力をほとんどかけずに後続のインストールで機能させることができます。

実行制御
リソースの制御は、Unix許可、apparmorプロファイル、SELinux許可などを介して実行できます。アプリケーションによっては、他のレベルの制御フィルタリングが作用する場合があります。よりターゲットを絞ったソリューションがない場合は、特定のプログラムの周りにラッパーを作成して、ユーザーまたはプロセスのアクセスを制御する必要があります。

5
belacqua

まあdpkgは設計の目的ではないので、役に立ちません。システムにインストールされたパッケージのルート所有者の国勢調査になりたい。

頭に浮かぶ唯一のことは、パッケージを抽出し、ホームディレクトリに手動でファイルを配置しようとすることです。

ただし、これはいくつかの場合にのみ機能します。多数のパッケージがチャンクに分割され(/usr/binの実行可能ファイルまたはスクリプト、/libのライブラリ、および/usr/shareのライブラリなど)、これらの場所はビルドスクリプトによってハードコーディングされます。したがって、このようなものを~に引き込もうとすると、壊れます。依存関係を解くのに何時間も費やすこともできますが、がんの治療法を見つけたり、世界の美しさを吸収するなど、あなたの時間に役立つ何かをすることができます。

ソフトウェアを書いた人からパッケージ化されていないバージョンを取得するだけで、はるかに良くなります。ほとんどすべてのフリーソフトウェアは、圧縮されたアーカイブの形式でソースとして入手できるため、それを入手してビルドするだけです。 make installステップは実行しません。アプリは構築されています。好きな場所に置くだけです。

10
Oli

私はこの主題についてあまり知りませんが、他の回答から、パッケージを/の代わりにdpkgを使用して、--rootパラメーターを使用して別のディレクトリにインストールし、 [chroot パッケージが「インストール」されたディレクトリ(もちろん、ユーザーのホームディレクトリのディレクトリ)。

root以外のユーザーにパッケージをインストールするには、fakechrootの代わりに chroot で上記のプロセスを使用することができます。

免責事項:私はこれを試さず、dpkgまたはchrootを書いている時点ではあまり経験がありませんが、私は何からdoはこれらのツールについて知っており、このプロセスはmightで機能します。

chroot機能なしでrootの効果を達成したい人に役立つ情報があるリンク:

更新

私は今、この主題に触れるもので少しやりましたが、さらにいくつかを見つけました...

フラグメント(ローカル環境のビルディングブロック):

  • Fakechroot -chroot(1)をエミュレートします
  • Debootstrap -ディレクトリ内に別のDebianファイルシステム階層を作成する
  • Fakeroot-NG / fakeroot -何かのルートになりすますことができる
  • EmDebian -より少ないスペースを使用するdebianバリアントと chroot環境でよく使用されます
  • binfmt_misc -ネイティブバイナリのように、インタープリターを使用してファイルを実行できます。外部アーキテクチャのバイナリ(または(偽)chroot)で作業するためにqemu-userと併用すると便利です( scripts/qemu-binfmt-conf.sh これはQEMUソースコードに付属しており、これを自動化します)
  • Qemuユーザースペース -他のアーキテクチャのバイナリを実行できます。一部のプロセッサアーキテクチャをサポートしていない場合、これらのツールのいくつかで使用できます。
  • LwIP -ユーザー空間から実行できるTCP/IPネットワークスタック

完全(完全なローカル環境プロバイダー):

  • ユーザーモードlinux -通常のプロセス/プログラムとして別のLinuxシステムを実行します
  • Qem -完全な仮想コンピューターを実行する
  • PRoot -chroot(1)mount --bindbinfmt_miscの機能を提供し、qemu-user-spaceを使用して他のアーキテクチャからバイナリを実行します
  • Linux namespaces -Linuxカーネルバージョン3.8以降で利用可能な機能である ser namespaces を使用する場合、ローカル環境内で完全なルートを持つことができます。

Summary:ルート権限をローカルでエミュレートするか、実際に持っていることにより、DEBパッケージをローカル環境にインストールできます。

6
Abbafei

おそらくdpkg--rootオプションを使用して、別のディレクトリにインストールできます。ただし、アプリケーションが/etcなどの固定された場所で何かを探す場合、おそらく問題が発生します。

つまり、簡単な方法はないと思います。

4
Dariel Dato-on

実行可能ファイルの所有権を変更して、1人のユーザーのみが実行できるようにすることができます。その後、必要に応じて、他のユーザーのメニューからアプリケーションを削除できます。

2
arrange

疑わしい。

Debは主にアーカイブに展開され、インストール時にファイルシステムのルートに抽出されます(さらにいくつかの設定)。 1人のユーザーだけにインストールする場合は、何らかの方法で/ home/userフォルダーにインストールする必要があります。あなたがそうしても、彼らは動作しません、例えばアプリケーションバイナリは/ usr/bin(または同様のsth)に格納されず、起動しようとしてもシステムはそれらを見つけられません。同様に、システムは/ homeのどこかにあることをシステムが認識しないため、ライブラリなどは役に立たないでしょう。 ブルートフォースアプローチを試して、PATH変数を調整してdebアーカイブからファイルを抽出した場所を指すことができますが、そうではありませんVERYのみ安全ではありませんが、互換性の問題が発生する可能性があります(GNOMEは.desktopファイルを/ usr/share/applicationsに拡張するため、メニューエントリは機能しません)。

さらに、一部のユーザーのみにパッケージをインストールした場合、自分用にインストールした他のユーザーと競合する他のユーザーがインストールしたパッケージと、おそらく他の多くのパッケージ管理関連の問題が表示されると、狂った依存関係の問題が発生する可能性があります。

これらすべてのトラブルにより、ユーザーごとにパッケージを個別に管理することは非常に困難になります。したがって、.debsの背後にあるアイデアがそれを許可しないため、1人のユーザーだけにパッケージをインストールすることは不可能のようです。

1
Rafał Cieślak