ユーザーがコマンドライン引数を表示できないようにするにはどうすればよいですか?

ユーザーがコマンドライン引数を表示できないようにするにはどうすればよいですか?

buildユーザーとして実行されるCIサーバーアプリケーションがあります。 CIサーバー上で実行されるパラメータを含むすべてのコマンドはを介して表示できますps。管理者以外のユーザーには、CIサーバーにシェルをロードする権限がありませんが、操作を介してunixコマンドを実行できます。

私が興味を持っているのは、ユーザーAが単にps

CIサーバーのすべてのジョブはユーザーとして実行されますbuild。ユーザーは他に切り替えることはできませんuser

psユーザーが実行できない操作になるようにコマンドをブロックしてps問題を解決することもできますが、知りたいのですが。

  1. 権限なしでコマンドライン引数を公開する他のコマンドを実行できますかroot
  2. この質問の文脈を考えると、これを管理するより良い安全な方法がありますか?

答え1

hidepid/proc インストールオプションの表示

On multi-user systems, it is often useful to secure the process directories stored in /proc/ so that they can be viewed only by the root user. You can restrict the access to these directories with the use of the hidepid option.
To change the file system parameters, you can use the mount command with the -o remount option. As root, type:

mount -o remount,hidepid=value /proc

Here, value passed to hidepid is one of:

    0 (default) — every user can read all world-readable files stored in a process directory.
    1 — users can access only their own process directories. This protects the sensitive files like cmdline, sched, or status from access by non-root users. This setting does not affect the actual file permissions.
    2 — process files are invisible to non-root users. The existence of a process can be learned by other means, but its effective UID and GID is hidden. Hiding these IDs complicates an intruder's task of gathering information about running processes. 

詳細情報リンク -

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/Deployment_Guide/ch-proc.html

答え2

すべてのコマンドがビルドユーザーとして実行されるのは残念です。

これにより、ビルドを送信する人は誰でも他のユーザーの仕事を見て邪魔することができます。ビルドを実行すると、任意のコードを実行できます。これにより、ビルドを送信する人は誰でも実行できるだけでなく、他のタスクpsに属するファイルを読み書きできます。ビルドを送信したユーザーを信頼できない場合〜しなければならない別のユーザーとしてビルドを実行してください。

そのCIサーバーにアカウントがあるがビルド送信を許可されていないユーザーにのみ興味がある場合これhidepidオプションが役に立ちます。または、ビルドコミッタにコマンドライン引数の代わりにファイルまたは環境変数に秘密情報を渡すように指示します。このpsコマンドはあなたが処理する必要はありませんが、使いやすいプリンタです。プロセスファイルシステム。プロセス1234のコマンドラインを印刷できますcat /proc/1234/cmdline

ビルドに機密性の問題がある場合は、潜在的な情報漏洩を一度に1つずつリンクするのではなく、すべてのビルドを単一のプロセスで実行することをお勧めします。コンテナまたは仮想マシン。

答え3

popenコマンドラインに情報を渡すのではなく、プログラムを変更して標準入力に関する情報を読み取り、サブプロセス(パイプ)から始めて実行できます。pclose作業が終わったら、必ずパイプを閉じてください。

追加資料:

関連情報