Eu tenho um pequeno script bash:
#!/bin/bash
touch dummy.txt
Se eu executar este script com sudo
, ele criará o dummy.txt
que será protegido por raiz .
O que eu quero fazer é:
Independentemente de esse script ser executado usando sudo
ou um usuário normal, o arquivo nãodummy.txt
deve estar protegido contra raiz.
chown
echmod
em seu script para definir a propriedade e as permissões conforme desejado.Respostas:
Você pode testar se o script está sendo executado através de
sudo
usar osEUID
eSUDO_USER
variáveis, e em seguida, executartouch
comoSUDO_USER
se fosse verdade - algo comofonte
==
usado para comparação de cadeias. Como$EUID
é suposto retornar um valor inteiro, eu recomendo que você use-ed
comparação. Espaços são permitidos em nomes de usuário , portanto, provavelmente cite a$SUDO_USER
variável. Caso contrário, boa resposta - isso é algo que eu pessoalmente usaria.sudo -u
se detectar que está sendo executado como root. O OP falou sobre ter vários comandos em um script. Mas tenha cuidado para evitar um loop infinito de erros.[[...]]
de modo não estritamente necessário citar a variável dentro da instrução if @Serg e I gues-ed
foi um erro de digitação para-eq
-eq
. Não sabia[[
que não tinha divisão de palavras. Obrigado. Pessoalmente, eu aindaSe seu script não deve ser executado como
root
, a maneira mais segura de resolver o problema é abortar a execução do script logo no início:Opcionalmente, você pode reexecutar seu script como um usuário substituto (por exemplo
sudo -u FALLBACK_USER "$0"
) em vez de simplesmente abortar.Tentar corrigir as peculiaridades de comandos individuais tornará seu script desnecessariamente complexo e difícil de depurar. Toda vez que você modificá-lo, você terá que fazer todos os testes duas vezes (como usuário comum e depois como
root
) e corrigir todos osroot
bugs relacionados que surgirem. Não é uma solução à prova de futuro, por assim dizer.fonte
Por padrão, os arquivos criados com acesso root têm permissões como:
Aqui, o arquivo pertence ao usuário raiz e ao grupo raiz e é legível e gravável pela raiz, mas somente legível por outras pessoas.
A abordagem mais simples seria apenas
chown
retornar o arquivo ao usuário original.Você pode usar a
$SUDO_USER
variável acessível somente quandosudo
for chamada, assim:Se você estiver executando o script como usuário comum, a
chown
parte não será necessária; portanto, considere usar a instrução if ou&&
teste para testar o caso em que o script é executado como raiz e faça algo nesse sentido:A abordagem acima é recomendada. Existem outros, como o uso
chmod
para alterar as permissões de leitura, gravação e execução para usuários e grupos, mas isso não é recomendado.fonte
sudo
, então não - você não pode ignorá-lo. Sua opção é executar o script como usuário comum (o que não entendo por que você não faz isso, pois você está simplesmente criando um arquivo para o usuário aqui) ou alterar a propriedade do arquivo, como mostro na minha resposta.