ulimit -n नहीं बदल रहा है - मानों की सीमा। कोई प्रभाव नहीं है


13

मैं एक ubuntu मशीन पर सभी उपयोगकर्ताओं के लिए अधिकतम फ़ाइल डिस्क्रिप्टर खोलने की कोशिश कर रहा हूं।

यह सवाल कुछ हद तक इस सवाल का है।

जब pam_limits.so की आवश्यकता होती है तब भी फ़ाइल डिस्क्रिप्टर की सीमाएं .conf सेटिंग ulimit द्वारा नहीं पढ़ी जाती हैं

सिवाय इसके कि मैंने आवश्यक "रूट" प्रविष्टियों को limit.conf में जोड़ दिया है

यहाँ प्रविष्टियाँ हैं

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

संबंधित पंक्तियों को pam_limits.so/etc/pam.d/ में सभी संबंधित फाइलों में बिना टिप्पणी के fs.file-maxकिया गया है और सही ढंग से /etc/sysctl.conf में सेट किया गया है

हालांकि, मैं अभी भी देखता हूं

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

रिबूट के बाद।

क्या समस्या हो सकती है?

मेरा डिफ़ॉल्ट शेल / बिन / श है और मैं अपने डिफॉल्ट शेल को बदलने के लिए chsh का उपयोग नहीं कर सकता क्योंकि मशीन पर मेरे उपयोगकर्ता को कुछ वितरित प्रमाणीकरण योजना के माध्यम से प्रमाणित किया गया है।


strace -o loglimit su - abc और उसके बाद egrep "(सीमा | खुला)" loglimit, हो सकता है कि आपका pam कॉन्फ़िगरेशन गलत हो
c4f4t0r

@ c4f4t0r, - su का विकल्प केवल एक नया लॉगिन का कारण बनता है जब यह अंतिम तर्क है। मुझे केवल यह पता है क्योंकि मैं उस आदमी पृष्ठ को पढ़ रहा था। इसके अलावा, एक विस्तार के रूप में, एक नियमित उपयोगकर्ता एक सुइड रूट बाइनरी को स्ट्रेस नहीं कर सकता है।
इथरफिश

रूट के रूप में आपको कमांड स्ट्रेस का उपयोग करने की आवश्यकता है -o loglimit su - abc
c4f4t0r

स्पैम के लिए खेद है, लेकिन मेरे पास इस तरह का मुद्दा है unix.stackexchange.com/questions/200310/…
vladeli

जवाबों:


5

मुझे एक समान समस्या थी, लेकिन केवल SSH लॉगिन के साथ। स्थानीय लॉगिन (कंसोल के माध्यम से) का सम्मान किया /etc/security/limits.conf

जब आप सेट करते हैं, तो यह निकला:

UsePrivilegeSeparation yes

में /etc/ssh/sshd_configफ़ाइल है, तो कांटे खाते के env स्थापित करने के लिए एक आम बच्चे sshd। क्योंकि यह बच्चा बिना पढ़े-लिखे है, तो pam_limits.so ऊपरी सीमा तय करने का कोई प्रभाव नहीं पड़ा।

जैसे ही मैंने सेट किया

UsePrivilegeSeparation no

में, /etc/ssh/sshd_configऔर SSH सेवा को बाउंस कर दिया, फिर सीमाएँ .conf फ़ाइल को SSH लॉगिन के साथ सम्मानित किया गया।


2
मेरे मामले में मैंने sshd-config को बदल दिया है UsePAM yes। (+1 मुझे sshd-config की ओर इशारा करने के लिए)
Randall Whitman

4

मुझे संदेह है कि ulimit को / etc / प्रोफाइल या ~ / .bashrc द्वारा लागू किया जा रहा है। तथ्य यह है कि आपके सिस्टम में एक जटिल पेम है, मैं पुष्टि करता हूं कि कुछ गड़बड़ नहीं है।

मैं यह भी पुष्टि करता हूं कि /etc/security/limits.d/ में कोई गलत फ़ाइल नहीं है, जिसे pam_limits (8) में वर्णित किया गया है।

मैं सत्र के लिए आवश्यक pam_limits.conf लाइन में डिबग पैरामीटर जोड़ूंगा और फिर लॉग इन करते हुए /var/log/auth.log देखूंगा।

यदि आपकी सॉफ्ट लिमिट 1024 है, तो आपकी हार्ड लिमिट क्या है?

su को -l तर्क का उपयोग करके आपको एक नया, नया लॉग इन करना चाहिए।

su -l -s / bin / bash

शुभ लाभ।


मेरी मुश्किल सीमा 4096 हैulimit -Hn
नेरवे

4

Redhat सर्वर पर रूट के रूप में लॉग इन किया

/etc/security/limits.conf

user01  -       nofile  2048

स्ट्रेस कमांड रूट के रूप में लॉग इन किया

strace -o loglimit su - user01

अन्य शेल ओपन लॉजिलेट के साथ

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

मैं इस तरह से जानता हूँ कि, pam_limits लोड किया गया था और सीमाएँ .conf पढ़ी गई थीं, यदि आपका pam_limits लोड किया गया था, लेकिन आप फिर भी अन्य मानों को ulimit -n का उपयोग करते हुए देखते हैं, तो अपने शेल प्रोफ़ाइल की जाँच करें जैसा कि @etherfish ने बताया


3

मैं इस तरह के मुद्दे के साथ था, यहाँ मैंने क्या किया।

स्ट्रेस कमांड सभी इंटरैक्शन को प्रिंट करेगा जो प्रक्रिया बाहरी पुस्तकालयों के साथ कर रही है, इसलिए इसके साथ हम देख सकते हैं कि हमारा कॉन्फ़िगरेशन लोड है या नहीं।

इसलिए, जैसा कि मैंने ऊपर बताया है:

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

मेरे समस्या में, स्ट्रेस लॉग (स्ट्रेस -o लॉग सु - उपयोगकर्ता नाम) में सीमा पाठ का कोई उदाहरण नहीं है, इसलिए फ़ाइल सीमाएँ नहीं भरी हुई थीं।

पहले मुझे यकीन है कि pam_limits.so /etc/security/limits.conf के लिए दिखता है

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

इसलिए, मैं यह सुनिश्चित करता हूं कि मॉड्यूल pam_limits.so /etc/pam.d पर स्थित फ़ाइलों में स्थिती संचालन में लोड किया गया है ... उदाहरण के लिए, /etc/pam.d/su में, मैंने जोड़ा:

session   required    pam_limits.so

अब, मैं अपने उपयोगकर्ता के लिए "su" बना सकता हूं और सीमाएं लोड हो जाएंगी। आप यह सुनिश्चित करने के लिए स्ट्रेस स्टेप को फिर से कर सकते हैं।

मेरा linux एक LFS है, इसलिए मेरी गलती pet_limits.so की अनुपस्थिति /etc/pam.d फ़ाइलों में है। अन्य विकृतियों में मुझे यह सटीक मुद्दा नहीं लगता।

लेकिन उम्मीद है कि यह मदद करता है।


1

मेरे मामले में (Centos 6.10) स्ट्रेस से पता चला कि बाद में /etc/security/limits.conf से सीमा निर्धारित की गई थी। बाद में लॉगिन प्रक्रिया में इसे /etc/security/limits.d/90-ncc.conf से सभी गैर के लिए रीसेट कर दिया गया था । -उपयोगकर्ताओं:

*          soft    nproc     1024
root       soft    nproc     unlimited
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.