Comando sudo do Linux
Em sistemas operacionais do tipo Unix, o comando sudo (“superusuário do” ou “alternar usuário, do”) permite que um usuário com permissões apropriadas execute um comando como outro usuário, como o superusuário .
Este documento descreve a versão Linux do sudo .
Descrição
O sudo permite que um usuário permitido execute um comando como outro usuário, de acordo com as especificações no arquivo / etc / sudoers . O uid e o gid reais e efetivos do usuário emissor são definidos para corresponder aos da conta do usuário de destino, conforme especificado no arquivo passwd .
Por padrão, o sudo exige que os usuários se autentiquem com uma senha. Por padrão, essa é a senha do usuário, não a senha raiz.
Depois que um usuário é autenticado, um registro de data e hora é gravado e o usuário pode usar o sudo sem uma senha por um curto período de tempo ( 5 minutos , a menos que configurado de forma diferente nos sudoers ). Esse registro de data e hora pode ser renovado se o usuário emitir o sudo com o sinalizador -v .
Se um usuário não listado em sudoers tentar executar um comando usando o sudo , será considerada uma tentativa malsucedida de violar a segurança do sistema e o email será enviado às autoridades apropriadas, conforme definido no momento da configuração ou no arquivo do sudoers . A autoridade padrão a ser notificada de tentativas malsucedidas de sudo é raiz . Observe que o email não será enviado se um usuário não autorizado tentar executar o sudo com os sinalizadores -l ou -v ; isso permite que os usuários determinem por si próprios se podem ou não usar o sudo .
O sudo pode registrar tentativas bem-sucedidas e malsucedidas (bem como erros) no syslog , um arquivo de log exclusivo ou ambos. Por padrão, o sudo registrará no syslog, mas isso pode ser alterado no momento da configuração ou no arquivo sudoers .
Para editar o arquivo sudoers , use o comando visudo .
Sintaxe
sudo -V | -h -l -L -v -k -K -s | [-H] [-P] [-S] [-b] | [-p prompt ] [-c class | -] [-a auth_type ] [-r role ] [-t type ]Comando [-u nome de usuário | # uid ]
Opções
-V | A opção -V (versão) faz com que o sudo imprima o número da versão e saia. Se o usuário que está chamando já for root, a opção -V imprimirá uma lista dos padrões com os quais o sudo foi compilado, bem como os endereços de rede local da máquina. |
-eu | A opção -l (lista) imprimirá os comandos permitidos (e proibidos) ao usuário no host atual. |
-EU | A opção -L (listar padrões) listará os parâmetros que podem ser definidos em uma linha de padrões , juntamente com uma breve descrição de cada um. Esta opção é útil em conjunto com o grep . |
-h | A opção -h (ajuda) faz com que o sudo imprima uma mensagem de uso e saia. |
-v | Se a opção -v (validar) receber , o sudo atualizará o carimbo de data / hora do usuário, solicitando a senha do usuário, se necessário. Isso prolonga o tempo limite do sudo por mais 5 minutos (ou qualquer que seja o tempo limite definido no sudoers ), mas não executa um comando. |
-k | A opção -k (kill) para sudo invalida o registro de data e hora do usuário, definindo a hora na época . Na próxima vez que o sudo for executado, será necessária uma senha. Esta opção não requer uma senha e foi adicionada para permitir que um usuário revogue as permissões do sudo de um arquivo .logout . |
-K | A opção -K (com certeza mata) para sudo remove completamente o registro de data e hora do usuário. Da mesma forma, esta opção não requer uma senha. |
-b | A opção -b (segundo plano) diz ao sudo para executar o comando especificado em segundo plano. Observe que, se você usar a opção -b, não poderá usar o controle de tarefas do shell para manipular o processo. |
-p | A opção -p (prompt) permite substituir o prompt de senha padrão e usar um personalizado. As seguintes porcentagens de escape (‘ % ‘) são suportadas: % u é expandido para o nome de login do usuário que está chamando ; % U é expandido para o nome de login do usuário no qual o comando será executado ((o padrão é root); % h é expandido para o nome do host local sem o nome do domínio ; % H é expandido para o nome do host local, incluindo o nome do domínio (somente se o nome do host da máquina estiver totalmente qualificado ou se a opção sudoers ” fqdn ” estiver definida); %% (dois consecutivos % caracteres ) são recolhidos em um único caractere % . |
-c | A opção -c (class) faz com que o sudo execute o comando especificado com os recursos limitados pela classe de login especificada. O argumento da classe pode ser um nome de classe, conforme definido em /etc/login.conf , ou um único caractere ‘ – ‘. Especificar uma classe de – indica que o comando deve ser executado restrito pelos recursos de login padrão do usuário que está executando o comando. Se o argumento da classe especificar uma classe de usuário existente, o comando deverá ser executado como root ou o comando sudo deverá ser executado a partir de um shell que já seja root. Esta opção está disponível apenas em sistemas com classes de login BSD nas quais o sudo foi configurado com o–com opção logincap . |
-uma | A opção -a (tipo de autenticação) faz com que o sudo use o tipo de autenticação especificado ao validar o usuário, conforme permitido pelo /etc/login.conf . O administrador do sistema pode especificar uma lista de métodos de autenticação específicos do sudo adicionando uma entrada ” auth-sudo ” no /etc/login.conf . Esta opção está disponível apenas em sistemas que suportam autenticação BSD em que o sudo foi configurado com a opção –with-bsdauth . |
-você | A opção -u (usuário) faz com que o sudo execute o comando especificado como um usuário que não seja root. Para especificar um uid em vez de um nome de usuário, use #uid . |
-s | A opção -s (shell) executa o shell especificado pela variável de ambiente SHELL se estiver definido ou o shell conforme especificado no arquivo passwd . |
-H | A opção -H (HOME) define a variável de ambiente HOME como o diretório inicial do usuário de destino ( raiz por padrão), conforme especificado na senha . Por padrão, o sudo não modifica o HOME . |
-P | A opção -P (preservar vetor de grupo) faz com que o sudo preserve o vetor de grupo do usuário inalterado. Por padrão, o sudo inicializará o vetor de grupo na lista de grupos do usuário de destino. Os IDs de grupo reais e efetivos, no entanto, ainda estão configurados para corresponder ao usuário de destino. |
-r | A opção -r (role) faz com que o novo contexto de segurança ( SELinux ) tenha a função especificada por ROLE. |
-t | A opção -t (type) faz com que o novo contexto de segurança (SELinux) tenha o tipo (domínio) especificado por TYPE . Se nenhum tipo for especificado, o tipo padrão será derivado da função especificada. |
-S | A opção -S ( stdin ) faz com que o sudo leia a senha da entrada padrão em vez do dispositivo terminal . |
– | O sinalizador – indica que o sudo deve parar de processar argumentos da linha de comando. É mais útil em conjunto com o sinalizador -s . |
Retornar valores
Após a execução bem-sucedida de um programa, o valor de retorno do sudo será o valor de retorno do programa que foi executado.
Caso contrário, o sudo será encerrado com um valor de saída 1 se houver um problema de configuração / permissão ou se o sudo não puder executar o comando especificado. Neste último caso, a sequência de erros é impressa em stderr . Se o sudo não puder declarar uma ou mais entradas no CAMINHO do usuário, um erro será impresso no stderr . (Se o diretório não existir ou se não for realmente um diretório, a entrada será ignorada e nenhum erro será impresso.) Isso não deve ocorrer em circunstâncias normais. O motivo mais comum para o stat retornar “permissão negada” é se você estiver executando uma montagem automáticaer e um dos diretórios em seu PATH está em uma máquina inacessível no momento.
Notas de segurança
O sudo tenta ser seguro ao executar comandos. Variáveis que controlam como é feito o carregamento e a ligação dinâmicos podem ser usadas para subverter o programa que o sudo executa. Para combater isso, algumas variáveis de ambiente específicas do sistema são removidas do ambiente que é passado para os comandos executados. Outras variáveis que o sudo remove do ambiente incluem:
- IFS
- ENV
- BASH_ENV
- KRB_CONF
- KRBCONFDIR
- KRBTKFILE
- KRB5_CONFIG
- LOCALDOMAIN
- RES_OPTIONS
- HOSTALIASES
- NLSPATH
- PATH_LOCALE
- TERMINFO
- TERMINFO_DIRS
- TERMPATH
como eles também podem representar uma ameaça. Se a variável TERMCAP estiver configurada e for um nome de caminho, ela também será ignorada. Além disso, se determinadas variáveis contiverem os caracteres / ou % , elas serão ignoradas.
Se o sudo tiver sido compilado com suporte ao SecurID , as variáveis VAR_ACE , USR_ACE e DLC_ACE também serão limpas. A lista de variáveis de ambiente que o sudo limpa está contida na saída do sudo -V quando executada como raiz.
Para impedir a falsificação de comandos, o sudo verifica ” . ” E “” (ambos indicando o diretório atual) por último ao procurar um comando no PATH do usuário (se um ou ambos estiverem no PATH ). Observe, no entanto, que a variável de ambiente PATH real não é modificada e é passada inalterada para o programa que o sudo executa.
Por motivos de segurança, se o seu sistema operacional oferecer suporte a bibliotecas compartilhadas e não desativar os caminhos de pesquisa de bibliotecas definidas pelo usuário para programas setuid (a maioria o faz), você deve usar uma opção de vinculador que desabilita esse comportamento ou vincula o sudo estaticamente.
O sudo verificará a propriedade de seu diretório de registro de data e hora ( / var / run / sudo por padrão) e ignorará o conteúdo do diretório se ele não pertencer ao root e somente puder ser gravado pelo root. Em sistemas que permitem que usuários não raiz entreguem arquivos via chown , se o diretório de registro de data e hora estiver localizado em um diretório gravável por qualquer pessoa (por exemplo: / tmp ), é possível que um usuário crie o diretório de registro de data e hora antes da execução do sudo . No entanto, porque sudoverifica a propriedade e o modo do diretório e seu conteúdo, o único dano que pode ser causado é “ocultar” os arquivos colocando-os no diretório de carimbo de data / hora. É improvável que isso aconteça, uma vez que o diretório do carimbo de data / hora é de propriedade do root e inacessível a qualquer outro usuário, o usuário que coloca os arquivos lá não poderá recuperá-los. Para contornar esse problema, você pode usar um diretório que não possa ser gravado no mundo para os carimbos de data / hora ( / var / adm / sudo, por exemplo) ou criar / var / run / sudo com o proprietário (raiz) e permissões apropriadas (0700) em os arquivos de inicialização do sistema.
O sudo não cumprirá os carimbos de data e hora estabelecidos no futuro. Os carimbos de data / hora com uma data maior que current_time + 2 * TIMEOUT serão ignorados e o sudo registrará e reclamará. Isso é feito para impedir que um usuário crie seu próprio registro de data e hora com uma data falsa em sistemas que permitem que os usuários entreguem arquivos.
Observe que o sudo registrará apenas o comando que ele executa explicitamente. Se um usuário executar um comando como ” sudo su ” ou ” sudo sh “, os comandos subsequentes executados nesse shell não serão registrados, nem o controle de acesso do sudo os afetará. O mesmo vale para comandos que oferecem escapes de shell (incluindo a maioria dos editores). Por esse motivo, deve-se tomar cuidado ao conceder aos usuários acesso aos comandos via sudo para verificar se o comando não fornece inadvertidamente ao usuário um shell raiz eficaz.
variáveis ambientais
O sudo usa as seguintes variáveis de ambiente :
CAMINHO | Defina como um valor sensato se SECURE_PATH estiver definido |
CONCHA | Usado para determinar o shell a ser executado com a opção -s |
DO UTILIZADOR | Configure para o usuário de destino (raiz, a menos que a opção -u seja especificada) |
CASA | No modo -s ou -H (ou se o sudo tiver sido configurado com a opção –enable-shell-sets-home ), defina o diretório inicial do usuário de destino. |
SUDO_PROMPT | Usado como o prompt de senha padrão |
SUDO_COMMAND | Defina como o comando executado por sudo |
SUDO_USER | Defina como o login do usuário que chamou o sudo |
SUDO_UID | Definido como o uid do usuário que chamou o sudo |
SUDO_GID | Defina como o gid do usuário que chamou o sudo |
SUDO_PS1 | Se definido, o PS1 será definido como seu valor |
Exemplos
sudo shutdown -r agora
Reinicie o sistema; execute o comando shutdown como root.
sudo -u hope ls / home / otheruser / Documentos
Liste o conteúdo do diretório / home / otheruser / Documents como o usuário espera .
sudo -u hope -g outros usuários mkdir / home / otheruser / Documentos / newfiles
Crie um novo diretório com o mkdir comando, como o usuário esperança , com o grupo atual da esperança definido para otherusers . a esperança deve ser um membro do grupo de outros usuários .
sudo -v
Aumente / redefina o tempo limite de autenticação automática do sudo , permitindo continuar emitindo comandos sudo sem inserir uma senha.
sudo -k
Autenticação sudo “Kill” para o usuário atual. O próximo comando sudo exigirá uma senha.
Comandos relacionados
su – Torne-se o superusuário ou outro usuário.
visudo – Edite oarquivo sudoers , que define quem pode executar o sudo .