ルートファイルシステムのデザイン権限がビジボックス(ビルドルート環境)を持つ組み込みデバイスをどのように見つけるべきか疑問に思います。多数の一般ユーザーがSSHを使用してシステムにログインできます。
私の最初の考えは、x(管理者はルートグループにアクセスできます)と/ etc、/ usrフォルダ、/ root(この場合xは設定されていません)に対するその他の権限を除くすべてのグループ権限を削除することでした。 。 / binフォルダは755に設定されていますが、ビジボックスバイナリにset-uidビットがオンになっているので心配です。
これらのリソースをすべてブロックした後、特定のファイルに対してACLを明示的に設定することを検討しました。
現在開いているポイントは次のとおりです。
- 一般ユーザーがアクセスできるシステムリソースは何ですか? / binフォルダについて確信しています。しかし、/ usr、/ varなどの他のフォルダはどうですか?
- /bin/sh -> (-rwsr-xr-x) /bin/busybox バックドアに関して何を考慮すべきですか?一般ユーザーが(set-uid)シェルを実行するのを防ぐ方法(わかりませんが、有効なuidがbusyboxから削除される可能性があります)
- /libフォルダはどうですか?一般ユーザーが使用するライブラリのACLを明示的に定義する必要がありますか?または、より簡単な解決策があります。
- sysfsとprocfsの権限を制限する必要がありますか、システム全体がハングしますか?
どんなアドバイスにも感謝します。
ベストアンサー1
すでに選択またはそれに対応する権限設計について十分に知っているようです/home/user1
。あなたが尋ねているもの残り体系的。これには、少なくとも関連トピックに関する議論がすでにあります。
- ユーザーを自分のホームディレクトリに制限する
- ユーザーがSSHまたはSFTPを使用して接続できるようにしますが、ホームディレクトリ(Centos7)に制限します。
- SSH / SFTPを介して指定されたフォルダにどのようにアクセスしますか?
x を除くすべての /etc、/usr フォルダに対するグループ権限、およびその他の権限を削除します。しかし、/ usr、/ varなどの他のフォルダはどうですか?
システムディレクトリに対するUnix DAC権限を見て、提供されたデフォルト値よりも制限的にすることは一般的な戦略ではありません。 (ユーザーのホームディレクトリに対する権限は除外されます。一般的に構成設定があります。)この広範な質問に答えることができる唯一の方法は次のとおりです。
ルートファイルシステムの設計権限はどのようにできますか?
- システムディレクトリの標準DAC権限を使用する必要があります。必要に応じて、お好みのLinuxディストリビューションを確認できます。また、見ることができますFHS、一部の最新の更新が見つからない可能性があります。
具体的にはbuildrootと入力してください。可能これを変更することがより可能になります。しかし、それは「しなければならない」という意味ではありません!
usermod -aG root
誰かが管理者としてアクセスできるので、セキュリティルートグループ(追加権限なし)を持ちたいのです。
お勧めできません。useradd
そのため、無制限を許可できないので、useradd -u 0
とにかくスクリプトなどをラップする必要があります。 (たとえば、管理者がラッパースクリプトをrootとして実行できるようにsudoerを設定します。)より良い方法は、ラッパースクリプトを提供してusermod
スクリプト内で保護することです。これにより、ルート以外の「システム」グループ(デーモンアカウント)への攻撃も防ぐことができます。
「一般ユーザー」(www-dataの横)はsshを使用してログインできます。
セキュリティマルチユーザーUnixシリーズシステムを実行しようとしているようです。これが質問の最も重要な部分です。
この一般的な質問は広すぎるので、ここで質問し、明確な答えを得ることはできません。
ユーザーが完全に信頼できない場合、正直な答えは信頼できないということです。さまざまなトレードオフ、戦略、戦術があります。
この質問は、実際には「組み込みデバイス、ビジボックスオンボード(ビルドルート環境)」に限定されません。ただし、これにより簡単に使用できる戦略が狭くなる可能性があります。
特に、buildrootを使用すると、たくさんセキュリティアップデートを実装するには、Debian Linuxなどの標準バイナリディストリビューションよりも多くの作業が必要です。
あなたが見ることができる無料のソフトウェアディストリビューションの中で、buildrootが非常に安全なマルチユーザーLinuxシステムをターゲットにしているのは疑わしいです。 :-). (マルチユーザーWebサーバーまたは大学およびいくつかの同様の環境で使用されるマルチユーザーPC)。
ほとんどの大規模組織では似たような内部マルチユーザーシステム関連の問題。しかし、彼らが使用する最も簡単な方法は、ユーザーが実際にプログラムを実行できる大規模なマルチユーザーUnix(またはWindows:-)インスタンスを1つも実行しないことです!
これ一般的なこのような状況は、実際には複数の従業員が使用できるデスクトップコンピュータ(「ホットデスキング」または単に複数の交代勤務)がある状況です。ここにあるいくつかの共通コントロールは、Microsoftビジネスモデル(「グループポリシー」)またはより広いWindowsエコシステムの重要な部分であり、一部はフリーソフトウェアと同等のものとして使用することはできません。
最も強力な制御の1つはアプリケーションホワイトリストです。ユーザーに完全なプログラミング/スクリプト環境(Unixシェルなど)を提供することは比較的危険です。通常は必要ありません。 (そしてシステムは間違いなくそれへのアクセスを拒否するように設計することができます。)
私はビジボックスバイナリがset-uidビットをオンにしているので怖いです。
一部の busybox アプレットは標準コマンドであり、期待どおりに機能するには setuid ルートが必要です。これはセキュリティのために設計され、正式にサポートされています。
config FEATURE_SUID
bool "ほとんどのアプレットのSUID状態を削除する"
基本
ヘルプこのオプションを使用すると、suidビットが設定されたルートに属するビジボックスバイナリをインストールすることができ、通常のユーザーが実行しても特定のアプレットがルートレベルの操作を実行できます(たとえば、fstab操作でユーザーマウントをマウントするために必要です)。 。
このオプションを有効にすると、busyboxはmain()関数に入る前にrootアクセスを必要としないアプレットに対する権限を削除します。
妄想が深刻で、各アプレットの初期ビジボックスコードがルートで実行されたくない場合は、異なるアプレット(および各バイナリへの適切なシンボリックリンク)を含む2つのビジボックスバイナリを構築し、必要なユーザーにのみ提供してください。
root権限を必要とするいくつかの小さなプログラム(バイナリでsuidビットがあるか、rootとして実行する必要があります)は、そうでなければ実行を拒否します:crontab、login、passwd、su、vlock、wall。
root権限がある場合、アプレットはroot権限を使用しますが(suidビットまたはrootによって実行されるため)、まだroot権限なしで動作しようとします。findfs、ping [6]、Traceroute [6]、山。
このオプションを選択せずにbusybox suidルートを作成すると、すべてのアプレットがルートで実行されます。これはセキュリティ上の大きな抜け穴です(「cp /some/file /etc/passwd」と思います)。