ulimit -n tidak berubah - nilai values.conf tidak berpengaruh


13

Saya mencoba untuk meningkatkan deskriptor file terbuka maksimum untuk semua pengguna di mesin ubuntu.

Pertanyaan ini agak merupakan tindak lanjut dari pertanyaan ini.

buka file descriptor limit.conf pengaturan tidak dibaca oleh ulimit bahkan ketika pam_limits.so diperlukan

kecuali bahwa saya telah menambahkan entri "root" yang diperlukan di Limit.conf

Ini adalah entri

*               soft    nofile           100000
*               hard    nofile           100000
root            soft    nofile           100000
root            hard    nofile           100000

Baris yang terkait dengan pam_limits.sotelah di-komentar di semua file yang relevan di /etc/pam.d/ dan fs.file-maxtelah ditetapkan dengan benar di /etc/sysctl.conf

Namun, saya masih melihat

abc@machine-2:/etc/pam.d$ ulimit -n
1024

setelah reboot.

Apa yang bisa menjadi masalah?

Shell default saya adalah / bin / sh dan saya tidak dapat menggunakan chsh untuk mengubah shell default saya karena pengguna saya pada mesin diautentikasi melalui beberapa skema otentikasi terdistribusi.


strace -o loglimit su - abc dan setelah itu egrep "(limit | open)" loglimit, mungkin konfigurasi pam Anda salah
c4f4t0r

@ c4f4t0r, opsi - untuk su hanya menyebabkan login baru ketika argumen terakhir. Saya hanya tahu ini karena saya baru saja membaca halaman manual itu. Juga, sebagai detail, pengguna biasa tidak dapat mengacak binary root suid.
etherfish

sebagai root, Anda perlu menggunakan perintah strace -o loglimit su - abc
c4f4t0r

maaf untuk spam tetapi saya memiliki masalah seperti ini unix.stackexchange.com/questions/200310/…
vladeli

Jawaban:


5

Saya memiliki masalah yang sama, tetapi dengan login SSH saja. Info masuk lokal (via konsol) menghormati /etc/security/limits.conf.

Ternyata, ketika Anda mengatur:

UsePrivilegeSeparation yes

dalam /etc/ssh/sshd_configfile, lalu sshd mem-fork anak yang tidak memiliki hak untuk menyiapkan env akun. Karena anak ini tidak memiliki privasi, maka pam_limits.so pengaturan batas atas tidak berpengaruh.

Begitu saya atur

UsePrivilegeSeparation no

masuk /etc/ssh/sshd_configdan memantulkan layanan SSH, maka file limits.conf dihormati dengan login SSH.


2
Dalam kasus saya, saya mengubah sshd-config menjadi UsePAM yes. (+1 untuk menunjuk saya ke sshd-config)
Randall Whitman

4

Saya menduga ulimit sedang diterapkan oleh / etc / profile atau ~ / .bashrc. Fakta bahwa sistem Anda memiliki pam yang rumit, saya akan mengkonfirmasi bahwa ada sesuatu yang tidak beres.

Saya juga akan mengkonfirmasi bahwa tidak ada file yang salah di /etc/security/limits.d/ diurai seperti disebutkan dalam pam_limits (8).

Saya akan menambahkan parameter debug ke sesi yang diperlukan baris pam_limits.conf dan kemudian menonton / var / log / auth.log saat Anda login.

Jika batas lunak Anda 1024, apa batas keras Anda?

su harus membuat Anda baru, masuk baru dengan su menggunakan argumen -l.

su-l -s / bin / bash

Semoga berhasil.


batas keras saya adalah 4096 yaituulimit -Hn
Nerrve

4

Pada server Redhat login sebagai root

/etc/security/limits.conf

user01  -       nofile  2048

perintah strace dicatat sebagai root

strace -o loglimit su - user01

dengan shell terbuka loglimit lainnya

grep "limit" loglimit
open("/lib64/security/pam_limits.so", O_RDONLY) = 6
 ..........
 ..........
 open("/etc/security/limits.conf", O_RDONLY) = 3
 read(3, "# /etc/security/limits.conf\n#\n#E"..., 4096) = 1823
 open("/etc/security/limits.d", O_RDONLY|O_NONBLOCK|O_DIRECTORY) = 3
 setrlimit(RLIMIT_NOFILE, {rlim_cur=2*1024, rlim_max=2*1024}) = 0

Saya dengan cara ini saya tahu bahwa, pam_limits dimuat dan Limit.conf telah dibaca, jika pam_limits Anda dimuat tetapi Anda masih melihat nilai-nilai lain menggunakan ulimit -n, periksa profil shell Anda seperti yang dikatakan @etherfish.


3

Saya dengan masalah seperti ini, di sini apa yang saya lakukan.

Perintah strace akan mencetak semua interaksi yang dilakukan proses dengan pustaka eksternal, jadi dengan itu kita bisa melihat apakah konfigurasi kita dimuat atau tidak.

Jadi, saya lakukan, seperti yang disarankan di atas:

root:/etc/pam.d$ strace -o ~/loglimit su - glaudiston
glaudiston:~$ exit
logout
root:/etc/pam.d$ cat ~/loglimit | grep limits.conf

Dalam masalah saya, strace log (strace -o log su - nama pengguna) tidak memiliki instance teks batasan, jadi file tersebut membatasi.conf TIDAK dimuat.

Pertama saya pastikan pam_limits.so mencari /etc/security/limits.conf

root:/etc/pam.d$ strings /lib/security/pam_limits.so | grep limits.conf
/etc/security/limits.conf

Jadi, saya memastikan bahwa modul pam_limits.so dimuat dalam operasi auth di file yang terletak di /etc/pam.d ... misalnya, di /etc/pam.d/su, saya menambahkan:

session   required    pam_limits.so

Sekarang, saya dapat membuat "su" untuk pengguna saya dan batasnya akan dimuat. Anda dapat mengulangi langkah strace untuk memastikannya.

Linux saya adalah LFS, jadi kesalahan saya adalah tidak adanya pam_limits.so di file /etc/pam.d. Di distro lain saya tidak berpikir untuk menjadi masalah yang tepat ini.

Tapi semoga ini membantu.


1

Dalam kasus saya (Centos 6.10) strace menunjukkan bahwa setelah batas ditetapkan dari /etc/security/limits.conf di proses login kemudian diatur ulang dari /etc/security/limits.d/90-nproc.conf untuk semua non pengguna-root:

*          soft    nproc     1024
root       soft    nproc     unlimited
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.