sudo em -f (echo “rm $ file”) agora + 2 horas produzidas em: / dev / fd / 63: Nenhum arquivo ou diretório

0

Se eu fizer:

at -f <(echo "rm $file") now + 2 hours

que funciona bem

No entanto, se eu fizer isso:

sudo at -f <(echo "rm $file") now + 2 hours

Eu recebo:

at: /dev/fd/63: No such file or directory

Suponho que isso se deva à ordem em que os comandos são processados. Existe alguma maneira de contornar isso usando o comando sudo? A única maneira que posso pensar é colocar o comando em um script e sudo que script é uma opção, mas agora eu quero saber por que isso acontece.

Desculpas se isso já foi respondido em algum lugar, não consigo encontrá-lo, pois não tenho certeza do que procurar.

    
por Ulukai 04.11.2016 / 14:50

2 respostas

1

Como o shell abre o canal para o comando no <(...) e passa o identificador de arquivo para o processo filho que ele executa, sudo neste caso. O caminho /dev/fd/63 é um método fornecido pelo kernel para permitir o acesso a um identificador de arquivos já aberto através de um nome de caminho normal.

No entanto, sudo não passa o identificador para o processo que executa (por motivos de segurança): por padrão, ele fecha todos os identificadores de arquivos, exceto stdin, stdout e stderr, portanto o programa que é executado o identificador de arquivo correspondente a /dev/fd/63 e com erros.

Você pode resolvê-lo fazendo a substituição em um shell dentro do sudo:

sudo bash -c 'cat <(echo something)' 

Isso, naturalmente, significa que a substituição interna também é executada com privilégio elevado:

$ sudo bash -c 'cat <(id)'
uid=0(root) gid=0(root) groups=0(root)

o sinal -C para sudo oferece outra maneira, mas pode ser necessário configurar extras para serem permitidos:

-C num, --close-from=num
Close all file descriptors greater than or equal to num before executing a command. Values less than three are not permitted. By default, sudo will close all open file descriptors other than standard input, standard output and standard error when executing a command. The security policy may restrict the user's ability to use this option. The sudoers policy only permits use of the -C option when the administrator has enabled the closefrom_override option.

    
por 04.11.2016 / 14:59
1

Eu assumo que sua intenção é cat de todos os arquivos como root, do seu atual ls ?

Pode ser inteligente usar xargs pipe. Tente com isso:

ls | xargs sudo cat

    
por 04.11.2016 / 14:55