GNU/Linux >> Linux の 問題 >  >> Linux

実行しているユーザー制限を確認するにはどうすればよいですか?

nproc が問題でした:

[[email protected] ~]# ps -eLf | grep pascal | wc -l
4068
[[email protected] ~]# cat /etc/security/limits.d/20-nproc.conf
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.

*          soft    nproc     4096
root       soft    nproc     unlimited
[[email protected] ~]#

man limits.conf の状態:

   Also, please note that all limit settings are set per login. They are
   not global, nor are they permanent; existing only for the duration of
   the session. One exception is the maxlogin option, this one is system
   wide. But there is a race, concurrent logins at the same time will not
   always be detected as such but only counted as one.

nproc はログインごとにのみ適用されますが、グローバルにカウントされるようです。したがって、nproc 8192 および 5000 スレッドでのログインは問題ありませんが、nproc 4096 および 50 スレッドで同じ UID の同時ログインは、グローバル カウント (5050) が nproc 設定を超えているため、それ以上作成できません。

[[email protected] ~]# ps -eLf | grep pascal | grep google/chrome | wc -l
3792

アカウントにまったくアクセスできない場合は、問題の原因を突き止めるのに苦労します。ただし、システムまたはアプリケーションのログを確認してください。うまくいけば、何らかのプログラムがそこに手がかりを残しているはずです (特に、ログイン試行の失敗について)。

プログラムを実行して実験できる場合は、制限された各値を増やしてみて、それがいつ機能し、いつ EAGAIN で失敗したかを確認することで、どの制限に達したかを知ることができます。 .各値に使用されるリソースを一覧表示することもできます。すべての制限のデータを収集するユーティリティは考えられませんが、存在する可能性は十分にあります。

問題がカーネルの制限であると仮定すると、それらは setrlimit にリストされています マンページ。ユーザー ID ごとに適用されるものは次のとおりです。

  • RLIMIT_MEMLOCK — スワップ不能メモリのサイズ。ログインを妨げるべきではありません。スワップできないメモリを要求するプログラムはほとんどありません。
  • RLIMIT_MSGQUEUE — メッセージキューのサイズ。ログインを妨げるべきではありません。メッセージ キューを使用するプログラムはほとんどありません。
  • RLIMIT_NPROC — プロセスの最大数。これは絶対にする 到達した場合、ログインを防ぎます。 /etc/security/limits.conf で上限を引き上げる 既存のセッションには影響しませんが、新しいプロセスには影響するため、システム管理者が値を大きくすると、ユーザーはログインできるようになります。
  • RLIMIT_SIGPENDING — 保留中のシグナルの最大数。ログインを妨げるべきではありません。sigqueue を使用するプログラムはほとんどありません。 シグナルをエンキューします。

したがって、プロセスの制限が最も可能性が高いものです。実行中のシェルにアクセスできる場合は、プログラムを実行して確認できます。エラーはかなり特徴的です:

$ ls
bash: fork: retry: No child processes
bash: fork: retry: No child processes
bash: fork: retry: No child processes
bash: fork: retry: No child processes
bash: fork: Resource temporarily unavailable

この制限は ulimit -u で出力できます .問題のあるユーザーとして実行されているシェルにアクセスでき、ユーザーが setuid プログラムを実行していない場合は、この制限に対してカウントされるプロセスを set /proc/*/task/*/cwd/.; echo $# でリストできます。 (ユーザーが cwd を読み取ることができるカーネルスレッドをリストします これは、ユーザーがプロセスを完全に制御できることを意味します)。


Linux
  1. SSHで実行中のユーザーのプロセスを表示するにはどうすればよいですか?

  2. MySQL が実行されているポートと、接続できるかどうかをテストする方法は?

  3. どのプロセスが自分のプロセスにシグナルを送信したかをLinuxで確認するにはどうすればよいですか

  1. Linuxでユーザーが実行するプロセスに制限を設定する方法

  2. Linux –実行中のLinuxディストリビューションを特定する方法は??

  3. 特定のサイトで実行されているサーバー OS を確認するにはどうすればよいですか?

  1. Linuxで実行中のプロセスを強制終了する方法

  2. Ubuntuでオープンファイルの制限を増やす方法は?

  3. 自分が画面にいるかどうかを確認するにはどうすればよいですか?