Nie można utworzyć pliku tymczasowego dla dokumentu tutaj: Odmowa dostępu

11

[Uwaga: Ten podobny Q dotyczy tego samego komunikatu o błędzie bash. To zostało oznaczone duplikat tej drugiej Q . Ale ponieważ znalazłem zupełnie inne źródło tego błędu, poniżej odpowiem na moje własne pytanie.]

Ta wcześniej działająca linia skryptu bash

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

pewnego dnia zaczęto wyświetlać ten komunikat o błędzie:

nie można utworzyć pliku tymczasowego dla dokumentu tutaj: Odmowa dostępu

Widok eliptyczny
źródło
W moim przypadku włączono IMA ( ima_policy=appraise_tcbparametr jądra) z kombinacją /tmpnieistnienia tmpfs. Ale to nie jest tak naprawdę częsty przypadek :).
pevik

Odpowiedzi:

10

Dodałem umask 777przed ciągiem tutaj. Po usunięciu umask błąd zniknął. Więc wyciągnięto naukę: Dla pliku here ( <<<) utworzono plik tymczasowy , który jest powiązany z dokumentem here ( <<) i musisz mieć odpowiedni zestaw umask, aby działały.

Widok eliptyczny
źródło
Rzeczywiście interesujące. +1 Zobacz unix.stackexchange.com/questions/166292/…
Rui F Ribeiro
Wpływa także na zsh i mksh, nie na ksh93 ani tcsh. Ani dash, rc, es, ani yash, ale to dlatego, że używają potoków zamiast plików tymczasowych.
Stéphane Chazelas,
W przypadku ksh93 i tcsh działa, ponieważ otwierają plik tylko raz w trybie odczytu + zapisu, zapisują dane, a następnie szukają powrotu do początku.
Stéphane Chazelas,
6

W moim przypadku /tmpzmieniłem domyślne uprawnienia do katalogu (myślę, że przez pomyłkę zmieniłem na 0777).

Rozwiązaniem było przywrócenie domyślnego /tmpuprawnienia, które ma wartość 1777 w liczbie ósemkowej (1 = lepki bit, 7 = R + W + X).

Więc w skrócie sudo chmod -R 1777 /tmppowinien rozwiązać problem.

Eugen Mihailescu
źródło
Widzę, gdzie to rzeczywiście spowodowałoby problemy. Tak, lepki bit jest ważny dla / tmp.
Eliptyczny widok
2
Prawdopodobnie nie chcesz -Rflagi. Nie ma powodu, aby zmieniać poniższe pliki wszystkich użytkowników, aby każdy /tmpmógł je odczytać i zapisać. Niektóre z tych plików są wrażliwe na bezpieczeństwo użytkowników.
keithpjolley,
1

moje osobiste doświadczenia z tym problemem umaskdotyczyły zapisu binarnego, podobnie jak @ eliptical-view. Przypuszczałem, że pisanie:

umask 0644 

dałby mi dostęp do odczytu i zapisu do plików, które utworzyłem, co jest nie tak

Po tym, jak zmienił umasksię

umask 0022

błąd zniknął.

W rzeczywistości zapis binarny należy rozumieć jako uzupełnienie binarne.

Tak więc, w umaskponiższej masce, gdy pisze się 0dla właściciela pliku, ten użytkownik będzie miał pełny dostęp do plików, które tworzy. Wartość 2oznacza, że ​​drugi bit jest maskowany, co oznacza, że ​​w tym przypadku domyślnie inni użytkownicy nie będą mogli zapisywać plików utworzonych przez właściciela pliku.

Hilton Fernandes
źródło
1
Dzięki za edycję i korektę, @Paulo Tomé. Rzeczywiście, w notacji ósemkowej jest zwykle (i jasne) umask, ponieważ dokładnie trzy bity są zaangażowane w uprawnienia do plików Posix - dla właściciela, jednej z jego grup i wszystkich innych.
Hilton Fernandes
Nie ma za co. ;)
Paulo Tomé