Pergunta

Há um script de shell (/bin/sh, não bash) que requer permissões de raiz para execução.

Se for executado por um usuário normal, ele deve pedir ao usuário uma senha para obter acesso root e se reexugar.

Agora ele usa o seguinte código:

if [ $(id -u) -ne 0 ]; then su root -- $0 $@ ; ... fi

Isso funciona bem, mas há algum sistema operacional como o Ubuntu que não possui senha raiz. Por outro lado, muitos sistemas usam sudo para permissões de raiz.

A questão é: como o script pode detectar se deve usar su ou sudo sem pedir ao usuário que insira muitas senhas (por exemplo, digite sudo senha, se falhar - execute su).

Foi útil?

Solução

Não há uma maneira à prova de balas de fazer isso, porque qualquer distribuição pode colocar arquivos da maneira que desejar. Debian e Ubuntu costumam colocar arquivos do sistema em diretórios que não sejam Red Hat, por exemplo. É muito mais fácil personalizar o script para o sistema operacional em que está instalado.

Outras dicas

Não deveria. Se o script exigir privilégios de raiz, ele deve ser executado como root. É da conta do usuário como ele vai conseguir isso - usando SU, SUDO ou algum outro mecanismo.

Se você está preocupado com problemas de segurança e não deseja fazer de tudo, desde a raiz, pode soltar privilégios de raiz para essas partes.

Você pode configurar a conta para não precisar de uma senha para sudo em /etc /sudoers:

yourusername ALL=(ALL) NOPASSWD: ALL

Se você não quiser fazer isso, poderá forçá -los a executar o script como raiz. Adicione algo assim ao topo do seu script de shell:

if [ "$UID" -ne 0 ]; then
    echo "You must be root to run this script"
    exit 1
fi

Dessa forma, o usuário pode ser root, mas escolher (SU ou SUDO).

Crie mais um arquivo .sh deste arquivo, ligue para o seu original .sh arquivo como -

su - oracle /u01/enlightics/Enlightiks/UploadFTP/ExportScript2.sh

Verifique se sudo IST instalado

SU='su'
which sudo > /dev/null && SU='sudo'

Embora isso não responda completamente à sua pergunta, vale a pena notar que você pode verificar se o pacote sudo está instalado usando o seguinte:

Sistemas baseados em Debian:

dpkg -s sudo

Sistemas baseados em RPM:

rpm -q sudo
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top