web-dev-qa-db-ja.com

プロセスを他のユーザーから見えないようにする方法は?

プロセスを起動してtopコマンドから見えなくするにはどうすればよいですか?プロセスは通常のユーザー(rootではない)によって開始され、他の通常のユーザーには表示されません。

19
Debugger

3.3以降のLinuxカーネルには、プロセスを他のユーザーに隠すサポートが含まれています。

hidepid=およびgid=対応するコミット および Documentation/filesystems/proc.txt で説明されている/ procのマウントオプション。

Debian Wheezyにもこの機能が含まれています。

14
jofel

topコマンドは、カーネルから直接提供されるprocからデータを読み取ります。プロセスを非表示にするには、カーネル内のコードを使用してマスキングを行う必要があります。

SELinuxやgrsecurityなどのセキュリティフレームワーク(他の回答で説明)を使用することを除いて、ルートキットスタイルのコードが唯一の残りのオプションです。 「スタイル」と言ったのは、「ルートキット」自体は悪くないので、その使用方法だからです。他のユーザーからプロセスを隠すのには完全に正当な理由があります。そのため、この機能がセキュリティフレームワークに存在します。

これを機能させるために従う必要のある基本的なルートは、_/proc/pid/_データを渡すLinuxカーネルの関数にフックすることです(または、見方によってはHijack)。私が書いたセキュリティモジュールでLinuxカーネル関数にフックする1つの方法を示します。

https://github.com/cormander/tpe-lkm

このための「高レベル」コードは_security.c_のHijack_syscalls()メソッドにあり、その背後にある悪魔の詳細マジックは_hijacks.c_ファイルにあります。

おそらく、Linuxカーネルのソースコードの_fs/proc/_ディレクトリにフックしたい関数を見つけるでしょう。 linuxは安定したABIを提供していないため、異なるバージョンのlinuxカーネルで機能させるには、コードを多少変更する必要があることに注意してください。また、このコードを挿入できるようにするには、マシンへの完全なrootアクセスが必要であることに注意してください。

UPDATE:

_pid_getattr_カーネルシンボルをいくつかの追加コードでラップすると、これを実行するのは非常に簡単です。私は最近、上記のカーネルモジュールにプロセスを隠すものを追加しました。

https://github.com/cormander/tpe-lkm/commit/899bd5d74764af343d5fee1d8058756ddc63bfe

特定のユーザーまたはグループのプロセスを、rootとそのユーザー以外は誰も見ることができないようにすることで、同様のことを行うことができます。プロセス名で行うのは少し複雑ですが、可能です。 exe_from_mm()関数を見てください。 _pid_getattr_内で使用すると、パフォーマンスに影響する可能性があることに注意してください。

11
Corey Henderson

それは2つの主要なオプションのようです。

  • Selinuxは、さまざまな人々をさまざまなセキュリティドメインに配置し、ある意味ではそれらをサンドボックス化して、お互いが見えないようにすることで機能します。これは この質問 でカバーされています。 selinuxはLinuxの世界ですぐに事実上のセキュリティフレームワークになりつつあるので、これはおそらくあなたが見るべき方向です。

  • もう1つは、grsecurityです mariooshによって言及された および この質問で尋ねられた 。一部のディストリビューションには、grsecurityパッチが適用された代替カーネルパッケージがあります。あなたがこれを持っているなら、あなたはそれらを使うことを検討するかもしれません。

何らかの理由で、selinuxやgrsecurityなどのセキュリティフレームワークを追加せずにこれを実行したい場合は、ルートキットを作成していないことを説明してください。

4
Caleb

標準のLinuxボックスではそれほど単純ではありません。 grsecurity を見てくださいが、カーネルのパッチなどが必要です。

1
marioosh

argv [0]を別の名前でオーバーライドすることもできますが、厳密には、ある種のルートキットを探しています。これはあなたを助けるかもしれません: http://stupefydeveloper.blogspot.com/2008/10/linux-change-process-name.html

1
marcelog

topと同じように機能する同等のコマンドを記述できますが、特定の名前に一致するプロセスは表示されません。または、topコマンドのソースコードを取得し、それに応じて変更することもできます。次に、/usr/sbin内のtopコマンドをバージョンに置き換えることができます。

0
LawrenceC