Não é possível criar o arquivo temporário para o documento aqui: permissão negada

11

[Nota: Este Q semelhante diz respeito à mesma mensagem de erro do bash. Foi marcada uma duplicata de esta outra Q . Mas como encontrei uma fonte muito diferente para esse erro, responderei meu próprio Q abaixo.]

Essa linha de script bash anteriormente trabalhando

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

um dia começou a produzir esta mensagem de erro:

não é possível criar o arquivo temporário para o documento aqui: permissão negada

Vista elíptica
fonte
No meu caso, foi ativado o IMA ( ima_policy=appraise_tcbparâmetro do kernel) com a combinação de /tmpnão ser tmpfs. Mas este não é realmente um caso comum :).
pevik 3/06/19

Respostas:

10

Eu adicionei umask 777antes da string here. Depois de remover o umask, o erro desapareceu. Lição aprendida: existe um arquivo temporário criado para uma string here ( <<<), e isso está relacionado a um documento here ( <<), e você deve ter um umask apropriado definido para que eles funcionem.

Vista elíptica
fonte
Interessante mesmo. +1 Veja unix.stackexchange.com/questions/166292/…
Rui F Ribeiro
Também afeta zsh e mksh, não ksh93 nem tcsh. Não traço, rc, es nem yash, mas é porque eles usam pipes em vez de arquivos temporários.
Stéphane Chazelas
No caso de ksh93 e tcsh, ele funciona porque eles abrem o arquivo apenas uma vez no modo de leitura + gravação, gravam os dados e depois buscam o início.
Stéphane Chazelas
6

No meu caso, alterei as /tmppermissões padrão do diretório (acho que mudei por engano para 0777).

A solução foi reverter para a /tmppermissão padrão , que é 1777 em octal (1 = bit fixo, 7 = R + W + X).

Então, em poucas palavras, sudo chmod -R 1777 /tmpdeve resolver o problema.

Eugen Mihailescu
fonte
Eu posso ver onde isso realmente causaria problemas. Sim, o bit adesivo é importante para / tmp.
Elliptical view
2
Você provavelmente não quer a -Rbandeira. Não há razão para alterar os arquivos de todos abaixo /tmppara serem executáveis ​​por leitura e gravação. Alguns desses arquivos são sensíveis à segurança de seus usuários.
Keithpjolley #
1

minha experiência pessoal com esse problema foi com umasknotação binária, assim como @ eliptical-view. Eu supunha que escrever:

umask 0644 

me daria acesso de leitura e gravação aos arquivos que eu criei, o que há de errado

Depois que eu mudei umaskpara ser

umask 0022

o erro desapareceu.

Na verdade, a notação binária deve ser entendida como um complemento binário.

Portanto, na umaskmáscara abaixo, quando alguém escreve 0para o proprietário do arquivo, esse usuário terá acesso total aos arquivos que ele cria. O valor 2significa que o segundo bit está mascarado, o que significa que, nesse caso, por padrão, os outros usuários não poderão gravar nos arquivos criados pelo proprietário do arquivo.

Hilton Fernandes
fonte
1
Obrigado pela edição e correção, @Paulo Tomé. De fato, é usual (e claro) usar a notação octal umask, pois precisamente três bits estão envolvidos nas permissões de arquivo Posix - para o proprietário, um de seus grupos e todos os outros.
Hilton Fernandes
De nada. ;)
Paulo Tomé