Como universal é sudo?

23

Eu estava escrevendo algumas instruções sobre como instalar algo (relacionado ao TeX - se você não perguntar, não vou estragar o seu dia fornecendo mais detalhes) e usei sudo para instalar em todo o sistema. Alguém comentou que eles não achavam que sudo estava disponível em todas as distribuições Linux (ou Unix).

Existem distribuições Unix que não têm sudo e, em caso afirmativo, quais são elas? Existe um comando "Obtenha privilégios de superusuário" universalmente reconhecido que é em todos os sistemas?

    
por Loop Space 18.09.2012 / 17:14

4 respostas

33

sudo não pode ser considerado universal:

  • O Red Hat Enterprise Linux : sudo é instalado por padrão no Red Hat Enterprise Linux e seus derivados, 1 mas ele só é instalado pronto para uso no RHEL 7 e mais recente.

    O Red Hat Enterprise Linux 7 adicionou uma nova opção para a tela de instalação onde você cria o primeiro usuário não-root , uma caixa de seleção chamada" Tornar este usuário administrador ". Sua finalidade não está documentada nessa página do guia de instalação, mas um de seus efeitos é permitir que o usuário execute qualquer comando através de sudo . Isso é feito adicionando esse usuário ao grupo wheel , que pode executar qualquer comando na configuração do pacote sudo .

    O Red Hat Enterprise Linux 3 a 6 também instalou sudo por padrão, 2 mas até o RHEL 7, ele foi configurado configurado de forma que somente root pudesse executar comandos através dele. A maneira mais fácil de corrigir isso é adicionar um ou mais usuários ao grupo wheel , executar visudo como root e descomentar a linha %wheel ALL=(ALL)... .

  • Debian : No Debian 9, uma instalação mínima inclui sudo .

    No Debian 7 e 8, você tinha que selecionar o " Utilitários padrão do sistema " conjunto de pacotes durante a instalação para obter sudo . Se você instalar sudo dessa maneira, o instalador do sistema operacional adicionará automaticamente o usuário não administrativo que você criou anteriormente no processo de instalação ao grupo sudo , que tem permissão para executar todos os comandos.

    No Debian 6 e versões anteriores, você tinha que instalar o sudo via apt-get após a instalação e configurá-lo manualmente para conceder aos usuários não-root a capacidade de usá-lo.

  • FreeBSD : sudo não é instalado por padrão no FreeBSD. Você tem que construí-lo a partir de portas.

  • NetBSD : O mesmo que o FreeBSD.

  • OpenBSD : sudo costumava ser instalado por padrão no OpenBSD, mas eles mudou para doas a partir de 5.8, lançado em outubro de 2015 . doas é desativado por padrão.

    Para obter sudo nas versões atuais, você precisa instalá-lo a partir do repositório de pacotes. O pacote sudo do OpenBSD é configurado de forma semelhante ao RHEL 3 a 6, de modo que apenas root possa executar comandos através dele, o que, em vez disso, anula a finalidade de sudo . Se você adicionou um usuário que não seja root durante a instalação, ele foi adicionado ao grupo wheel , então a maneira mais simples de tornar sudo útil em um sistema OpenBSD é descomentar a linha %wheel ALL=(ALL)... via visudo .

  • Solaris : sudo é instalado por padrão no Solaris 11, mas o Solaris 10 e mais antigos usam o semelhante, mas não o mesmo, pfexec .

    Você pode obter sudo para sistemas mais antigos, mas os padrões são importantes. O Solaris 10 e mais antigos estarão conosco por anos, por isso, se você tiver o Solaris em seu ambiente e não estiver pessoalmente no controle desses sistemas e puder garantir que sudo esteja lá, não poderá contar com ele.

Quanto mais antigo o sistema, maior a chance de ele não ter sudo . Embora sudo seja muito antigo , ele não começou a se tornar popular até meados dos anos 2000. Sistemas mais antigos do que isso são altamente improváveis de ter sudo . As caixas Unix tendem a viver muito tempo, por isso não é inconcebível que você ainda se deparasse com esse sistema hoje em dia.

Eu só conto com sudo nos sistemas que eu gerencio pessoalmente, ou no Ubuntu, macOS ou openSuSE, onde é a maneira única de obter privilégios de root, por padrão.

su está mais próximo de um comando universal "obter privilégios de superusuário" que sudo , mas então você tem sistemas como o Ubuntu e o macOS, onde a conta root é bloqueada por padrão especificamente para forçá-lo a usar sudo em vez de su . Então, você não pode chamar su universal.

Notas de rodapé :

  1. CentOS, Oracle Linux, Linux Científico ...

  2. Sim, mesmo em instalações mínimas.

por 19.09.2012 / 01:32
8

sudo é um utilitário que está disponível em quase todos os sistemas Linux.
No entanto, não é empacotado por padrão em todas as distros. Todas as principais distribuições são empacotadas por padrão.

Distribuições Linux como Arch Linux, Gentoo, LFS, etc., que permitem ao usuário uma customização completa, não possuem sudo por padrão.

No Arch Linux, o sistema básico não vem com sudo instalado. O usuário deve baixar manualmente sudo e editar o arquivo sudoers.
Idem para o Gentoo e o LFS. Eu não conheço nenhuma outra grande distribuição sem sudo.

E não, não acho que exista algo mais universal que sudo na concessão de privilégios de superusuário. Ou seja, além de fazer login como root.

    
por 18.09.2012 / 17:18
7

A distribuição mais usada, o Ubuntu, usa sudo como o método recomendado para se tornar root (ao usar a linha de comando - os usuários que aderem à GUI receberão uma solicitação de senha sem entender ou se preocupar com o que acontece capuz). Outras distribuições podem ou não encorajar a instalação do sudo e podem ou não enviá-lo. Por outro lado, su está disponível em todos os lugares e pode ser usado na maioria dos sistemas, exceto aqueles em que apenas sudo está disponível porque o usuário não terá a senha raiz.

Entre su e sudo , você cobrirá quase todos os seus usuários. Os exóticos que precisam de calife ou op ou pfexec já sabem o que fazer. Mesmo que não o façam, é provável que um sistema que não use nem su nem sudo tenha arquivos em lugares desconhecidos e muitas coisas nas quais você não pensou que suas instruções provavelmente não funcionarão de qualquer maneira.

    
por 19.09.2012 / 03:13
5

Para responder à sua pergunta, o mais exato é que sudo não é considerado universal. Na verdade, todo o conceito de "universal", muitas vezes é um arenque vermelho. Isto é especialmente verdade, no que diz respeito à compatibilidade entre distros. Uma vez que você joga na multiplicidade de diferentes versões de software, a universalidade se torna semi-irreal. A criação de scripts por natureza é pragmática, se fosse pedante, escrever scripts portáveis seria praticamente impossível.

Normalmente eu calculo meu ambiente de execução pretendido, uma distribuição Linux semi-moderna, eu espero um shell POSIX com o GNU Utils comum. Para scripts que podem ser executados fora do Linux, eu só espero o padrão POSIX completo. Obviamente, muitos scripts são específicos para o Linux, ou específicos para a distribuição, de modo que muitas vezes restringe o escopo da portabilidade.

Para resolver seu caso de script específico,

#!/bin/sh


## Exit Point
die() {
    [ -n "$2" ] && echo "$2"
    exit $1
}


## Require SuperUser Execution, Otherwise Re-Execute
[ 'id -u' -ne 0 ] && {

    command -v lsb_release > /dev/null && {
        DISTRO="'lsb_release -is'"
        [ "$DISTRO" = "Ubuntu" ] && SUPERUSER='sudo'
    }
    SUPERUSER="${SUPERUSER:-su}"

    case "$SUPERUSER" in
        su)
            su -c "$0"
            ;;
        sudo)
            sudo "$0"
            ;;
    esac
}

## Require SuperUser Execution
[ 'id -u' -ne 0 ] && die 78




echo 'Script Executed by UID'
id -u




## Clean Up
die 0

esse script colado é o complemento shell do POSIX, eu sempre escrevo compatível com o Dash.

    
por 18.09.2012 / 18:13