Linuxで「ps」または「top」のリストからプロセスを「隠す」ことは可能ですか


10

まず、これが可能である場合は、root(またはrootのUID 0を共有するユーザー)として実行する必要があると思います。

それはに表示されないように、どのようにプロセスを起動することができるps auxか、ps efまたはtopコマンドがroot以外によって実行された場合にリストアップ?

これは可能ですか?

私が通常実行しているディストリビューションはRHEL / CentOSとUbuntuです。そのため、ディストリビューション固有の回答があれば、それも問題ありません。


warren:これに対する解決策を見つけたことがありますか?
Chris

@Chris-いいえ。@ fianchettoの答えが唯一のルートのようです。それは、私が快適に取り組むよりもはるかに多くの作業です:-|
warren

私はこのプロジェクトに着手するつもりであり、私が決定したことを報告します。
Chris

回答:


5

さて、あなたはここにいくつかのオプションがあります。簡単な方法は、psと上位のプログラムを、非表示にしたいものを非表示にする変更されたバージョンに置き換えることです。

別の方法としては、既存のプロセスに埋め込まれたコードを実行するか、無害な名前でコードの周りにラッパースクリプトを記述します。

PSの一部のバージョンでは、argv []を変更することで変更できますが、それがtopで機能するかどうか、Linuxで機能するかどうかは不明です(これは主にBSD規則です)。

それはすべて、これを行うことによって達成しようとしていることに正確に依存していますか?


ここでの私の目標は、rootによって生成されたプロセスがすべてのユーザーに表示されないようにすることです(おそらくセキュリティ関連のデーモンなど)
warren

@flanchettoそれで、すでに実行中のプログラムがあり、その後、パスワードが安全に与えられるのと同じプロセスで、その中にパスワードを含むコマンドラインコマンドを実行するかどうか、ということですか。たとえば実行するpython myScript.pysubprocess.Popen、同じプロセスである限り、すべてのコマンド(パスワードが含まれる場合と含まれない場合があります)は表示されませんか?
Brōtsyorfuzthrāx

とにかく、それは機能しません(私はそれを試して、パスワードを見ました)。だから、私はあなたが別のことを意味していると思います。明確にしてください。:)
Brōtsyorfuzthrāx

13

カーネルパッチhttp://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=0499680a42141d86417a8fbaa8c8db806bea1201によると、procファイルシステムにhidepidオプションを使用できます。

hidepid = 0(デフォルト)は古い振る舞いを意味します-誰でもすべての誰でも読み取り可能な/ proc / PID / *ファイルを読み取ることができます。

hidepid = 1は、ユーザーが/ proc //ディレクトリにアクセスするのではなく、自分のディレクトリにアクセスすることを意味します。cmdline、sched *、statusなどの機密ファイルが他のユーザーから保護されるようになりました。proc_pid_permission()で実行される権限チェックとファイルの権限は変更されないままなので、特定のファイルのモードを想定しているプログラムが混乱することはありません。

hidepid = 2は、hidepid = 1に加えて、すべての/ proc / PID /が他のユーザーから見えなくなることを意味します。プロセスが存在するかどうか(kill -0 $ PIDなどの他の方法で学習できる)を隠すわけではありませんが、プロセスのeuidとegidは隠します。これは、実行中のプロセス、一部のデーモンが昇格された特権で実行されるかどうか、別のユーザーが機密プログラムを実行するかどうか、他のユーザーがプログラムを実行するかどうかなどの情報を収集する侵入者のタスクに適合します。

gid = XXXは、(hidepid = 0モードのように)すべてのプロセスの情報を収集できるグループを定義します。非rootユーザーをsudoersファイルなどに入れる代わりに、このグループを使用する必要があります。ただし、システム全体のタスクを監視することになっていない信頼できないユーザー(デーモンなど)は、グループに追加しないでください。

プロセスレベルで可視性を制御することはできませんが、ユーザーが自分のプロセスのみを表示できるようにすることができます。

カーネルのバージョンが3.3以降の場合は、次のコマンドで試してください。

 
mount /proc -o remount,hidepid=2


hidepid=2特定のユーザーのみに影響を与えるように(または特定のユーザーをホワイトリストに登録するように)制限できますか?
Brōtsyorfuzthrāx

よく働く!私の問題は、cronスクリプトを使用してサーバーに接続していて、すべてのユーザーが "htop"(たとえば)を使用して資格情報を表示できることでした。"hidepid = 2"ユーザーに設定すると、他のユーザーによって起動されたプロセスを表示できません。これは私が探していたものです。デフォルトで設定されていないのはなぜですか?
lepe 2016

@lepeはおそらくレガシーの理由によるものです。これとそれを壊すので、どこでも(まだ)使用することはできません。
Florian Wendelborn 2017年

OPは、pidを他のユーザーだけでなく、全体的に非表示にするように求めました...?
phil294

特定のユーザーのみが作成したプロセスを非表示にする方法はありますか?例えば。root
Avery235 2018年

-2

たとえば、topコマンドとnコマンドでFコマンドを使用して、表示するものを構成します。Wコマンドを使用して、必要な構成を〜/ .toprcに書き込みます。トップコマンドを表示します。これはあなたの問題をすぐに解決するかもしれません-それは私のために行いました。Fを使用すると、表示したいフィールドを追加/削除できます。一方、fでは、sを使用してソートを設定し、qを使用して表示に戻ることができます。次に、nで表示するプロセスの数を設定し、Wで.toprcに保存します。


それは私の見解に何かを隠すだけです
ウォーレン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.