“ cd” เป็น / sys / kernel / debug / tracing ทำให้เกิดการเปลี่ยนแปลงสิทธิ์


10

วันนี้ฉันได้พบกับปัญหาที่แปลกมากและไม่มีประโยชน์อะไรเกี่ยวกับเรื่องนี้เลย

เซิร์ฟเวอร์ที่ฉันจัดการบางตัวได้รับการตรวจสอบด้วย Nagios เมื่อเร็ว ๆ นี้ฉันเห็นโพรบการใช้งานดิสก์ที่ล้มเหลวด้วยข้อผิดพลาดนี้:

DISK CRITICAL - / sys / kernel / debug / tracing ไม่สามารถเข้าถึงได้: ปฏิเสธการอนุญาต

ฉันต้องการตรวจสอบและความพยายามครั้งแรกของฉันคือตรวจสอบการอนุญาตของไดเรกทอรีนี้และเปรียบเทียบกับเซิร์ฟเวอร์อื่น (ผู้ที่ทำงานได้ดี) นี่คือคำสั่งที่ฉันรันบนเซิร์ฟเวอร์ที่ใช้งานได้และคุณจะเห็นว่าทันทีที่ฉันcdเข้าสู่ไดเรกทอรีสิทธิ์จะเปลี่ยนไป:

# Here we've got 555 for /sys/kernel/debug/tracing
root@vps690079:/home/admin# cd /sys/kernel/debug
root@vps690079:/sys/kernel/debug# ll
total 0
drwx------ 30 root root 0 Jul 19 13:13 ./
drwxr-xr-x 13 root root 0 Jul 19 13:13 ../

dr-xr-xr-x  3 root root 0 Jul 19 13:13 tracing/
drwxr-xr-x  6 root root 0 Jul 19 13:13 usb/
drwxr-xr-x  2 root root 0 Jul 19 13:13 virtio-ports/
-r--r--r--  1 root root 0 Jul 19 13:13 wakeup_sources
drwxr-xr-x  2 root root 0 Jul 19 13:13 x86/
drwxr-xr-x  2 root root 0 Jul 19 13:13 zswap/

# I cd into the folder, and it (./) becomes 700!!
root@vps690079:/sys/kernel/debug# cd tracing/
root@vps690079:/sys/kernel/debug/tracing# ll
total 0
drwx------  8 root root 0 Jul 19 13:13 ./
drwx------ 30 root root 0 Jul 19 13:13 ../
-r--r--r--  1 root root 0 Jul 19 13:13 available_events
-r--r--r--  1 root root 0 Jul 19 13:13 available_filter_functions
-r--r--r--  1 root root 0 Jul 19 13:13 available_tracers


# Next commands are just a dumb test to double-check what I'm seeing
root@vps690079:/sys/kernel/debug/tracing# cd ..
root@vps690079:/sys/kernel/debug# ll
total 0
drwx------ 30 root root 0 Jul 19 13:13 ./
drwxr-xr-x 13 root root 0 Sep 27 10:57 ../

drwx------  8 root root 0 Jul 19 13:13 tracing/
drwxr-xr-x  6 root root 0 Jul 19 13:13 usb/
drwxr-xr-x  2 root root 0 Jul 19 13:13 virtio-ports/
-r--r--r--  1 root root 0 Jul 19 13:13 wakeup_sources
drwxr-xr-x  2 root root 0 Jul 19 13:13 x86/
drwxr-xr-x  2 root root 0 Jul 19 13:13 zswap/

คุณมีความคิดว่าอะไรจะทำให้เกิดพฤติกรรมนี้บ้าง?
หมายเหตุด้านการใช้ chmod เพื่อขอสิทธิ์ในการสร้างซ้ำดูเหมือนว่าจะไม่สามารถแก้ไขโพรบได้


1
เมื่อจัดเตรียมตัวอย่างอินพุตเทอร์มินัลให้พิจารณาแทนที่นามแฝงที่ไม่เป็นมาตรฐานเช่นllด้วยคำสั่งที่ใช้แทน
Roman Odaisky

2
@RomanOdaisky มันเป็นนามแฝงเริ่มต้นใน Ubuntu อาจไม่ทราบว่ามันไม่ใช่ค่าเริ่มต้น
GammaGames

เหนือสิ่งที่ @tecloM กล่าวมานี่ดูเหมือนว่าเคอร์เนลบั๊กสำหรับรุ่นเคอร์เนลของคุณ บน 4.19.0-4 พฤติกรรมเป็นปกติ
V13

คำตอบ:


20

sys /

/sysคือsysfsมุมมองเสมือนทั้งหมดในโครงสร้างเคอร์เนลในหน่วยความจำที่สะท้อนถึงเคอร์เนลระบบปัจจุบันและการกำหนดค่าฮาร์ดแวร์และไม่ใช้พื้นที่ดิสก์จริง ไฟล์และไดเรกทอรีใหม่ไม่สามารถเขียนลงไปได้ตามปกติ

การนำการตรวจสอบพื้นที่ดิสก์ไปใช้จะไม่สร้างข้อมูลที่เป็นประโยชน์และไม่ต้องใช้ความพยายาม อาจมีจุดเมานท์สำหรับระบบไฟล์เสมือนอื่นที่ใช้ RAM ภายในรวมถึง ...

sys / kernel / / แก้ปัญหา

/sys/kernel/debugเป็นจุดเมานต์มาตรฐานสำหรับdebugfsซึ่งเป็นระบบไฟล์เสมือนที่เป็นทางเลือกสำหรับการดีบักเคอร์เนลและคุณลักษณะการติดตามต่างๆ

เนื่องจากเป็นคุณสมบัติการดีบักจึงไม่จำเป็นสำหรับการใช้งานจริง (แม้ว่าคุณอาจเลือกที่จะใช้คุณสมบัติบางอย่างเพื่อปรับปรุงสถิติของระบบหรือคล้ายกัน)

เนื่องจากการใช้คุณสมบัติที่เสนอโดยdebugfsพินัยกรรมส่วนใหญ่จำเป็นต้องมีrootอยู่แล้วและจุดประสงค์หลักของมันคือการเป็นวิธีที่ง่ายสำหรับนักพัฒนาเคอร์เนลในการให้ข้อมูลการแก้ไขข้อบกพร่องมันอาจจะเป็น

เมื่อเคอร์เนลถูกโหลดรูทีนการกำหนดค่าเริ่มต้นสำหรับระบบย่อยการติดตามเคอร์เนลที่ลงทะเบียน/sys/kernel/debug/tracingเป็นจุดเข้าใช้งาน debugfs สำหรับตัวเองเลื่อนการเริ่มต้นเพิ่มเติมจนกว่าจะเข้าถึงได้จริงในครั้งแรก (ลดการใช้ทรัพยากรของระบบย่อยการติดตามในกรณีที่ปรากฏ ไม่ต้องการ). เมื่อคุณcdเข้าสู่ไดเรกทอรีการกำหนดค่าเริ่มต้นที่ถูกเลื่อนนี้จะถูกเรียกใช้และระบบย่อยการติดตามจะพร้อมใช้งาน ในความเป็นจริงต้นฉบับเดิม/sys/kernel/debug/tracingเป็นภาพลวงตาที่ไม่มีเนื้อหาและมันก็กลายเป็น "ของจริง" เมื่อ (และเพราะ) คุณเข้าถึงมันด้วยcdคำสั่งของคุณ

debugfs ไม่ใช้พื้นที่ดิสก์จริงใด ๆ : ข้อมูลทั้งหมดที่อยู่ในนั้นจะหายไปเมื่อเคอร์เนลถูกปิด

sys / / FS / cgroup

/sys/fs/cgroupเป็นtmpfsระบบแฟ้มประเภท RAM-based ที่ใช้ในกลุ่มกระบวนการทำงานต่างๆเป็นกลุ่มควบคุม มันไม่ได้ใช้พื้นที่ดิสก์จริงเลย แต่ถ้าระบบไฟล์นี้เกือบเต็มแล้วด้วยเหตุผลบางอย่างมันอาจจะร้ายแรงกว่าการใช้พื้นที่ดิสก์หมด: อาจหมายความว่า

a) RAM ของคุณหมด

b) กระบวนการที่เป็นเจ้าของรูทบางอย่างกำลังเขียนขยะไปยัง/sys/fs/cgroupหรือ

c) บางสิ่งบางอย่างทำให้จำนวนกลุ่มควบคุมที่ไร้สาระอย่างแท้จริงถูกสร้างขึ้นอาจเป็นในรูปแบบของ "fork bomb" แบบคลาสสิก แต่มีsystemdบริการตามหรือคล้ายกัน

บรรทัดล่าง

โพรบการใช้งานดิสก์ควร/sysแยกออกเนื่องจากไม่มีสิ่งใดที่อยู่ภายใต้/sysเก็บไว้ในดิสก์ใด ๆ

หากคุณต้องการตรวจสอบ/sys/fs/cgroupคุณควรจัดเตรียมโพรบเฉพาะที่จะให้การแจ้งเตือนที่มีความหมายมากกว่าโพรบพื้นที่ดิสก์ทั่วไป


1
ขอบคุณสำหรับคำตอบนี้พร้อมรายละเอียดมากที่สุดเท่าที่ฉันต้องการ! ฉันจะแยก/sysออกจากช่วงการตรวจสอบของฉัน
zessx

1
@zessx: แยกออก/procและอาจเป็นไปได้/dev(เพราะแม้ว่ามันจะไม่ได้รับการสนับสนุน RAM 100% ในมือข้างหนึ่งมันมีจำนวนของไฟล์และไดเรกทอรีที่ "แปลก" ในรูปแบบต่างๆและอื่น ๆ ถ้าคุณจริง ๆ ใช้พื้นที่ดิสก์จำนวนมากใน/devการตั้งค่าของคุณเสียอย่างน่ากลัวและคุณควรจุดไฟเลอะเทอะ)
เควิน

" /sysคือsysfsระบบไฟล์เสมือนที่ใช้ RAM ทั้งหมด" - ฉันค่อนข้างแน่ใจว่าเนื้อหาของsysfsถูกสังเคราะห์ 100% จากโครงสร้างข้อมูลในเคอร์เนลและไม่ได้อยู่ใน RAM ในความเป็นจริงฉันจะยืนยันว่า "ระบบไฟล์เสมือนที่ใช้ RAM" เป็น oxymoron: อาจเป็นระบบที่ใช้ RAM เช่นมีที่เก็บข้อมูลสำรอง (แม้ว่าจะเป็นที่เก็บข้อมูลสำรองที่ไม่ใช่แบบดั้งเดิมสำหรับระบบไฟล์) ก็ตาม ไม่ใช่เสมือนหรือเป็นเสมือนจากนั้นไม่มีที่เก็บข้อมูลสำรอง
Jörg W Mittag

1
@ JörgWMittagโปรดทราบว่าฉันหลีกเลี่ยงการพูดsysfsเป็น RAMdisk อย่างระมัดระวัง โครงสร้างข้อมูลในเคอร์เนลจะอยู่ที่ใดถ้าไม่อยู่ใน RAM ฉันยอมรับว่าคำว่า "virtual" เป็นปัญหาที่นี่เนื่องจากคุณอาจทราบว่าด้านบนของไดรเวอร์ระบบไฟล์ทั้งหมดในเคอร์เนล Linux คือเลเยอร์ VFS (Virtual File System) ซึ่งใช้ "virtual" ในอีกแง่หนึ่ง สิ่งที่เป็นนามธรรมสำหรับระบบไฟล์ที่เป็นไปได้ทั้งหมด แต่มันก็เป็นเรื่องยากที่จะรัดกุมอธิบายเพียงวิธีการprocและsysfsมีความแตกต่างจากระบบไฟล์จริงเช่นนี้เป็นข้อมูลพื้นฐานเพียงเพื่อให้ติดจุดหลัก
telcoM

1
@grawity ฉันปรับแต่งถ้อยคำเล็กน้อยมันจะดีขึ้นหรือไม่
telcoM
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.