私はマシンを制御するためのプロトタイプシステム(Ubuntu Server 16.04で実行されているIPC、ネットワーク、デバイスI/Oを備えた複数のc ++プログラム)の構築を完了したばかりのチームで働いています。すべては起動時にsystemdによって開始および管理され、ユーザーの介入を実際に必要とせずにほぼ自己調整します。
私たちは今、私たちのシステムを検査、コピー、または盗もうとする人々からシステムを保護しようとしています(彼らは本当に必要な場合にコンピューターにアクセスできるようになります)。これを行うことを考えていた方法の1つは、シェル/ターミナルをLinuxから削除することです。これは不要であり、ハッカーがシステムをナビゲートするのをより困難にするためです。私たちは主にLinuxシステムの管理経験が中程度のアプリケーションプログラマーであるため、次の質問があります。
まず、実際にそれが可能かどうか。明確にするために、ユーザーがcd, cat, ls, apt-get, scp
などのコマンドを実行できるようにする端末を削除したいと思います。
可能であれば、それが推奨され、システムのセキュリティを実際に向上させます。これを行うことに他の長所または短所はありますか?代替手段はありますか?
どうすればそれを達成できますか。
シェルを無効にすると攻撃対象領域が制限される可能性がありますが、/ usr/binで読み取りアクセスを制限する方がはるかに簡単です。シェルアクセスをユーザーに制限するには、ログインシェルを/ sbin/nologinに設定します。ターミナルで実行できることを制限することが目的の場合:
これはすでにUbuntuの場合です。
これには、initramを抽出してinitスクリプトを編集し、rescue関数でShell呼び出しを削除することが含まれます。
Systemdを使用しているため
systemctl disable [email protected]
システムと対話する方法はまったくありません。リモートまたはローカルのメンテナンスを可能にするセキュアブートが有効になっている2番目のシステムを使用できます。または、ハードドライブを取り外し、chrootを使用して別のシステムに変更を加える必要があります。
これはpttyの作成を妨げるものではなく、SSHが引き続き機能することを意味します。
技術的には、Linuxは単なるカーネルであり、シェルは必要ありません。しかし、何か便利なことをするには、ユーザースペースで何かを実行する必要があります。必要なものすべてを1つのプロセスに統合できた場合は、/sbin/init
の代わりにそれを削除して、他のユーザースペースプロセスを持たないようにすることができます。システム。
実際には、udev
と同等の機能と、おそらくDHCPクライアントが必要になる可能性があります。 (静的IPv4構成は、カーネルコマンドラインで設定できます。)
従来のsysvinitスタイルの初期化では、すべてがシェルスクリプト(/etc/init.d/
のスクリプト、/etc/rc*.d
からのリンク)に依存していたため、それを使用するのは簡単です。しかし systemdのポイントの1つ は、シェルにそれほど依存していないため、実行可能かもしれませんif実行しているすべてのサービスには(init.d
スクリプトの代わりに)systemdユニットファイルがあり、他の目的でシェルスクリプトを使用していません。
あるUbuntuシステム(17.10)では、少なくともconsole-setup
、keyboard-setup
とPostfixのユニットファイルにシェルスクリプトがあるようです。シェルなしでコンソールにログインしないため、最初の2つはおそらく重要ではありませんが、それを必要とする他の人がいるかもしれません...
シェルレスシステムが本当に必要な場合は、最初から始めるか、Ubuntuのような本格的なシステムよりも最小限のものから始めます。ただし、/bin/sh
を削除して、システムがどこまで到達するかを確認するのは興味深い実験です。
この動機の1つとして、セキュリティについて言及されました。シェルがないと、シェルの起動に依存するシェルコードは失敗し、単純な攻撃者を阻止する可能性があります。ただし、原則として、攻撃者が任意のコードを実行できるようになった時点で、シェルなしで手動で必要な操作を実行したり、システムにシェルをロードして実行したりすることを阻止することはできません。これは、攻撃者が使用する準備ができている時間の問題です。
シェルレスシステムの明らかな欠点は、ログインしてエディターを起動したり、サービスを再起動したりすることができないため、システムの構成が難しくなることです。変更を加えるには、「レスキューディスク」からシステムを起動するか、完全に再構築する必要があります。
システムへの通常のログイン方法(仮想コンソールではgetty
s、SSHなど)を無効にしても、攻撃者を阻止することはできません。彼らはあなたのシステムが彼らにログインさせてくれるかどうかをうまく尋ねるよりも、あなたが走っているあらゆるサービスのバグを悪用する可能性が高いです。
私の最初の選択は、画面上のttyを無効にし、sshを無効化/制限することです。したがって、基本的にログインするものはありません。 https://askubuntu.com/questions/357039/how-do-i-disable -仮想コンソール-tty1-6
別の可能性は、ユーザー自身のログインを無効にすることです: セキュリティ上の理由でユーザーシェルを無効にする