ルートアクセスが必要なLinuxコマンドは何によって決まりますか?


23

ルートアクセスが必要なLinuxコマンドは何によって決まりますか?たとえば、特権apt-getを必要とすることが望ましい理由を理解していrootます。しかし、これらのコマンドを他のコマンドと区別するものは何ですか?単に実行可能ファイルの所有権と実行権限の問題ですか?


2
それは主に、彼らがどのファイルに触れ、どの関数を呼び出すかという関数です。
フェデリコクレズカロカ

9
一部のアプリは、ルートが所有するファイル/ディレクトリにアクセスする必要があります。そのため、彼らは電話openをして「許可を拒否」するだけです。一部のアプリgetuidは、rootによって呼び出されない場合、チェックして動作を停止します。一部はルートによって物理的に所有され、所有者のみがそれらを実行できます(を参照chmod)。アプリのヘッダーに「ルートが必要」マークがあるかどうかを尋ねている場合、答えはノーです。私の知る限りではそのような事はありません
user996142

1
ps:いくつかのsyscalls(既知のポート<1024へのバインドなど)にもルートアクセスが必要な場合があります。
user996142

apt-getはrootをまったく必要としません。/ usr / binディレクトリにあります。askubuntu.com
Braiam

ここで「必須」とは意味を明確にするものです。root(またはsudoパーミッション)を持たない限りプログラムが実行されない、または適切に仕事をするためにrootである必要があるということですか?
jamesqf

回答:


15

Linuxでは、rootの特権は一時的に「機能」に分割されていたため、そのドキュメントを調べることで、rootの特別な特権の完全なリストを取得できますman 7 capabilities

あなたの質問に答えるために、コマンドはこれらの特権のいずれかが必要なときにrootとして実行する必要があり、その非スクリプト実行可能ファイルはファイルメタデータに関連する機能が設定されていません(たとえば、Pythonスクリプトが機能を必要とする場合、機能shebang行で指定されたpythonインタープリターにいる必要があります)。

ルートアクセスを必要とする一部のコマンドsudoは、実行可能ファイルにSUIDビットが設定されているため、次のようなものを必要としないことに注意してください。このビットを使用すると、実行アクセス権を持つユーザーが実行すると、実行可能ファイルが所有者(通常はルート)として実行されます。sudoユーザーの変更は必要な特権アクションであるため、例はそれ自体です。

編集:私はあなたの質問から、コマンドを実行する前にルートアクセスが必要かどうかを判断できるという考えがあるかもしれないことに注意します。そうではありません。プログラムにはルート権限が必要な場合とそうでない場合があります。これは、実行時に提供されるデータのためにプログラムによって決定される場合があります。たとえば、vim引数なしでを呼び出し、一連のキーを押して貼り付けることで、書き込み権限がないファイルに何かを書き込むように指示するか、ルート権限を必要とする別のコマンドを実行することができます。実行前のコマンドについては、最終的にルートアクセスが必要であることを示すものはありません。それは、それを必要とする何かをしようとする時点でのみ決定できるものです。

とにかく、ルートの権限の参照マンページからの非常に少数の例があります:

  • プロセスUID(setuid(2)、setreuid(2)、setresuid(2)、setfsuid(2))の任意の操作を行います。
  • ファイルの読み取り、書き込み、および実行の許可チェックをバイパスします。(DACは「任意アクセス制御」の略語です。)
  • シグナル送信の許可チェックをバイパスします(kill(2)を参照)。これには、ioctl(2)KDSIGACCEPT操作の使用が含まれます。
  • ネットワーク関連のさまざまな操作を実行します。
    • インターフェイス構成。
    • IPファイアウォール、マスカレード、およびアカウンティングの管理。
    • ルーティングテーブルを変更します。
  • インターネットドメインの特権ポート(1024未満のポート番号)にソケットをバインドします。
  • カーネルモジュールのロードおよびアンロード(init_module(2)およびdelete_module(2)を参照);
  • システムクロックの設定(settimeofday(2)、stime(2)、adjtimex(2)); リアルタイム(ハードウェア)クロックを設定します。
  • quotactl(2)、mount(2)、umount(2)、swapon(2)、swapoff(2)、sethostname(2)、setdomainname(2)など、さまざまなシステム管理操作を実行します。
  • reboot(2)およびkexec_load(2)を使用します。
  • chroot(2)を使用してください。
  • プロセスのnice値(nice(2)、setpriority(2))を上げ、任意のプロセスのnice値を変更します。

32

それは主にツールまたはプログラム何をするかという問題です。非スーパーユーザーは自分が所有またはアクセスできるファイルのみに触れることができることに留意してください。すべてのものに指を入れることができる必要があるツールは、それを行うためにスーパーユーザーのアクセスを必要とします。スーパーユーザーアクセスを必要とする可能性のあるモノの簡単なサンプルには、次のものが含まれますが、これらに限定されません。

  • 1024未満のポートでリスニングTCPソケットを開く
  • システム構成の変更(例:のいずれか/etc
  • 新しいグローバルにアクセス可能なライブラリ(/libおよび/usr/lib)またはバイナリ(/bin/usr/bin)の追加
  • 十分に寛容なモードを持たない、タッチを行っているユーザーが所有していないファイルにタッチする
  • 他のユーザーのファイルの所有権を変更する
  • プロセスの優先順位を高める(例renice
  • ほとんどのサービスの開始または停止
  • カーネル構成(swappinessの調整など)
  • ファイルシステムのクォータの調整
  • 「フル」ディスクへの書き込み(ほとんどのファイルシステムは、rootユーザー用にスペースを予約します)
  • 他のユーザーとしてアクションを実行する

4
「プロセスの優先順位を変更する」非rootユーザーは、より良いものに変更することができます。彼らができない唯一のことは、あまり良くないことです。
ブライアム

1
このリストは完全ではありませんが、スーパーユーザーだけができる非常に重要なタスクは、他のユーザーになりすますこと、または単にログインすることです。
フィハグ

プロセスの優先順位に関する箇条書きを調整し、「他のユーザーとしてアクションを実行する」を追加しました。十分な時間とコメントがあれば、このリストがより包括的になることを願っています。
-DopeGhoti

0

許可を分割する順序ではなく、許可を確認するのはユーザーのIDに基づいていると思います。ファイルとユーザーには特権があり、コマンドを分割しないでください。


3
私は失礼に聞こえるつもりはありませんし、英語があなたの第一言語ではないかもしれないと理解していますが、この答えはまったく理解していません。「一致」とは、「同意」または「適合」を意味します。「ユーザーのID」でどのように使用できるかわかりません。「権限を分割する順序」とはどういう意味ですか?「分割」は「分離する」ことを意味します。誰の「注文」?ファイルが特権を使用するように動作できるものでない場合、ファイルはどのように「特権」になりますか?この質問の文脈で「コマンドを分割するべきではない」ということを少し理解できると思いますが、それだけです。そのままでは、解析不能のようです。
-JoL

@JoL「順序」は誤訳であり、「コマンド」であるべきだと思います。これにより、その文の異なる解析が可能になります。この回答の内容を可能な限り使用することはやや厄介です。「コマンドに従って権限が分割されていないことは、ユーザーのIDを使用して権限を確認する方法に従っていると思います。権限はファイルとユーザーに関するものです。コマンドを分割しないでください。」これはまだ明確ではありませんが、あなたにとってよりも私にとっては少し理にかなっています。私のコメントが、誰かがこの答えを完全に理解し、形に編集するのに役立つことを願っています
-hvd
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.