Не вдається створити тимчасовий файл для документа тут: Дозвіл відхилено


11

[Примітка. Цей подібний Q стосується того самого повідомлення про помилку bash. Це було відзначено дублікат цього іншого Q . Але оскільки я знайшов зовсім інше джерело цієї помилки, я відповім на власне запитання нижче.]

Це раніше працююча лінія сценарію bash

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

одного дня почав видавати це повідомлення про помилку:

не вдається створити тимчасовий файл для документа тут: Дозвіл відхилено


У моєму випадку було ввімкнено 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. Не тире, rc, es, ні yash, але це тому, що вони використовують труби замість тимчасових файлів.
Стефан Шазелас

Що стосується ksh93 та tcsh, він працює, тому що вони відкривають файл лише один раз у режимі читання + запису, записують дані та повертаються до початку.
Стефан Шазелас

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означає, що другий біт замаскований, що означає, що в цьому випадку за замовчуванням іншим користувачам заборонено записувати у файли, які створює власник файлу.


1
Дякуємо за редагування та виправлення, @Paulo Tomé. Дійсно, зазвичай (і зрозуміло) використовувати восьмеричні позначення в umask, бо саме в дозволах файлів Posix задіяні саме три біти - для власника, однієї з його груп та всіх інших.
Хілтон Фернандес

Ласкаво просимо. ;)
Паулу Томе
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.