ไม่สามารถสร้างไฟล์ temp สำหรับ here-document: การอนุญาตถูกปฏิเสธ


11

[หมายเหตุ: Q ที่คล้ายกันนี้เกี่ยวข้องกับข้อความแสดงข้อผิดพลาด bash เดียวกัน มันถูกทำเครื่องหมายว่าซ้ำกับคำถามอื่น ๆนี้ แต่เนื่องจากฉันพบแหล่งที่มาที่แตกต่างกันมากสำหรับข้อผิดพลาดนี้ฉันจะตอบคำถามของฉันเองด้านล่าง]

บรรทัดสคริปต์ทุบตีที่ทำงานก่อนหน้านี้

while ... do ... done <<< "$foo"

วันหนึ่งเริ่มผลิตข้อความผิดพลาดนี้:

ไม่สามารถสร้างไฟล์ temp สำหรับ here-document: การอนุญาตถูกปฏิเสธ


ในกรณีของฉันมันถูกเปิดใช้งานIMA ( ima_policy=appraise_tcbเคอร์เนลพารามิเตอร์) กับการรวมกันของไม่ได้/tmp tmpfsแต่นี่ไม่ใช่กรณีทั่วไปจริง ๆ :)
pevik

คำตอบ:


10

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


น่าสนใจอย่างแน่นอน +1 ดูunix.stackexchange.com/questions/166292/…
Rui F Ribeiro

นอกจากนี้ยังส่งผลต่อ zsh และ mksh ไม่ใช่ ksh93 หรือ tcsh ไม่ใช่ dash, rc, es หรือ yash แต่เป็นเพราะพวกเขาใช้ไปป์แทนไฟล์ temp
Stéphane Chazelas

ในกรณีของ ksh93 และ tcsh มันใช้งานได้เพราะเปิดไฟล์เพียงครั้งเดียวในโหมดอ่าน + เขียนเขียนข้อมูลแล้วกลับไปหาจุดเริ่มต้น
Stéphane Chazelas

6

ในกรณีของฉันฉันเปลี่ยน/tmpสิทธิ์เริ่มต้นของไดเรกทอรี (ฉันคิดว่าฉันเปลี่ยนโดยไม่ได้ตั้งใจเป็น 0777)

วิธีแก้ไขคือเปลี่ยนกลับเป็นค่าเริ่มต้นการ/tmpอนุญาตซึ่งคือ 1777 ในฐานแปด (1 = เหนียวบิต 7 = R + W + X)

ดังนั้นสั้นsudo chmod -R 1777 /tmpควรแก้ไขปัญหา


ฉันสามารถดูว่าจะทำให้เกิดปัญหาที่ไหน ใช่บิตเหนียวเป็นสิ่งสำคัญสำหรับ / tmp
มุมมองรูปไข่

2
คุณอาจไม่ต้องการ-Rตั้งค่าสถานะ ไม่มีเหตุผลที่จะเปลี่ยนไฟล์ของทุกคนด้านล่าง/tmpเพื่อให้ทุกคนสามารถอ่าน - เขียนได้ ไฟล์บางไฟล์นั้นมีความอ่อนไหวต่อความปลอดภัยของผู้ใช้ของคุณ
keithpjolley

1

ประสบการณ์ส่วนตัวของฉันเกี่ยวกับปัญหานี้คือumaskสัญกรณ์ไบนารีเช่นเดียวกับ @ eliptical-view ฉันควรจะเขียนว่า:

umask 0644 

จะให้ฉันอ่านและเขียนการเข้าถึงไฟล์ที่ฉันสร้างขึ้นมีอะไรผิดปกติ

หลังจากที่ฉันเปลี่ยนumaskเป็น

umask 0022

ข้อผิดพลาดหายไป

จริงๆแล้วสัญกรณ์ไบนารีควรจะเข้าใจว่าเป็นส่วนประกอบไบนารี

ดังนั้นในumaskหน้ากากของด้านล่างเมื่อมีคนเขียน0ให้เจ้าของไฟล์ผู้ใช้รายนี้จะมีสิทธิ์เข้าถึงไฟล์ทั้งหมดที่เขาหรือเธอสร้างขึ้น ค่า2หมายถึงบิตที่ 2 ถูกปิดบังหมายความว่าในกรณีนี้โดยค่าเริ่มต้นผู้ใช้รายอื่นจะไม่ได้รับอนุญาตให้เขียนไฟล์ที่เจ้าของไฟล์สร้างขึ้น


1
ขอบคุณสำหรับการแก้ไขและการแก้ไข @Paulo Tomé แน่นอนว่าเป็นเรื่องปกติ (และชัดเจน) ในการใช้เครื่องหมายฐานแปดumaskเพราะมีสามบิตที่เกี่ยวข้องกับการอนุญาตให้ใช้ไฟล์ Posix สำหรับเจ้าของหนึ่งในกลุ่มของเขาหรือเธอและทุกคนอื่น
Hilton Fernandes

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