web-dev-qa-db-ja.com

「root」ユーザーのファイル権限はどのように機能しますか?

次のファイルがあります。

---------- 1 Steve Steve 341 2017-12-21 01:51 myFile.txt

ターミナルでユーザーをrootに切り替えました。次の動作に気付きました。

  • このファイルを読み取って書き込むことができます。

  • このファイルは実行できません。

  • ユーザー権限でxビットを設定した場合(---x------)またはグループ権限(------x---)またはその他の権限(---------x)ファイルの場合、このファイルを実行できます。

誰かが私に説明したり、rootユーザーがファイルやディレクトリを扱っているときに適用されるすべてのルールを説明するチュートリアルを教えたりできますか?

30
Steve

ファイルとディレクトリへの特権アクセスは、実際にはrootであるかどうかではなく、機能によって決まります。実際には、rootは通常、可能なすべての機能を備えていますが、それらのすべてまたは多くが削除されたり、一部が他のユーザー(それらのプロセス)に与えられたりする場合があります。

簡単に言うと、アクセス制御チェックが特権プロセスでどのように機能するかについてはすでに説明しました。さまざまな機能が実際にどのように影響するかを次に示します。

主な ここでの機能は_CAP_DAC_OVERRIDE_ であり、これを使用するプロセスは、「ファイルの読み取り、書き込み、およびアクセス許可チェックの実行をバイパス」できます。これには、ファイルの読み取りと書き込み、およびディレクトリの読み取り、書き込み、アクセスが含まれます。

実行可能としてマークされていない実行ファイルには実際には適用されません。 _generic_permission_ (_fs/namei.c_)のコメントは、アクセスがファイルをチェックする前に、

読み取り/書き込みDACは常にオーバーライド可能です。実行可能なDACは、少なくとも1つの実行ビットが設定されている場合にオーバーライドできます。

そして、コードは、ファイルを実行しようとしている場合、少なくとも1つのxビットが設定されていることを確認します。これは、偶発的にランダムデータファイルを実行してエラーや奇妙な結果が出るのを防ぐための便利な機能にすぎないと思います。

とにかく、アクセス許可を上書きできる場合は、実行可能コピーを作成して実行するだけです。 (プロセスのsetuidファイルの理論には違いがあるかもしれませんが、ファイルのアクセス許可(_CAP_DAC_OVERRIDE_)をオーバーライドできましたが、他の関連機能はありませんでした(_CAP_FSETID_/_CAP_FOWNER_/_CAP_SETUID_)。ただし、_CAP_DAC_OVERRIDE_を使用すると、_/etc/shadow_などの編集が可能になるため、とにかく完全なrootアクセス権を持っていることとほぼ同じです。)

_CAP_DAC_READ_SEARCH_機能もあり、ファイルの読み取りやディレクトリへのアクセスはできますが、実行や書き込みはできません。および_CAP_FOWNER_を使用すると、アクセス許可ビットやファイルグループの変更など、通常はファイルの所有者専用に予約されている処理をプロセスで実行できます。

ディレクトリのスティッキービットのオーバーライドは_CAP_FOWNER_でのみ言及されているため、_CAP_DAC_OVERRIDE_はそれを無視するのに十分ではないようです。 (それはあなたに書き込み権限を与えますが、通常はとにかくスティッキーディレクトリにそれがあります、そして_+t_はそれを制限します。)

(ここでは、特別なデバイスは「ファイル」として数えると思います。少なくともgeneric_permission()は、ディレクトリの型チェックのみを持っていますが、それ以外ではチェックしていません。)


もちろん、機能を使用してもファイルの変更に役立たない状況がまだあります。

  • _/proc_および_/sys_の一部のファイル(実際のファイルではないため)
  • ルートを制限する可能性のあるSELinuxおよびその他のセキュリティモジュール
  • chattr 不変_+i_および_+a_フラグのみをext2/ext3/ext4に追加します。これらのフラグはどちらもrootも停止し、ファイル名の変更なども防止します。
  • サーバーが独自のアクセス制御を実行できるネットワークファイルシステム。 NFSの_root_squash_はrootを誰にもマップしません
  • ヒューズは何でもできると思います
  • 読み取り専用マウント
  • 読み取り専用デバイス
38
ilkkachu

これは、デフォルトのアクセス許可で気付いたとおりです。

  • 読み取りと書き込み:
    デフォルトでは、ルートユーザーはシステム内の任意のファイルにアクセスできます。ここで説明するように属性を変更することにより、このアクセスを削除できます: chattr 。これは機能にリンクされます。

  • 実行:
    少なくとも1つの実行ビットが設定されていない限り、rootユーザーには実行権限がありません。

11
Kevin Lemaire

myFile.txtchmod 000 myFile.txtによって取得されます。

0 no permission
1 execute
2 write
3 execute + write
4 read 
5 read + execute
6 read + write
7 all

---------は、ユーザー、グループ、その他に権限がないことを意味します。

Rootユーザーには、このファイルを変更する無制限機能があります。読み取り/書き込みが許可されます。このファイルを実行するには、ルートユーザーはとにかく実行可能にする必要があります。 (chmod 100、010または001)

5
GAD3R

実行モードは、他のモードとは少し異なります。

読み取りおよび書き込み権限は、セキュリティポリシーを実施するために使用されます。 rootユーザーは通常、セキュリティ制限の影響を受けません(不変ファイルなどのいくつかの例外があり、機能などの最新機能によりこれがより詳細になりました)。このため、このアカウントの別の名前は「スーパーユーザー」です。 」.

実行権限は、ファイルが意図で実行可能か、それとも単なるデータであるかを区別する、より助言的なモードです。このため、rootユーザーでさえ従います-データファイルを実行しても意味がありません。実行権限が設定されていない場合、rootはファイルを実行できません。それらのいずれかが設定されている場合、彼は設定できます。もちろん、rootにはファイルの権限を変更する権限もあるので、必要に応じてアカウントでファイルを実行可能にすることができます(ファイルシステムが読み取り専用でない限り)。

ところで、スクリプトはこの点で興味深いケースです。スクリプトは、関連するインタプリタのデータファイルです。スクリプトに#!行、それをプログラムとして実行できます。Shebangで指定されたインタープリターは、スクリプトファイル名を引数として実行されます。ただし、これは実行権限が設定されている場合にのみ行われます。一方、インタプリタを直接実行することもできます。 /bin/bash scriptname。インタープリターは、ファイルを読み取ることができるかどうかのみを気にし、実行権限をチェックしません。

2
Barmar

理論的に説明させてください。

rootユーザーは、オペレーティングシステムの王様です。

ファイルまたはディレクトリにXのような実行権限があり、他に何もない場合、およびSteveユーザーのような誰かがファイルを所有している場合、rootもファイルを実行できます。

Linuxのrootは何でもできるので、rootに制限はありません。

1
Hassan Sohail