私が所属するチームは、マシン制御用のプロトタイプシステム(複数のC ++プログラム、Ubuntu Server 16.04で実行されているいくつかのIPC、ネットワーク、およびデバイスI / O)の構築を終えました。すべては起動時にsystemdによって開始および管理され、ほとんど自己調整されているため、ユーザーの介入は必要ありません。
今、私たちはシステムをスキャン、コピー、または盗用したい人からシステムを保護しようとしています(彼らが本当に欲しいなら、あなたのコンピュータにアクセスできます)。私たちが考えたアプローチの1つは、必要ではなく、ハッカーがシステムを操作するのをより困難にするシェル/ターミナルをLinuxから削除することでした。私たちのほとんどは、中間レベルのLinuxシステム管理経験を持つアプリケーションプログラマーなので、次の質問があります。
まず、実際に可能ですか?これを明確にするために、ユーザーが同じコマンドを実行できるようにするすべてを削除しようとしています
cd, cat, ls, apt-get, scp
。可能であれば、これは望ましく、実際にはシステムセキュリティが向上する。これを行うには、他の利点や欠点がありますか?他のオプションがありますか?
これはどのように達成できますか?
答え1
シェルを無効にすると攻撃サーフェスが制限される可能性がありますが、/usr/binで読み取りアクセスを制限する方がはるかに簡単です。ユーザーのシェルアクセスを制限するには、ログインシェルを/ sbin / nologinに設定することが効果的です。端末で実行できる操作を制限する場合は、次の操作を行います。
- セキュアブートでeistubを使用してください。
Ubuntuはすでにこの状態でなければなりません。
- initramで回復シェルを無効にします。
これには、initramの抽出、initスクリプトの編集、および回復機能からのシェル呼び出しの削除が含まれます。
- システムでttyを無効にします。
なぜなら、あなたはsystemdを使うからです。
systemctl disable [email protected]
システムとまったく対話できません。リモートまたはローカルのメンテナンスが可能なセキュアブートが有効になっている2番目のシステムを使用できます。それ以外の場合は、ハードドライブを取り外し、chrootを使用して他のシステムでそれを変更する必要があります。
これはpttyが生成されるのを防ぎ、SSHが動作し続けることを意味します。
答え2
まあ、技術的にはLinuxはカーネルに過ぎず、どのシェルも必要ありません。ただし、役に立つタスクを実行するには、ユーザースペースで何かを実行する必要があります。必要なものをすべて1つのプロセスに統合できる場合は、次のものを置き換えることが/sbin/init
できます。他の人はいません。システムのユーザー空間プロセス。
実際にはudev
、DHCPクライアントなどの他の同等のパイプが必要になる場合があります。 (静的IPv4設定はカーネルコマンドラインで設定できます。)
/etc/init.d/
従来のsysvinitスタイルの初期化では、すべてがシェルスクリプト(でリンクされているスクリプト/etc/rc*.d
)に依存するため、これを使用するのが正しい方法です。しかし、systemdの主なポイントの1つシェルにあまり依存しないので、これが可能であるということです。もし実行するすべてのサービスにはシステム単位のファイル(init.d
スクリプトではない)があり、他の目的にはシェルスクリプトを使用しません。
Ubuntuシステム(17.10)には少なくともPostfixがありconsole-setup
、keyboard-setup
そのユニットファイルにシェルスクリプトがあるようです。最初の2つはシェルなしでコンソールにログインしないので重要ではないかもしれませんが、それを必要とする他の人がいるかもしれません。
シェルレスシステムが本当に必要な場合は、おそらく最初から始めるか、Ubuntuのような成熟したシステムよりも単純なシステムから始めます。それでも/bin/sh
取り除き、システムがどれだけ離れているかを確認することは興味深い実験になります。
あなたはこの仕事をする動機の1つとして安全について言及しました。シェルがないと、シェルの実行に依存するすべてのシェルコードが失敗し、潜在的に簡単な攻撃を防ぐことができます。ただし、原則として、攻撃者が任意のコードを実行できる場合は、シェルなしで目的の操作を手動で実行したり、システムにシェルをロードして実行したりすることを防ぐ方法はありません。攻撃者がどれくらいの時間を使う準備ができているのかが問題に過ぎません。
シェルレスシステムの1つの明らかな欠点は、構成がより困難であることである。ログインしてエディタを起動したり、サービスを再起動できないためです。変更を適用するには、「回復ディスク」からシステムを起動するか、システムを完全に再構築する必要があります。
システムにログインする一般的な方法(getty
仮想コンソール、SSHなど)を無効にしても攻撃者を効果的に防ぐことはできません。彼らは、システムにログインを許可するように誠意を持って要求するのではなく、実行中のすべてのサービスのバグを悪用する可能性が高くなります。
答え3
私の最初のオプションは、画面上でttyを無効にし、sshを無効に/制限して、デフォルトでログインする項目がないようにすることでした。 https://askubuntu.com/questions/357039/how-do-i-disable-virtual-consoles-tty1-6
別の可能性は、ユーザー自身のログインを無効にすることです。 セキュリティ上の理由でユーザーシェルを無効にする