apt-getにsudoが必要なのはなぜですか?


12

これはおそらくばかげた質問ですが、最近、apt-getにシングルユーザー機能がない理由わからないことに気付きました。

私が探していない答え:

  • 「aptがシステムレベルのディレクトリに書き込むためです。」これは表面レベルの理由ですが、私はより深いレベルを探しています。シングルユーザー環境を基本的にブロックしているものはありますか(la pip + virtualenv)?
  • 「ソースからビルドできます」。これは回避策ですが、私の質問には対応していません。私は短期的な問題を修正したくないので、とにかくすべてのマシンでrootアクセス権を持っています。

ホームディレクトリのソースから任意のパッケージをビルドできることを知っているといいのですが。
ジョビン14年

そうですが、apt-get制限の根底にある理由を探しています。ソースからのビルドはその答えにはなりません。
PattimusPrime 2014年

1
私があなたが本当に尋ねている質問は、「なぜほとんどのLinuxソフトウェアが再配置可能ではないのですか?」だと思います。apt-getがソフトウェアをユーザーローカルディレクトリにインストールすることを許可することは完全に可能ですが、ほとんどのソフトウェアはこれをサポートしていないため、そうすることにはほとんど意味がありません。

回答:


10

apt-getにsudoが必要なのはなぜですか?

常にではない。apt-getなくても完璧にお使いいただけますsudo。あなたが必要としない事例がありますsudo使用してのように、すべてのapt-get downloadパッケージをダウンロードするあなたの現在のディレクトリにapt-get sourceあなたの現在のディレクトリにDebianのソースファイルをダウンロードしchangelogたダウンロードして与えられたパッケージの変更履歴を印刷して、持っている任意のコマンドは、--simulate/ --dry-run/ --no-act(の場合はinstall、あなたも必要です--no-download)。

これは、これらのアクション/コマンドがシステムディレクトリを書き込む必要がないためです。

さて、なぜapt-get必要なのsudoですか?実際にはそうではありません。apt-getを破棄し、パッケージをダウンロードしwgetて使用dpkg --extractし、好きなディレクトリにパッケージを抽出できます。--instdirバイナリのみのパッケージで機能するものもあります。

さて、なぜこれがデフォルトではないのですか?苦痛だから。あなたがやりたいことをするために、私たちは各パッケージを2回再パッケージする必要があります。ビルド時に、バイナリは通常、必要なファイルとライブラリの場所を知る必要があります(場合によっては、これはコンパイル時にハードコードされます)。

さて、代わりに何ができますか?ただ、いくつかの環境chrootしルートなしでパッケージをインストールすることができvirtualenvのを、。

要約すると、これはapt-getの使用方法ではなく、apt-getに似た、それを可能にするパッケージマネージャーも知りません。結局のところ、apt-getこれはdpkgのフロントエンドであり、これの一部を実行できます。


3

パッケージ自体の情報によって、ファイルがインストールされる場所が決まるため、パッケージデータベースsudoへの書き込み/と変更の両方が必要です。

パッケージをインストールするときは、ビルド済みのバイナリファイルと、パッケージの重要な部分である関連する構成およびメタファイルとスクリプトをインストールします。これらのスクリプトと構成ファイルは、依存関係とシステムの残りの部分に密接にリンクされています。自分が何をしているか正確に知らない限り、これらを軽く変更したくないでしょう。

職場など、sudoアクセス権のないシステムを使用している場合は、ソースからコンパイルして、インストールディレクトリをホームに設定できます。その後、は必要ありませんsudo。ソースからインストールする場合、通常はパッケージデータベースを変更しません。


回答ありがとうございます!私は回避策を知って使用していますが、私が理解しようとしているのは、なぜそれらを使用してきたのです。問題は、インストールパスがパッケージのメンテナによってハードコードされていることだと言っていると思います。なぜこれを変更できないのですか?
PattimusPrime 2014年

2

それは愚かな質問ではありません。

オペレーティングシステムの特権レベル

Ubuntu(そして確かに最新のオペレーティングシステム)には、さまざまなソフトウェアに対してさまざまな特権レベルの概念があります。ユーザーが開始したソフトウェアは通常、ユーザーベースの特権レベルで実行されます。これは、セキュリティ上の理由から、システムを変更するために必要なアクセス権がありません。そのユーザーに属するファイルのみを変更できます。

ユーザーのファイルだけでなく、システム全体に影響を与える可能性のあるオペレーティングシステムの変更を実行するには、より高い特権レベルが必要です。これは、Linuxでは「スーパーユーザー」特権(または一般的には「ルート」と呼ばれます)。この特権レベルでは、オペレーティングシステム全体に自由にアクセスでき、すべてのユーザーのすべてのファイルを変更または破棄できます。

apt-getの役割

apt-getを使用してソフトウェアをインストールする場合は、システム全体で使用できるソフトウェアをインストールします。つまり、ソフトウェアはユーザーのホームディレクトリに置かれ、そのユーザーだけが実行できるようになるのではなく、システム全体のアプリケーションディレクトリ(/ usr、/ etc、/ varなど)にインストールされます。 )すべてのユーザーが実行します。これらのディレクトリを変更するには、スーパーユーザー権限が必要です。権限のないソフトウェアがシステムを混乱させる可能性があるため、権限のないユーザーはこれらのディレクトリを変更できません。

apt-getスーパーユーザー権限を与えずにapt-getを使用して何かをインストールしようとする場合、克服できない最初のハードルは、独自のソフトウェアカタログに書き込むためのロックを取得することです。システム全体のユーティリティであるapt-getは、インストールされたソフトウェアのカタログを維持します。これには、編集するためにスーパーユーザー権限が必然的に必要となるため、権限のないソフトウェアが混乱することはありません。しかし、このハードルをどうにかして克服できたとしても(たとえば、ファイルのアクセス許可を変更することによって)、インストールルーチンはいくつかのシステムディレクトリへの書き込みに依存するため、ソフトウェアのインストールに続く多くのステップは失敗します。

Linuxを使用すると、スーパーユーザー権限なしでソフトウェアをインストールできますが、自分で作成するか(シェルスクリプトなど)、自分でコンパイルして、コンパイルした実行可能ファイルを直接実行する必要があります。アクセスできる場合は、apt-get(およびaptitude、synaptic、Ubuntuソフトウェアセンターなどの他のAPTベースのユーティリティ)を使用してシステム全体にインストールする方が簡単です。


答えてくれてありがとう、そして徹底してくれてありがとう。私はapt-getのシステム全体の性質を理解していますが、私が理解しようとしているのはそのようにする必要がある理由です。
PattimusPrime 2014年

1
そのようにする必要はありませんでした。たまたま、Ubuntu(およびDebian)が設計された方法です。ソフトウェアをインストールする通常の方法がユーザーごとであるオペレーティングシステムの設計を妨げるものは何もありません。
thomasrutter 14年

1

apt-getがデフォルトで/(または同様の)ディレクトリにインストールされるのはなぜですか?

これの単純な理由は、apt-getソフトウェアをインストールする場所を決定しないことです。これは開発者によって決定され、アプリケーション自体の内部でコーディングされます。

他のディレクトリにインストールできますか?

はい、他のディレクトリにインストールできます。オープンソースソフトウェアの場合は、ソースを入手し、インストールディレクトリを変更して、コンパイル、ビルド、インストールします。通常、付属のconfigureスクリプトには、インストール先を指定できるオプションがあります。これは通常--prefixです。

しかし、私はapt-getの使用を強く求めています。今何をする?

OK。apt-getを使用してこれを行う方法はまだありますが、エンドユーザーには多すぎるでしょう。手順に従ってください。

  1. ソースを取得します。
  2. インストールディレクトリをのように変更します$HOME
  3. コンパイルしてビルドします。
  4. .debファイルにパッケージ化します
  5. ランチパッドアカウントを作成します。
  6. ubuntuの行動規範に署名します(これが必要かどうかはわかりません)。
  7. 自分用のPPAを作成します
  8. debパッケージをppaにアップロードします。
  9. ソースにPPAを追加します。
  10. を実行しますsudo apt-get update
  11. を実行しますapt-get install package

それは簡単すぎる/難しいです。インストール中にディレクトリを選択することは可能ですか?

はいといいえ。

はい、可能です。一部のソフトウェアはこの方法を使用しQt5ていますが、私が知っている唯一の方法は.runファイルで、実行時に他の多くの入力の中でインストールディレクトリを要求します。

いいえ、この方法では使用しないためapt-getです。

いつか簡単にこれを行うことができapt-getますか?

私はの開発者が考えていないapt-getソフトウェアのおよび/または開発者がこれを行うに興味があるが、いくつかのソフトウェアが行いますが開発することができ、ソース、変更、コンパイル、ビルドをインストールのみインストールディレクトリを求めることにより、自動的に手順を。

私の6番目の感覚は、コマンドは

apt-dont-get install pkg1 pkg2 ...

回答をありがとう-それは徹底的であり、私の質問に対処します。ただし、シングルユーザー機能をapt-getに開発することに関心がない理由がわかりません。その機能は特定のユースケースで非常に役立つようです。
PattimusPrime 2014年

良い情報ですが、Q&A内のQ&Aフォーマット...?:) Idk、多分あなたは標準フォーマットに編集するべきですか?ちょっとした考え。
2014年

@PattimusPrimeほとんどの場合、管理者は必要なすべてのソフトウェアをインストールし、他の人はソフトウェアをインストールする必要がないため、このようなケースはほとんどありません。また、ソースからのビルドは非常に簡単であり、ソフトウェア開発者が独自のソフトウェアで実装しない限り、そのような機能を実装しても役に立たないという事実は、開発者がそうすることapt-getを妨げます。また、既存のプログラムの多くは他のプログラムに依存しており、/ usrディレクトリで検索します。このような機能を実装するには、依存関係のあるすべての既存のソフトウェアに変更を加える必要があります(これは数千に及ぶことはありません)。
登録ユーザー

$ HOMEにファイルをインストールするDebianポリシー違反です。あなたはそれをしてはいけません。どちらかといえば、/opt/package代わりにディレクトリを使用してchmodしてください。
Braiam 14年

@Braiam:に私はインストールパッケージを推薦する人を見ている$HOME/opt/彼らが、パッケージをインストールするための実行に必要な権限を持っていない場合は/opt/...
アーディティヤ

-1

chmoddedされているファイルを編集して、使用できないようにします。あなたはそれらをchmodできるかもしれないので、私はそれをすることをお勧めしません


回答ありがとうございます。chmoddedファイルのみを編集する理由を探しています。シングルユーザー機能は実装が簡単で、一部の領域(スーパーコンピューティングクラスターなど)で非常に役立つように
思えます
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.