จะ chmod 000 / dev / stdin ปิดการใช้งานสถานีตลอดไป?


12

ฉันทำงานผ่านคำถามจากUnix The Textbook (บทที่ 8, # 16, หน้า 207) :

ให้chmodบรรทัดคำสั่งที่ทำงานเดียวกันกับที่mesg nและmesg yคำสั่งทำ (คำแนะนำ: อุปกรณ์ฮาร์ดแวร์ทุกชิ้นรวมถึงเทอร์มินัลของคุณมีไฟล์ที่เกี่ยวข้องใน/devไดเรกทอรี)

ฉันเชื่อว่าคำตอบคือ:

mesg n = chmod 770 /dev/stdout

mesg y = chmod 777 /dev/stdout

แต่ผมสงสัยว่าเกิดอะไรขึ้นถ้าคุณใช้chmod 000 /dev/stdin?

คุณถูกล็อคไม่ให้ป้อนคำสั่งในเทอร์มินัลหรือไม่?


2
สิ่งสำคัญคือต้องเข้าใจว่ามีการตรวจสอบการอนุญาตเมื่อเปิดไฟล์เท่านั้น ดังนั้นไม่ว่าจะเกิดอะไรขึ้นกับอินพุตมาตรฐานของเชลล์การเปลี่ยนแปลงการอนุญาตจะไม่ล็อคคุณจากการป้อนคำสั่งเพราะทั้งเชลล์และเทอร์มินัลอีมูเลเตอร์หรือ ssh หรืออะไรก็ตามที่เปิดช่องทางการสื่อสารแล้ว mesg nสามารถใช้การอนุญาตเพื่อส่งผลกระทบในอนาคตwriteเท่านั้นเพราะwrite ยังไม่มีเทอร์มินัลเปิด
zwol

คำตอบ:


20

ไม่/dev/stdinและ/dev/stdoutเป็นอุปกรณ์ที่ผิด นี่ไม่ใช่อุปกรณ์เทอร์มินัลพวกเขาเป็นนามแฝงสำหรับอินพุตมาตรฐานและเอาต์พุตมาตรฐานตามลำดับ อินพุตมาตรฐานและเอาต์พุตมาตรฐานคือตัวอธิบายไฟล์ที่แอปพลิเคชันคาดว่าจะเปิดและมีความหมายทั่วไป (ตัวอธิบายไฟล์ 0 และ 1 ตามลำดับมี 2 ซึ่งเป็นข้อผิดพลาดมาตรฐาน) อุปกรณ์เช่น/dev/stdinและ/dev/stdoutมีประโยชน์เมื่อแอปพลิเคชันต้องการชื่อไฟล์ แต่ผู้ใช้ของแอปพลิเคชันต้องการให้เข้าถึงไฟล์ descriptor เฉพาะแทนที่จะเปิดไฟล์บางไฟล์ ขึ้นอยู่กับตัวแปร unix พวกเขาอาจไม่ได้เป็นไฟล์อุปกรณ์ ตัวอย่างเช่นบน Linux พวกเขากำลังเชื่อมโยงสัญลักษณ์ไป/proc/self/fd/0 และเพื่อน ๆ และสิ่งเหล่านี้ก็คือการเชื่อมโยงสัญลักษณ์ "วิเศษ" ไปยังไฟล์ใดก็ตามที่กระบวนการได้เปิดไว้บนตัวบอกไฟล์นั้นแล้ว

การเปลี่ยนการอนุญาต/dev/stdinและ/dev/stdoutจะเปลี่ยนแปลงสิ่งที่เกิดขึ้นเมื่อมีการใช้ชื่อไฟล์เหล่านี้อย่างชัดเจน จะไม่มีผลกับสิ่งที่เกี่ยวข้องกับเทอร์มินัลและจะไม่ส่งผลกระทบต่อการใช้งานปกติของอินพุตมาตรฐานและเอาต์พุตมาตรฐานเนื่องจากสิทธิ์จะมีผลเฉพาะเมื่อเปิดชื่อไฟล์เฉพาะ

สิ่งที่mesgไม่สามารถที่จะเปลี่ยนสิทธิ์ของกระบวนการที่สถานีควบคุม สำหรับแอปพลิเคชันที่ทำงานในเทอร์มินัลเทอร์มินัลจะเปิดในอินพุตมาตรฐาน ouput มาตรฐานและข้อผิดพลาดมาตรฐาน (ตัวอธิบายไฟล์ 0, 1 และ 2) คุณสามารถใช้คำสั่งttyเพื่อดูว่าอุปกรณ์ปลายทางคืออะไร mesg nเทียบเท่ากับchmod g-w "$(tty)"และเทียบเท่ากับmesg ychmod g+w "$(tty)"


2
ttyไม่ได้รายงานสถานีควบคุม แต่เทอร์มินัลเปิดบน stdin ถ้ามี ดังนั้นบน Linux ที่ / dev / stdin ไม่ใช่อุปกรณ์ แต่ symlink พิเศษสำหรับไฟล์ที่เปิดบน / dev / stdin chmot "$(tty)"จะเหมือนกันมากกว่าหรือน้อยกว่าchmod /dev/stdin(ถ้า stdin เป็นอุปกรณ์ tty และพยายามเปลี่ยนโหมดของnot a ttyไฟล์ในไดเรกทอรีปัจจุบันเป็นอย่างอื่น) ดู/dev/$(ps -o tty= -p "$$")สถานีควบคุม
Stéphane Chazelas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.