神父Br。ジョージは 彼の講義の1つ (ロシア語です)で、スーパーユーザーが違反できないいくつかのアクセス権があると述べました。つまり、スーパーユーザーが何かを行うことを禁止できるアクセス権がいくつかあります。
私はインターネットでこの情報を見つけることができなかったので、それらが何であるか知りたいです。これはおそらく、システムのコア実行に関連するものではないでしょうか。たぶん彼はいくつかのシステムプロセスを停止できないのですか?それとも彼はリアルモードでプロセスを実行できないのでしょうか?
この質問はSELinuxとは関係ありません(ジョージは質問の直前にそれについて話していました)。
ルートへのアクセスが拒否されました:
root
は直接ネットワークアクセスを拒否できます。これは、smith
、次にSudo
としてログインする必要があるため、インターネットに接続されたホストで役立ちます。
rootが実行できないもの:
これは特権の不足のためではありません。 rootができなかったことは何もわかりませんが、一部の技術的な問題は「禁止」されている可能性があります。
私はrootですが、通常のユーザーができるのに、なぜこのファイルを作成/削除できないのですか?
あなたはNFS/samba共有を利用していて、具体的な(access=
)許可。通常のユーザーは慣習法に違反します。 (以下のローカルルートとリモートルートを参照)
私はrootですが、なぜこのプロセスを強制終了できないのですか?
保留中のI/Oがあり、物理ドライブ/リモートLUNが切断されています。プロセスは、再起動によってのみ強制終了できます。
私はrootですが、archemarのパスワードを取得するにはどうすればよいですか?
あなたはできる su - archemar
承知しました。または、以前のパスワードを知らなくてもアーケマーのパスワードを変更できますが、パスワードは一方向のハッシュを使用して保存されるため、キーロガーを除いて読み取ることはできません。
ローカルvsリモートルート
今
cp /bin/bash /nfs/home/me/bash
chown root /nfs/home/me/bash
chmod u+s /nfs/home/me/bash
単にNFSサーバーにログオンし、./bash
そしてあなたは会社/大学サーバーのルートです。
通常の場合、これは正しくありません-スーパーユーザーは、システムが提供するすべての機能に対する特権/許可を持っています(1)。このルールが破綻するのは、SELinuxを投入したときです。 SELinuxを使用すると、特定のアクションを許可しないようにrootの特権でさえ制限することが可能です。ただし、許可されない特定のアクションはローカルマシンのSELinux構成に大きく依存するため、SELinuxを使用しても、この質問には一般的な意味で答えることはできません。
(1)-システムが特定の機能を提供しない場合。リアルタイムカーネル機能がない場合、「rootはこの機能にアクセスできません」というステートメントはfalseであると考えています。これは、そのステートメントが誤った仮定に依存しているためです(つまり、特定の機能はそのシステムの誰でも利用できるということです) )
一方で、userができないこと、たとえば
しかし、それらは特権ではありません。付与することができないため、誰にとっても不可能です。
次に、システム全体またはシステムの一部をオンまたはオフにできる制限があります。
たとえば、OS Xでは、Appleによって署名されている場合にのみコードの実行を許可するオプションがあります。
これも実際の特権とは見なしていません。スーパーユーザーが持っていない場合、ユーザーはそれを所有できないからです。グローバルにのみ無効にできます。
編集:
文字通り誰もそれを行うことができず、誰もその許可を付与されないため、実行可能ビットのないファイルのあなたの考えもこのカテゴリに分類されます。
また、別のユーザーまたはグループにそのファイルを実行する権限を与えたが、rootまたはユーザーグループrootが許可されていない場合でも、rootはそのファイルを実行できます(OS X 10.10、10.11およびUbuntuでテスト済み) 15.04サーバー)。
これらの場合を除いて、rootが実行できないことはほとんどありません。
ただし、 カーネルモード と呼ばれるものがあります(ユーザーモードとは異なります)。
私の知る限り、正常なシステムでは、カーネル、カーネル拡張機能、およびドライバーのみがカーネルモードで実行され、その他すべて(rootとしてログインするシェルを含む)はユーザーモードで実行されます。
したがって、「ルートであることは十分ではない」と主張することができます。ただし、ほとんどのシステムでは、rootユーザーはカーネルモジュールをロードできます。カーネルモジュールはカーネルモードで実行され、rootはカーネルモードでコードを実行する方法を効果的に提供します。
ただし、(iOSのように)これが(任意に)不可能であるシステムがあります。少なくともセキュリティ全体を活用することなしには不可能です。これは主に、コード署名の実施などのセキュリティ強化によるものです。
たとえば、 AES暗号化キー は、カーネルモードからのみアクセスできるiDevicesのプロセッサに組み込まれています。カーネルモジュールはそれらにアクセスできますが、これらのカーネルモジュールのコードもAppleで順に署名する必要がありますカーネルがそれらを受け入れるようにします。
OS Xでは、バージョン10.11(El Capitan)以降、いわゆる「ルートレスモード」も存在します(ただし、rootがまだ存在するため、この名前は誤解を招きやすいのです)。
引用 AskDifferentに対するこの優れた回答 :
ルートからであっても、これが制限するものです:
- / System、/ bin、/ sbin、または/ usr(/ usr/localを除く)は変更できません。または組み込みのアプリやユーティリティのいずれか。これらの領域を変更できるのはインストーラーとソフトウェアの更新だけであり、Apple署名のパッケージをインストールするときにのみ変更できます。
あなたが言及している「システムコアの実行」は、root
の制御下にあります。ロード可能なカーネルモジュールを介して。もちろん、これはカーネルモジュールのロードがカーネルによってサポートされていることを前提としており、root
であっても実行不可能なアクションを実行することはできません。
同じことがシステムプロセスにも当てはまります。 root
は任意のプロセスを強制終了できますが、カーネルの整合性を損なうことなくカーネルモードで実行中のプロセスを停止することは不可能であるため、そのような処理をすぐに停止することは不可能です。 root
がこれらのプロセスを強制終了することを拒否されないことに注意してください。それ自体を強制終了しても効果はありません。
最後に、リアルモード:Linuxカーネルはそれをサポートしていません。そのため、root
でさえも、誰も実行不可能なことはできません。
@Siguzaはx
権限なしでのファイルの実行について言及しましたが、これはroot
ユーザーにとって非常に可能です。
/lib/ld-linux.so.2 /path/to/executable
一例として、不変ファイルの変更が考えられます。i
を使用してファイル属性chattr
を設定し、ルートでもファイルを不変にすることができます。例えば:
# whoami
root
# touch god
# chattr +i god
# rm god
rm: cannot remove ‘god’: Operation not permitted
# touch god
touch: cannot touch ‘god’: Permission denied
ファイルがls -l
出力に通常の書き込み可能なファイルとして表示されることに注意してください。
# ls -l god
-rw-r--r-- 1 root root 0 Oct 26 19:27 god
i
属性を表示するには、lsattr
を使用する必要があります。
# lsattr god
----i----------- god
chattrのマニュアルページ は、i
属性について次のように述べています。
「i」属性のファイルは変更できません。削除や名前の変更はできません。このファイルへのリンクを作成したり、ファイルにデータを書き込んだりすることはできません。この属性を設定またはクリアできるのは、スーパーユーザーまたはCAP_LINUX_IMMUTABLE機能を持つプロセスだけです。
ただし、rootは不変性を簡単に取り消すことができます。
# chattr -i god
# rm -v god
removed ‘god’
FreeBSDでは、ルートとしても、すでにマウントされているパーティションでgmirror
を使用できません。
gmirror label -v -b prefer gm0s1 ad4s1
gmirror:ad4s1にメタデータを保存できません:操作は許可されていません。
sysctl
(kern.geom.debugflags=16
)それを実行できるようにします。
root
は特権ユーザーですが、これらの権限はカーネルによって付与されます。したがって、カーネルにはroot
よりも多くの特権があります。
Rootユーザー自身からのコラボレーションを想定すると、root
がFuseマウントにアクセスできないようにすることができます(allow_other
またはallow_root
オプション)、ただしこれはFuseがこのように動作するように設計されているためです。 Fuseは仮想レイヤーに存在するため、可能な限り透過的で薄くなるように努め、アクセス許可を別のレイヤーに委任する一般的なブロックデバイスモジュールとは対照的に、ロジックに基づいて好きなエラーを返すことができます。
これは、ファイルシステムを読み取り専用にしない限り、rootユーザーがオプションを無効にしたり、Fuseモジュールをオプションで警告なしに破棄するモジュールに置き換えたりすることを妨げるものではありません。ただし、これは「誰が監視人を監視する」状況につながるだけです。システムが嘘をついていないことをどのように検証できますか?カーネルが実際に悪意のあるバージョンを実行している間、シェルは正当なFuseモジュールを表示するchrootに座っている可能性もあります。
ファイルのアクセス許可に依存するため、実行可能でないファイルを実行できないことは、当然のことながら制限です。 (非実行可能ファイルの/lib64/ld-linux-x86-64.so.2を使用してこれを回避することは可能ですが、非実行マウント上のファイルは使用できません)
スーパーユーザーはプロセスを強制終了できますが、ファイルがプロセスによって現在使用されている場合、ファイルの編集を妨げる必須のファイルロックの問題もあります。
ある時点で、スーパーユーザーはデバイスがビジー状態のときにデバイスをマウント解除できませんでしたが、これはレイジーumountを使用して実行できるようになりました。
その他の制限は次のとおりです。
不変ファイルを変更することはできず、追加専用ファイルにのみ追加できます(Linuxでは、スーパーユーザーは任意の実行レベルで不変フラグを追加してフラグのみを追加できますが、それらの目的を部分的に無効にします)。
読み取り専用マウントに書き込むことも、非実行マウントで何かを実行することもできません
バインドできないマウントをバインドできません
ブロックデバイスが読み取り専用の場合、ファイルシステムを読み取り/書き込みとして再マウントできません
別のユーザーが所有しているFuseマウントでは、allow-otherまたはallow-rootでマウントされていない限り、何もステータスを示すことができません。
sELinux設定に違反できない
rootに影響を与えるシステム自体に固有の意図的な制限:
ファイルのc-timeを直接設定することはできません(または、実装されている場合は、誕生時刻)
パスワードをプレーンテキストとして表示できません