GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mengetahui batas pengguna mana yang saya hadapi?

nproc adalah masalahnya:

[[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 Limit.conf menyatakan:

   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.

Tampak bagi saya bahwa nproc hanya diberlakukan per login tetapi diperhitungkan secara global. Jadi login dengan nproc 8192 dan 5000 utas tidak akan mengalami masalah, tetapi login simultan dari UID yang sama dengan nproc 4096 dan 50 utas tidak akan dapat membuat lebih banyak karena jumlah global (5050) di atas pengaturan nproc-nya.

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

Jika Anda tidak dapat mengakses akun sama sekali, Anda akan kesulitan menemukan masalahnya. Namun periksa log sistem atau aplikasi, semoga beberapa program meninggalkan petunjuk di sana (terutama untuk upaya masuk yang gagal).

Jika Anda dapat menjalankan program untuk bereksperimen, Anda dapat mengetahui batas mana yang telah dicapai dengan mencoba meningkatkan setiap nilai terbatas dan melihat kapan berhasil dan kapan upaya gagal dengan EAGAIN . Dimungkinkan juga untuk membuat daftar sumber daya yang digunakan untuk setiap nilai; Saya tidak dapat memikirkan utilitas yang mengumpulkan data untuk semua batasan, tetapi mungkin ada satu.

Dengan asumsi bahwa masalahnya adalah batas kernel, itu tercantum dalam setrlimit halaman manual. Yang berlaku per ID pengguna adalah:

  • RLIMIT_MEMLOCK — ukuran memori yang tidak dapat ditukar. Seharusnya tidak mencegah masuk, sangat sedikit program yang meminta memori yang tidak dapat ditukar.
  • RLIMIT_MSGQUEUE — ukuran antrian pesan. Seharusnya tidak mencegah masuk, sangat sedikit program yang menggunakan antrean pesan.
  • RLIMIT_NPROC — jumlah maksimum proses. Yang ini pasti akan mencegah login jika tercapai. Meningkatkan batas dalam /etc/security/limits.conf tidak akan memengaruhi sesi yang ada, tetapi akan memengaruhi proses baru, jadi jika administrator sistem meningkatkan nilainya di sana, pengguna akan dapat masuk.
  • RLIMIT_SIGPENDING — jumlah maksimum sinyal yang tertunda. Seharusnya tidak mencegah masuk, sangat sedikit program yang menggunakan sigqueue untuk mengantrekan sinyal.

Jadi batas proses adalah yang paling mungkin. Jika Anda memiliki akses ke shell yang sedang berjalan, Anda dapat mengonfirmasi dengan mencoba menjalankan program; kesalahannya harus sangat khas:

$ 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

Anda dapat mencetak batas ini dengan ulimit -u . Jika Anda memiliki akses ke shell yang berjalan sebagai pengguna yang bermasalah, dan pengguna tersebut belum menjalankan program setuid apa pun, Anda dapat membuat daftar proses yang diperhitungkan terhadap batas ini dengan set /proc/*/task/*/cwd/.; echo $# (mencantumkan utas kernel di mana pengguna dapat membaca cwd link, yang berarti bahwa pengguna memiliki kendali penuh atas proses tersebut).


Linux
  1. Linux – Bagaimana Cara Mengidentifikasi Distro Linux Yang Sedang Berjalan??

  2. Bagaimana cara melihat proses yang berjalan dari setiap pengguna di SSH?

  3. Bagaimana saya tahu apakah saya ada di layar?

  1. Cara membatasi perintah pengguna di Linux

  2. Bagaimana saya bisa membuat pengguna yang tidak masuk?

  3. Bagaimana saya bisa mengetahui OS server mana yang dijalankan oleh situs tertentu?

  1. Cara Mengatur Batasan pada Proses yang Berjalan Pengguna di Linux

  2. Bagaimana Mengenalinya Saya Menjalankan Di Chroot?

  3. Cara Membunuh Proses yang Berjalan di Linux