プロセスをバックグラウンドで開始したり、サービスとして作成したりするのは簡単ですsystemd
。
しかし、Linux マシン上のアクティビティを監視するプロセスを起動したい場合、それは攻撃の標的になります。 ユーザーが何か悪いことをしたい場合、たとえそれがsudo
ers またはusers であっても、単にまたはwheel
を実行するだけで、まずこのプロセスを強制終了します。kill
systemctl stop
強制終了のみを実行できるプロセスを強制する方法はありますかroot
?
皆さん、サービスが停止される可能性があると考えるだけでもrsyslog
、Linux がいかに脆弱であるかを認識する必要があります。パイロットがブラック ボックスをオフにできるようなものです。このようなことを許可している航空会社はありますか? または、パイロットに許可リストを与えて、飛行機を救うためにできることをすべて阻止している航空会社はありますか? もちろん、パイロットは飛行機を墜落させることができますが、ブラック ボックスがそれを記録します。
禁止リストに関する私の提案は、あなたを怖がらせるかもしれませんが、セキュリティの観点からは正当なものです。ですから、質問を投げかけた人を責めないでくださいね。
答え1
無制限の sudo/wheel 権限を持つと、誰でもあなたが行ったことを元に戻すことができます。 などを使用してプロセスを直接終了する可能性を排除することでこれを達成できたとしても、sudo kill
他の sudo コマンドを使用してこれを回避できるか、または管理から締め出されることになります。
そもそも、信頼できないユーザーにはなぜ無制限の sudo 権限があるのか考えてみてください。そうすべきではありません。そのような権限は、完全に信頼できるユーザーにのみ付与してください。実行する必要がある特権コマンドがある場合は、それらのコマンドに対してのみ sudo を有効にします。
+netmgr /usr/sbin/ifup, /usr/sbin/ifdown
(visudo -f /etc/sudoers.d/netmgr
これを sudoers アドオン ファイルに入れるために使用します)。
この方法では、ユーザーに と のみの実行を許可し、他の sudo コマンドは許可しませsudo /usr/sbin/ifup
んsudo /usr/sbin/ifdown
。 には、その他の多くの例、手順、およびセキュリティに関する考慮事項が記載されていますman sudoers
。ぜひお読みください。
監査は通常別の方法で行われます。具体的には、別のマシンで、リモート ステーションからのログを受け入れるように syslog を構成します。問題のマシンでは、すべてのログをローカルに保存するだけでなく、ログ マシンに送信するようにログを設定します。誰かがこのログ送信を無効にした場合でも、無効にするアクション自体がログに記録されるため、少なくとも誰が犯人であるかがわかります。
答え2
誰かに力を与えて、その力の使用を禁止することはできません。与える力は、その人に持たせたいものだけに限定する必要があります。
コメントでこうおっしゃいました:
使用を許可する必要があります
kill
。または、systemctl stop
一部のアプリケーションではこれらの権限が必要なため、
それは、ユーザーこれらのコマンドにアクセスする必要があるのは、アプリケーションユーザーに実行権限は制限されておりsudo ./someprogram
、プログラムが root として実行されると、kill
必要に応じて などを使用できます。ただし、ユーザーはこれらの内部コマンドに直接アクセスすることはできません。
基本的に、ユーザーはコマンド、彼らはアクセスする必要がある機能性がリスクが高すぎる場合はkill
、アクセスをブロックして、同じ結果を達成できる他のより安全な方法を提供します。safekill
のように動作するkill
が、特定のプロセスを強制終了する要求を拒否する小さなユーティリティを作成することもできます。 ユーザーに への sudo アクセスを許可しますsafekill
が、実際の には許可しませんkill
。 ユーザーが常にこれらのコマンドを使用して同じことを実行する場合は、そのプロセス全体を小さなプログラムにカプセル化し、手動で行う代わりにそれを使用するようにします (たとえば、sudo restart_webservers
さまざまなサーバー プロセスをすべて個別に強制終了して再起動するのではなく、 を実行します)。 ユーザーは必要な機能に引き続きアクセスできますが、危険な武器を直接使用することはできません。
特定の設定によっては、さらに強力な強制メカニズムが利用できる場合があります。一部のプロセッサにはウォッチドッグタイマーウォッチドッグが利用可能になりました。アクティビティ監視プログラムを変更して、ウォッチドッグを起動し、数秒ごとにリセットします。誰かがモニターを強制終了した場合、ウォッチドッグタイマーが期限切れになり、システムが自動的に再起動し、起動時にモニタープログラムが再起動されます。これにより、モニターが無効になることを厳密に防ぐことはできませんが、無効にした後は誰も意味のある操作を行えなくなります。また、システムログに大きな赤いフラグが作成されます。ウォッチドッグを備えたほとんどのシステムは、ウォッチドッグによって特定の再起動がトリガーされたときにレポートします。ユーザーがシェルにログインしている間にウォッチドッグによってトリガーされた再起動は、次のように見なされます。とても疑わしい。
答え3
Linux 初心者です。これらのコマンドが実行すべきことだけを実行するプログラムやスクリプトを作成し、それらを root 所有者にして、setuid ビットを追加することを検討していただけますか? もちろん、大きな問題として、これらのコマンドを他の人に実行させたくない場合があります。元のユーザー情報を取得できるかどうかはわかりません。もちろん、setuid/setgid には常に特別な注意が必要です。
答え4
Aスタートを思いつきました!
root
次のようにしてユーザーに DEFAULT SHELL を設定できます。
useradd [someuser] -s [a certain executable]
次に、特定の実行可能ファイル = 次のような検閲スクリプトの場合:
特定のコマンドの実行を自動的に検閲します。いいね
stop
&rsyslog
の組み合わせ。このシェルを脱出して別のシェルを使用するコマンドを禁止します。
bash
root
上記の @user253751 が述べたような、ユーザーが役割を獲得するのを防ぐコマンドを禁止します。残りのコマンドを渡す
/bin/bash
次に、r+x
任意のユーザーに対して設定します。
この回答の下では、どんな提案でも歓迎します。特に 2 と 3 については、さまざまな手段があるようです。
/etc/profile
Bash は最初に設定をロードします/etc/bashrc
。後者は変数を扱っていることに気づきましたPROMPT_COMMAND
。最後の行でこれを乗っ取って検閲スクリプトに追加することは可能ですが、デフォルトでは誰もそれを元に戻すためのルート権限を持たないため、一部のシステムでは免除ユーザー名が必要です。
上記の 4+1 を満たす完全な検閲は正当な回答としてマークされます。
私は「諦めなければならない」という回答を正当なものとしてマークすることは決してありません。
関連する質問は次のとおりです。
ユーザーの bash コマンドをログに記録するにはどうすればよいですか?