O oposto de su: executa um comando sem privilégios de root

5

Estou escrevendo um script de shell onde a maioria dos comandos não requer privilégios de root. O script deve ser executado pelo administrador. Mas eu gostaria de poder "su" para uma conta de usuário normal para as partes dos scripts que não exigem privilégios de root. Isso minimizaria o número de operações feitas com privilégios de root e melhoraria a segurança.

Existe um comando do Linux para fazer isso?

Eu sei que é possível su a qualquer conta de usuário, mas eu não quero confiar na hipótese de que um determinado nome de usuário existe na máquina.

Pensei em criar uma conta temporária para o horário do script e excluí-la no final do script. Mas se eu não definir uma senha nesta conta, um invasor não conseguirá usá-la durante o curto tempo de vida da conta? Eu não posso definir o shell do usuário para / sbin / nologin porque aparentemente isso evita executar comandos em um shell script "processando" para a conta.

Obrigado pela sua ajuda.

    
por John Smith Optional 15.05.2013 / 00:18

5 respostas

9

Eu pessoalmente inverto sua estratégia e executo o script como um usuário não privilegiado, com o sudo usado para executar os comandos que exigem privilégios de root. Existe algum motivo específico para você executar o script como root?

Para responder à sua pergunta, você pode usar o sinalizador -c para executar um comando específico como usuário:

su someuser -c "touch /tmp/file"

Referência: link

    
por 15.05.2013 / 00:23
2

I don't want to rely on the hypothesis that a particular username exists on the machine.

Existem vantagens em ser o superusuário ...: -)

scriptuser_created=no
scriptuser=myuser
if ! id "$scriptuser" &>/dev/null
  adduser --system "$scriptuser"
  scriptuser_created=yes
fi
sudo -u "$scriptuser" command1
sudo -u "$scriptuser" command2
sudo -u "$scriptuser" command3
if [ yes = "$scriptuser_created" ]; then
  userdel "$scriptuser"
fi
    
por 15.05.2013 / 00:53
0

A solução tradicional para um problema como este é que uma conta de usuário permanente exista precisamente com os níveis de acesso e permissões exigidos pelo programa em questão. Os serviços de rede (como o apache) geralmente são executados como seu próprio usuário, com privilégios distintos daqueles de um usuário interativo normal e significativamente menor que o root.

Se o root estiver executando o script em primeiro lugar, eles não precisarão fornecer uma senha ao su para outro usuário, mesmo que esse usuário tenha uma senha.

    
por 15.05.2013 / 00:21
0

Su significa usuário substituto. Você pode usar su para mudar para outro usuário. Então, se você é superusuário e quer rodar algo como outro usuário, apenas su username e execute o comando.

    
por 07.04.2017 / 20:06
-1

Insira isso no início do seu script de shell.

# please run as foo user
if [[ $EUID -ne 1234 ]]; then
        echo "This script must be run as foo"
        exit 1
fi

Você pode define o shell como nologin.

Adicione privilégios sudo para que o usuário foo faça as demais operações necessárias à raiz somente por meio da configuração do sudoer cuidadosamente elaborada.

    
por 15.05.2013 / 00:29