ulimit -n ไม่เปลี่ยนแปลง - values ​​limits.conf ไม่มีผลกระทบ


13

ฉันพยายามยกระดับตัวอธิบายไฟล์ที่เปิดสูงสุดสำหรับผู้ใช้ทั้งหมดบนเครื่องอูบุนตู

คำถามนี้ค่อนข้างติดตามคำถามนี้

open file descriptor limit.conf การตั้งค่าไม่ได้อ่านโดย ulimit แม้ว่าจะต้องมี pam_limits.so

ยกเว้นว่าฉันได้เพิ่มรายการ "root" ที่จำเป็นใน 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

หลังจากรีบูตเครื่อง

มีปัญหาอะไร

เชลล์เริ่มต้นของฉันคือ / bin / sh และฉันไม่สามารถใช้ chsh เพื่อเปลี่ยนเชลล์เริ่มต้นเนื่องจากผู้ใช้ของฉันบนเครื่องได้รับการรับรองความถูกต้องผ่านรูปแบบการตรวจสอบสิทธิ์แบบกระจายบางส่วน


strace -o loglimit su - abc และหลังจากนั้น egrep "(จำกัด | เปิด)" loglimit บางทีการกำหนดค่า pam ของคุณอาจไม่ถูกต้อง
c4f4t0r

@ c4f4t0r ตัวเลือก - su ทำให้เกิดการเข้าสู่ระบบใหม่เฉพาะเมื่อเป็นอาร์กิวเมนต์สุดท้าย ฉันรู้เรื่องนี้เพราะฉันแค่อ่านหน้าคนนั้น นอกจากนี้ตามรายละเอียดผู้ใช้ทั่วไปไม่สามารถ strace ไบนารีรูทของ suid ได้
etherfish

ในฐานะที่เป็น root คุณต้องใช้คำสั่ง strace -o loglimit su - abc
c4f4t0r

ขอโทษสำหรับสแปม แต่ฉันมีปัญหาแบบนี้unix.stackexchange.com/questions/200310//
vladeli

คำตอบ:


5

ฉันมีปัญหาที่คล้ายกัน แต่ด้วยการเข้าสู่ระบบ SSH เท่านั้น การเข้าสู่ระบบท้องถิ่น (ผ่านคอนโซล) /etc/security/limits.confเคารพ

ตามที่ปรากฏเมื่อคุณตั้งค่า:

UsePrivilegeSeparation yes

ใน/etc/ssh/sshd_configไฟล์จากนั้น sshd ให้เด็กที่ไม่มีสิทธิพิเศษตั้งค่า env ของบัญชี เนื่องจากเด็กคนนี้ไม่ได้รับสิทธิพิเศษดังนั้น pam_limits.so การตั้งค่าขีด จำกัด สูงสุดจึงไม่มีผลใด ๆ

ทันทีที่ฉันตั้ง

UsePrivilegeSeparation no

ใน/etc/ssh/sshd_configและเด้งบริการ SSH จากนั้น จำกัด ไฟล์ได้รับการเคารพด้วยการเข้าสู่ระบบ SSH


2
ในกรณีของฉันฉันเปลี่ยน sshd-config UsePAM yesไป (+1 สำหรับการชี้ให้ฉันไปที่ sshd-config)
Randall Whitman

4

ฉันสงสัยว่า ulimit กำลังถูกใช้โดย / etc / profile หรือ ~ / .bashrc ความจริงที่ว่าระบบของคุณมีแพมที่ซับซ้อนฉันจะยืนยันว่ามีบางสิ่งที่ไม่ผิดพลาด

ฉันขอยืนยันด้วยว่าไม่มีไฟล์ที่ผิดพลาดใน /etc/security/limits.d/ ที่ถูกแยกวิเคราะห์ตามที่กล่าวไว้ใน pam_limits (8)

ฉันจะเพิ่มพารามิเตอร์การแก้ปัญหาให้กับเซสชั่นที่จำเป็น pam_limits.conf บรรทัดแล้วดู /var/log/auth.log ในขณะที่คุณเข้าสู่ระบบ

หากค่า จำกัด ซอฟต์คือ 1024 ขีด จำกัด ฮาร์ดของคุณคือเท่าใด

su ควรให้คุณมีความสดใหม่เข้าสู่ระบบด้วย su โดยใช้อาร์กิวเมนต์ -l

su -l -s / bin / bash

โชคดี.


ขีด จำกัด ที่ยากของฉันคือ 4096 เช่นulimit -Hn
Nerrve

4

บนเซิร์ฟเวอร์ Redhat บันทึกเป็น root

/etc/security/limits.conf

user01  -       nofile  2048

คำสั่ง strace บันทึกเป็น root

strace -o loglimit su - user01

กับเชลล์อื่นเปิด loglimit

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 ถูกโหลดและ limit.conf ถูกอ่านถ้า pam_limits ของคุณถูกโหลด แต่คุณยังคงเห็นค่าอื่น ๆ โดยใช้ ulimit -n ตรวจสอบโปรไฟล์เชลล์ของคุณเป็น @etherfish บอก


3

ฉันมีปัญหาเช่นนี้ที่นี่ฉันทำ

คำสั่ง strace จะพิมพ์การโต้ตอบทั้งหมดที่กระบวนการทำกับไลบรารีภายนอกดังนั้นเราจะสามารถดูว่าการกำหนดค่าของเราโหลดหรือไม่

ดังนั้นฉันทำตามที่แนะนำข้างต้น:

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

ในปัญหาของฉันบันทึก strace (strace -o log su - ชื่อผู้ใช้) ไม่มีอินสแตนซ์ของข้อความขีด จำกัด ดังนั้นไฟล์ limit.conf จึงไม่โหลด

ก่อนอื่นฉันตรวจสอบให้แน่ใจว่า 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" ให้กับผู้ใช้ของฉันและข้อ จำกัด จะถูกโหลด คุณสามารถทำซ้ำขั้นตอน strace เพื่อให้แน่ใจ

linux ของฉันเป็น LFS ดังนั้นความผิดของฉันคือการขาด pam_limits.so ในไฟล์ /etc/pam.d ใน distros อื่นฉันไม่คิดว่าจะเป็นปัญหาตรงนี้

แต่หวังว่านี่จะช่วยได้


1

ในกรณีของฉัน (Centos 6.10) strace แสดงให้เห็นว่าหลังจากขีด จำกัด ถูกตั้งค่าจาก/etc/security/limits.conf ในภายหลังในกระบวนการล็อกอินมันถูกรีเซ็ตจาก/etc/security/limits.d/90-nproc.confสำหรับผู้ที่ไม่ใช่ทั้งหมด ผู้ใช้รูท:

*          soft    nproc     1024
root       soft    nproc     unlimited
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.