Linuxでスーパーユーザー権限へのアクセスを厳格かつ恒久的に制限する方法は? [閉鎖]

Linuxでスーパーユーザー権限へのアクセスを厳格かつ恒久的に制限する方法は? [閉鎖]

もしそうなら、スーパーユーザー/ rootとして実行されるユーザースペースプロセスがないか、ほとんどないLinuxシステムを作成することが可能であるか、そして他のプロセスが特権を上昇させることができるプロセスがない(またはほとんどない)場所があるかどうか疑問に思います。

これを達成するためにどのような技術的オプションがありますか?どのような技術的欠陥がありますか?

答え1

スーパーユーザーを削除することは実用的ではありませんが、rootセキュリティ上の理由からユーザーのアクセスを制限することは可能です。

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/sec-controlling_root_access#sec-Disallowing_Root_Access

一部の抜粋を含める予定ですが、すべてコピーすると回答が長すぎる可能性があるため、主な内容だけを説明します。

管理者がルートログインが禁止されているかどうかをさらに確認できる4つの方法は次のとおりです。

ルートシェルの変更

ユーザーがrootとして直接ログインするのを防ぐために、システム管理者は/ etc / passwdファイルでrootアカウントのシェルを/ sbin / nologinに設定できます。

コンソールデバイス(tty)を使用してルートアクセスを無効にします。

ルートアカウントへのアクセスをさらに制限するために、管理者は/ etc / securettyファイルを編集してコンソールでrootログインを無効にできます。このファイルには、rootユーザーがログインできるすべてのデバイスが一覧表示されます。ファイルがまったく存在しない場合、rootユーザーはコンソールまたはネイティブネットワークインターフェースなど、システム内のすべての通信デバイスを介してログインできます。これは、ユーザーがネットワーク経由でプレーンテキストにパスワードを送信するTelnetを使用してrootとしてコンピュータにログインできるため、危険です。

ルートSSHログインを無効にする

ルートがSSHプロトコルを介してログインしないようにするには、SSHデーモンの設定ファイル/etc/ssh/sshd_configを編集し、次の行を変更します。

#PermitRootLogin yes

以下をお読みください:

PermitRootLogin no

PAM を使用してサービスへのルートアクセスを制限します。

PAM は、/lib/security/pam_listfile.so モジュールを通じて特定のアカウントを拒否するための優れた柔軟性を提供します。管理者はこのモジュールを使用して、ログインが許可されていないユーザーのリストを参照できます。システムサービスへのルートアクセスを制限するには、/etc/pam.d/ディレクトリでターゲットサービスのファイルを編集し、認証にpam_listfile.soモジュールが必要であることを確認してください。

すべてのセクションに私が省略した追加情報がありますが、興味があればもっと読むことができます。

セルリンク

selinuxrootサービス/実行ファイル/ポート/などのselinuxコンテキストを変更して、権限を完全に削除できます。しかし、これは大きなトピックを扱うので、これについて深く議論するのではなく、RHEL文書にリンクします。https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/index

非常に残酷な例の制限を適用するには、以下を実行してみselinuxenforcingくださいsemanage login -a -s user_u root

これにより、標準ユーザー権限がrootユーザーに配布され(実行すると仮定し、現在レンガにすることができるシステムがないためわからない)、タスクなどの「root」操作を実行できないように制限されます。

ただし、これによりinit多くのサービスが開始されない可能性があるため、そのサービスを他のユーザーとして実行できるようにするには、多くの追加selinux構成が必要になる可能性があります(1つのサービスが破損しないことを考慮すると、非常に安全でメンテナンスが非常に困難になる可能性があります) 。他の人にアクセスを提供します。

答え2

スーパーユーザー機能を提供しないディストリビューションは、ユーザーがシステム構成、ドライバーのインストール、または更新を実行できるように設計されていないため、事実上使用できません。

それは、プラグを抜いてオフにする有名な「完全に安全なコンピュータ」のようなものです。
これは、極端な「セキュリティ/可用性」バランス(最大セキュリティと低可用性)の例です。

また、カーネルは起動時にユーザー権限以上の操作を実行し続けます。どのアクション)はまだハッキング可能です。

答え3

センティマンがくれた非常に徹底した答え。以下はいくつかの追加のアイデアです。

  • cronプロセスのUIDを任意の値に設定するには権限が必要なので、それを削除できます。
  • ファイルを読み取る必要があるすべてのプロセスは、「CAP_DAC_READ_SEARCH」機能を使用してroot以外のユーザーとして実行できます。 これこれこれ
  • 「システム」ファイルに書き込む必要があるプロセスには、ルートではなくUID(プログラムごとまたはリソースごとに異なるUID)を付与し、ACLを介してアクセス権を付与できます。
  • 「特権」タスクを実行できる必要があるプロセスは、これを実行するために追加機能を使用できます(上記のように)。最小権限の原則

設定後に設定を変更して制限を解決するには、次の手順を実行しますroot。 

  • デュアルブート用にコンピュータを設定します。
  • オペレーティングシステムは、ルートアクセスとアクティビティが最小限に抑えられた強化されたオペレーティングシステムです。 
  • もう1つはほぼデフォルトのLinuxですが、ネットワークドライバが削除されました。 
  • システム管理者がシステムを管理する必要がある(まれに?)状況では、システムをシャットダウンし、通常のLinuxで起動し、必要なタスクを実行してから再起動できます。

確かにSELinuxとAppArmorはこの概念を明示的にサポートしています。

関連情報