私はFedora 33を使用しています。私は単純な事実に混乱しています。
インストールされていないプログラムを実行しようとすると、dnfはリポジトリを検索してインストールを提案します。 「はい」と答えるとインストールされて正常に使用できます。
ソフトウェア()をインストールしようとすると、スーパーバイザーパスワードの入力をdnf install <package>
求められます。
私の例では、「ranger」を両方の方法でインストールしてみましたが、違いが見つからないようです。どちらも同じbinディレクトリにあり、両方ともプロセスのユーザーとして実行されます。
私の質問は次のとおりです。とにかくパスワードなしでソフトウェアを簡単にインストールできたら、dnfがパスワードを要求するのはなぜですか?
答え1
説明するシナリオでは、「あなた」はインストールされたパッケージを持っていません。パッケージキットサービス(すでにrootとして実行されています)がユーザーに代わってインストールされています。 PackageKitは、PolicyKitを使用して、ソフトウェアパッケージをインストールできる人とインストールできない人を決定します。権限のないユーザーがソフトウェアをインストールできないようにするには、PolicyKitポリシーを変更してそれを許可しないことがあります。 PackageKitが存在する理由の1つは、ユーザーが使用しているディストリビューション(dnf
、、、、、、または何yum
でも)でパッケージ管理システムの詳細を知る必要がないことです。彼らはPackageKitに要求するだけです。パッケージをインストールすると、PackageKitはそれを処理します。パッケージ管理と特定のディストリビューションのインストールに関する詳細。 Fedoraにパッケージを手動でインストールする場合は、パッケージ管理システムと直接対話します。 PackageKitはユーザーに代わってこれを行いません。したがって、そのレベルでインストールを実行するには、rootとして実行するか、rootパスワードを入力する必要があります。ソフトウェアパッケージ。ただし、通常のユーザーとしてrootとして実行することなく(またはなどを介して)PackageKitにユーザーの代わりにインストールするように要求できます(PolicyKitで構成されているシステムポリシーで許可されている限り)。 )またはルートパスワードを入力してください。apt
pacman
dnf
pkcon install <packagename>
su
sudo
まだインストールしていないパッケージで提供されているコマンドラインから何かを実行しようとすると、パッケージをインストールするように求める動作について説明します。PackageKit コマンドが見つかりません「私はこのような行動を本当に嫌いです。新しくインストールされたLinuxシステムで最初にすることは、パッケージを削除してPackageKit-command-not-found
これが起こらないようにすることです...
答え2
インストールされていないプログラムの名前を入力すると、そのdnf
プログラムはインストールされません。パッケージキットこれは命令が見つかりませんプラグイン(パッケージPackageKit-command-not-found
)。 PackageKit は PolicyKit を使用して特権タスクを実行するときにパスワードを要求するかどうかを決定します。今回のFESCO議論)。これが、PackageKitをバックエンドとして使用するGNOMEソフトウェアなどのGUIツールでパッケージをインストールまたは更新するときにパスワードを提供する必要がない理由です。
パスワードを要求しないpkcon
コマンドラインでPackageKitを使用することもできます。pkcon install <package>
そしてなぜdnf
必要ですかsudo
? PolicyKitをまったく使用しません。
答え3
現在、既存のリポジトリによって管理されているパッケージのみをインストールするようにDNFを制限します。実装する両方妄想がある場合は明示的に許可し、明示的に拒否しますが、少なくとも明示的な拒否自体はあまり良くないので、明示的な許可を行います。
- 明示的に許可:
- cron どこかに利用可能なパッケージのリストをキャッシュします。
- つまり、利用可能なdnfのリストです。
- このリストのインストールパッケージのみを許可
- 名前付きパッケージのみが許可されています
[0-9A-Za-z][0-9A-Za-z._-]+
(-で始めることはできません)。 - 他はすべて否定して
- 明示的に拒否:
- 「-」で始まるすべてのオプションを拒否します。
- 「/」を含むオプションは拒否されるため、ローカルおよびリモートパッケージをインストールできません。
- テスト:
- ラッパーへのsudoアクセスを提供する
- /usr/bin/dnfを実行したい場合は、sudoが失敗することを確認してください。
- スクリプトが次のようになっていることを確認してください。コマンド注入セキュリティ
私は何を逃したことがありませんか?インストール可能なパッケージがない限り(つまり、悪用可能なパッケージにroot権限のエスカレーションがある場合、またはデフォルトが誤って設定されている場合)、それを悪用してroot権限を取得する方法を考えることはできません。
ユーザーがバイナリ(カーネルの脆弱性を悪用するために使用される可能性がある)を構築したくない場合は、スクリプトから次のバイナリを除外することもできます。
- 湾岸協力協議会
- C++
- その音
- 行く
- 錆
- 腹電語
- 他の人?