Existe um "sudo reverso"? [duplicado]

19

Digamos que eu tenha um script que será executado em várias máquinas com privilégios de root, mas quero executar determinados comandos nesse script sem raiz.

Isso é possível?

    
por Maxim 23.03.2017 / 00:08

4 respostas

33

Ambos su e sudo pode fazer isso. Eles executam um comando como outro usuário; Por padrão, "outro usuário" é root, mas pode ser qualquer usuário. Por exemplo,

sudo -u www-data ls

executará ls como o usuário www-data .


No entanto ...

A maneira usual é executar o script como o usuário chamado e usar sudo para os comandos que precisam dele. sudo armazena em cache as credenciais, por isso deve solicitar no máximo uma vez.

    
por 23.03.2017 / 00:13
28

sudo exporta as variáveis de ambiente SUDO_COMMAND , SUDO_GID , SUDO_UID e SUDO_USER .

Você pode usar SUDO_USER ou SUDO_UID para voltar ao usuário solicitante:

sudo -u "$SUDO_USER" an_unprivileged_command
    
por 23.03.2017 / 00:22
4

sudo é uma versão simplificada de su com melhores controles de acesso. Se você já estiver executando como root , su fará isso sem problemas:

#!/bin/sh -e
echo -n "Script User:          " && id -un
echo -n "Other user:           " && su blrfl -c "id -un"
echo -n "Back to script user:  " && id -un

Quando executado, você recebe isto:

Script User:          root
Other user:           blrfl
Back to script user:  root
    
por 23.03.2017 / 04:27
2

Concordo com a resposta do AlexP que você geralmente deve executar como não-raiz e só invocar o sudo somente para comandos que precisam disso. A lista de permissões é sempre mais segura do que a lista negra.

Além da resposta de AlexP: Você pode querer invocar sudo no topo do script, para ter certeza de que não executará várias operações até perceber que o usuário não tem permissão para executar sudo e cria um estado quebrado. Portanto, eu recomendo colocar o seguinte na parte superior dos scripts que precisam de sudo em algum momento:

#!/bin/bash

sudo true || exit 1

# … other code …

Isso solicitará imediatamente a senha (se necessário) e interromperá a execução do script se sudo falhar.

    
por 23.03.2017 / 10:40