sudo, sudoedit — execute um comando como outro usuário
SINOPSIS
sudo -h | -K | -k | -V
sudo -v [-ABkNnS] [-g grupo] [-h host] [-p prompt] [-u usuário]
sudo -l [-ABkNnS] [-g grupo] [-h host] [-p prompt] [-U usuário] [-u usuário] [comando [arg ...]]
sudo [-ABbEHnPS] [-C num] [-D diretório] [-g grupo] [-h host] [-p prompt] [-R diretório]
[-r role] [-t type] [-T timeout] [-u usuário] [VAR=valor] [-i | -s] [comando [arg ...]]
sudoedit [-ABkNnS] [-C num] [-D diretório] [-g grupo] [-h host] [-p prompt] [-R diretório]
[-r role] [-t type] [-T timeout] [-u usuário] arquivo ...
DESCRIÇÃO
sudo permite que um usuário autorizado execute um comando como superusuário ou outro usuário, conforme
especificado pela política de segurança. O ID de usuário real (não o efetivo) do usuário que invoca é usado para determinar
o nome de usuário com o qual consultar a política de segurança.
sudo suporta uma arquitetura de plugin para políticas de segurança, auditoria e registro de entrada/saída.
Terceiros podem desenvolver e distribuir seus próprios plugins para trabalhar perfeitamente com o front-end sudo. A política de segurança padrão é sudoers, que é configurada através do arquivo /etc/sudoers, ou via LDAP. Veja a seção "Plugins" para mais informações.
A política de segurança determina quais privilégios, se houver, um usuário tem para executar sudo. A política pode exigir que os usuários se autentiquem com uma senha ou outro mecanismo de autenticação. Se a autenticação for necessária, o sudo será encerrado se a senha do usuário não for inserida dentro de um limite de tempo configurável. Este limite é específico da política; o limite de tempo padrão do prompt de senha para o a política de segurança sudoers é de 0 minutos.
As políticas de segurança podem suportar o armazenamento em cache de credenciais para permitir que o usuário execute o sudo novamente por um período de tempo sem exigir autenticação. Por padrão, a política sudoers armazena em cache as credenciais por terminal por 15 minutos. Veja as opções timestamp_type e timestamp_timeout em sudoers(5) para mais informações. Ao executar o sudo com a opção -v, um usuário pode atualizar o credenciais armazenadas em cache sem executar um comando.
Em sistemas onde o sudo é o principal método para obter privilégios de superusuário, é imperativo evitar erros de sintaxe nos arquivos de configuração da política de segurança. Para a política de segurança padrão, sudoers(5), as alterações nos arquivos de configuração devem ser feitas usando o utilitário visudo(8), que garantirá que nenhum erro de sintaxe seja introduzido.
Quando invocado como sudoedit, a opção -e (descrita abaixo) é implícita.
As políticas de segurança e os plugins de auditoria podem registrar tentativas bem-sucedidas e malsucedidas de executar o sudo. Se um um plugin de E/S estiver configurado, a entrada e a saída do comando em execução também podem ser registradas.
As opções são as seguintes:
-A, --askpass
Normalmente, se o sudo exigir uma senha, ele a lerá do terminal do usuário. Se a opção -A (askpass) for especificada, um programa auxiliar (possivelmente gráfico) será executado para ler a senha do usuário e emitir a senha para a saída padrão. Se a variável de ambiente SUDO_ASKPASS estiver definida, ela especifica o caminho para o programa auxiliar. Caso contrário, se o sudo.conf(5) contiver uma linha especificando o programa askpass, esse valor será usado. Por exemplo:
# Caminho para o programa auxiliar askpass
Path askpass /usr/bin/ssh-askpass
Se nenhum programa askpass estiver disponível, o sudo será encerrado com um erro.
-B, --bell
Emite um sinal sonoro como parte do prompt de senha quando um terminal está presente. Esta opção não tem efeito se um programa askpass for usado.
-b, --background
Executa o comando especificado em segundo plano. Não é possível usar o controle de tarefas do shell para manipular processos em segundo plano iniciados pelo sudo. A maioria dos comandos interativos não funcionará corretamente no modo em segundo plano.
-C num, --close-from=num
Fecha todos os descritores de arquivo maiores ou iguais a num antes de executar um comando. Valores menores que três não são permitidos. Por padrão, o sudo fechará todos os descritores de arquivo abertos, exceto a entrada padrão, a saída padrão e o erro padrão, ao executar um comando. A política de segurança pode restringir a capacidade do usuário de usar esta opção. A política sudoers permite o uso da opção -C somente quando o administrador habilitou a opção closefrom_override.
-D directory, --chdir=directory
Executa o comando no diretório especificado em vez do diretório de trabalho atual. A política de segurança pode retornar um erro se o usuário não tiver permissão para especificar o diretório de trabalho.
-E, --preserve-env
Indica à política de segurança que o usuário deseja preservar suas variáveis de ambiente existentes. A política de segurança pode retornar um erro se o usuário não tiver permissão para preservar o ambiente.
--preserve-env=list
Indica à política de segurança que o usuário deseja adicionar a lista separada por vírgulas de variáveis de ambiente a serem preservadas do ambiente do usuário. A política de segurança pode retornar um erro se o usuário não tiver permissão para preservar o ambiente. Esta opção pode ser especificada várias vezes.
-e, --edit
Edita um ou mais arquivos em vez de executar um comando. Em vez de um nome de caminho, a string "sudoedit" é usada ao consultar a política de segurança. Se o usuário for autorizado pela política, as seguintes etapas serão executadas:
Cópias temporárias dos arquivos a serem editados são feitas, com o proprietário definido como o usuário que invocou o comando.
O editor especificado na política é executado para editar os arquivos temporários. A política sudoers usa as variáveis de ambiente SUDO_EDITOR, VISUAL e EDITOR (nessa ordem). Se nenhuma de SUDO_EDITOR, VISUAL ou EDITOR estiver definida, o primeiro programa listado na opção editor sudoers(5) será usado.
Se os arquivos forem modificados, os arquivos temporários são copiados de volta para seu local original e as versões temporárias são removidas.
Para ajudar a evitar a edição de arquivos não autorizados, as seguintes restrições são aplicadas, a menos que explicitamente permitidas pela política de segurança:
Links simbólicos não podem ser editados (versão 1.8.15 e superior).
Links simbólicos ao longo do caminho a ser editado não são seguidos quando o diretório pai é gravável pelo usuário que invoca o comando, a menos que esse usuário seja o root (versão 1.8.16 e superior).
Arquivos localizados em um diretório que é gravável pelo usuário que invoca o comando não podem ser editados a menos que esse usuário seja o root (versão 1.8.16 e superior).
Os usuários nunca têm permissão para editar arquivos especiais de dispositivo.
Se o arquivo especificado não existir, ele será criado. Ao contrário da maioria dos comandos executados por sudo, o editor é executado com o ambiente do usuário que invoca o comando inalterado. Se o arquivo temporário ficar vazio após a edição, o usuário será solicitado antes que ele seja instalado. Se, por algum motivo, o sudo não conseguir atualizar um arquivo com sua versão editada, o usuário receberá um aviso e a cópia editada permanecerá em um arquivo temporário.
-g grupo, --group=grupo
Execute o comando com o grupo primário definido como grupo, em vez do grupo primário especificado na entrada do banco de dados de senhas do usuário de destino. O grupo pode ser um nome de grupo ou um ID de grupo numérico (GID) prefixado com o caractere ‘#’ (por exemplo, ‘#0’ para GID 0). Ao executar um comando como um GID, muitos shells exigem que o ‘#’ seja escapado com uma barra invertida (‘\’). Se nenhuma opção -u for especificada, o comando será executado como o usuário que invoca o comando. Em qualquer caso, o grupo primário será definido como grupo. A política do sudoers permite que qualquer um dos grupos do usuário de destino seja especificado por meio da opção -g, desde que a opção -P não esteja em uso.
-H, --set-home
Solicite que a política de segurança defina a variável de ambiente HOME para o diretório inicial especificado na entrada do banco de dados de senhas do usuário de destino. Dependendo da política, este pode ser o comportamento padrão.
-h, --help
Exibe uma mensagem de ajuda curta na saída padrão e sai.
-h host, --host=host
Execute o comando no host especificado, se o plugin de política de segurança suportar comandos remotos. O plugin sudoers não suporta atualmente a execução de comandos remotos. Isso também pode ser usado em conjunto com a opção -l para listar os privilégios de um usuário para o host remoto.
-i, --login
Execute o shell especificado na entrada do banco de dados de senhas do usuário de destino como um shell de login. Isso significa que os arquivos de recursos específicos do login, como .profile, .bash_profile ou .login, serão lidos pelo shell. Se um comando for especificado, ele será passado para o shell como um comando simples usando a opção -c. O comando e quaisquer argumentos são concatenados, separados por espaços, após escapar cada caractere (incluindo espaço em branco) com uma barra invertida (‘\’) exceto por alfanuméricos, sublinhados, hífens e sinais de dólar. Se nenhum comando for especificado, um shell interativo será executado. O sudo tenta alterar para o diretório inicial desse usuário antes de executar o shell. O comando é executado com um ambiente semelhante ao que um usuário receberia no login. A maioria dos shells se comporta de maneira diferente quando um comando é especificado em comparação com uma sessão interativa; consulte o manual do shell para obter detalhes. A seção Ambiente de comando no manual sudoers(5) documenta como a opção -i afeta o ambiente no qual um comando é executado quando a política do sudoers está em uso.
-K, --remove-timestamp
Semelhante à opção -k, exceto que remove todas as credenciais armazenadas em cache para o usuário, independentemente do terminal ou ID do processo pai. Da próxima vez que o sudo for executado, uma senha deverá ser inserida se a política de segurança exigir autenticação. Não é possível usar a opção -K em conjunto com um comando ou outra opção. Esta opção não exige uma senha. Nem todas as políticas de segurança suportam o armazenamento de credenciais em cache.
-k, --reset-timestamp
Quando usado sem um comando, invalida as credenciais armazenadas em cache do usuário para a sessão atual. Da próxima vez que o sudo for executado na sessão, uma senha deverá ser inserida se a política de segurança exigir autenticação. Por padrão, a política sudoers usa um registro separado no cache de credenciais para cada terminal (ou ID do processo pai, se nenhum terminal estiver presente). Isso impede que a opção -k interfira em comandos sudo executados em uma sessão de terminal diferente. Consulte a opção timestamp_type em sudoers(5) para obter mais informações. Esta opção não exige uma senha e foi adicionada para permitir que um usuário revogue as permissões do sudo de um arquivo .logout.
Quando usado em conjunto com um comando ou uma opção que possa exigir uma senha, esta opção fará com que o sudo ignore as credenciais armazenadas em cache do usuário. Como resultado, o sudo solicitará uma senha (se uma for exigida pela política de segurança) e não atualizará as credenciais armazenadas em cache do usuário.
Nem todas as políticas de segurança suportam o armazenamento de credenciais em cache.
-l, --list
Se nenhum comando for especificado, liste os privilégios do usuário que invoca (ou do usuário especificado pela opção -U) no host atual. Um formato de lista mais longo é usado se esta opção for especificada várias vezes e a política de segurança suportar um formato de saída detalhado.
Se um comando for especificado e for permitido pela política de segurança para o usuário que invoca (ou para o usuário especificado pela opção -U) no host atual, o caminho absoluto para o comando é exibido, juntamente com quaisquer argumentos. Se -l for especificado mais de uma vez (e a política de segurança o suportar), a regra correspondente será exibida em um formato detalhado, juntamente com o comando. Se um comando for especificado, mas não for permitido pela política, o sudo será encerrado com um valor de status de 1.
-N, --no-update
Não atualizar as credenciais armazenadas em cache do usuário, mesmo que o usuário se autentique com sucesso. Ao contrário da flag -k, as credenciais armazenadas em cache existentes são usadas se forem válidas. Para detectar quando as credenciais armazenadas em cache do usuário são válidas (ou quando nenhuma autenticação é necessária), o seguinte pode ser usado:
sudo -Nnv
Nem todas as políticas de segurança dão suporte ao armazenamento em cache de credenciais.
-n, --non-interactive
Evitar solicitar qualquer tipo de entrada do usuário. Se uma senha for necessária para executar o comando, o sudo exibirá uma mensagem de erro e será encerrado.
-P, --preserve-groups
Preservar o vetor de grupos do usuário que invocou, inalterado. Por padrão, a política do sudoers inicializará o vetor de grupos para a lista de grupos dos quais o usuário de destino é membro. Os IDs de grupo reais e efetivos, no entanto, ainda são definidos para corresponder ao usuário de destino.
-p prompt, --prompt=prompt
Usar um prompt de senha personalizado com sequências de escape opcionais. As seguintes sequências de escape de porcentagem (‘%’) são suportadas pela política do sudoers:
%H expandido para o nome do host, incluindo o nome de domínio (apenas se o nome do host da máquina for totalmente qualificado ou a opção fqdn estiver definida em sudoers(5))
%h expandido para o nome do host local sem o nome de domínio
%p expandido para o nome do usuário cuja senha está sendo solicitada (respeita as flags rootpw, targetpw e runaspw em sudoers(5))
%U expandido para o nome de login do usuário como o qual o comando será executado (o padrão é root, a menos que a opção -u também seja especificada)
%u expandido para o nome de login do usuário que invocou
%% duas sequências de caracteres ‘%’ consecutivas são reduzidas a um único caractere ‘%’
O prompt personalizado substituirá o prompt padrão especificado pela política de segurança ou pela variável de ambiente SUDO_PROMPT. Em sistemas que usam o PAM, o prompt personalizado também substituirá o prompt especificado por um módulo PAM, a menos que a flag passprompt_override esteja desativada em sudoers.
-R directory, --chroot=directory
Alterar para o diretório raiz especificado (veja chroot(8)) antes de executar o comando. A política de segurança pode retornar um erro se o usuário não tiver permissão para especificar o diretório raiz.
Esta opção está obsoleta e será removida em uma versão futura do sudo.
-r role, --role=role
Executar o comando com um contexto de segurança SELinux que inclua a função especificada.
-S, --stdin
Escrever o prompt no erro padrão e ler a senha da entrada padrão em vez de usar o dispositivo de terminal.
-s, --shell
Executar o shell especificado pela variável de ambiente SHELL, se estiver definida, ou o shell especificado na entrada do banco de dados de senhas do usuário que invocou. Se um comando for especificado, ele será passado para o shell como um comando simples usando a opção -c. O comando e seus argumentos são concatenados, separados por espaços, após escapar cada caractere (incluindo espaços em branco) com uma barra invertida (‘\’), exceto por caracteres alfanuméricos, sublinhados, hífens e sinais de dólar. Se nenhum comando for especificado, um shell interativo será executado. A maioria dos shells se comporta de maneira diferente quando um comando é especificado em comparação com uma sessão interativa; consulte o manual do shell para obter detalhes.
-t type, --type=type
Executa o comando com um contexto de segurança SELinux que inclui o tipo especificado. Se nenhum tipo for especificado, o tipo padrão é derivado da função.
-U user, --other-user=user
Usado em conjunto com a opção -l para listar os privilégios para o usuário, em vez do usuário que invocou o comando. A política de segurança pode restringir a listagem dos privilégios de outros usuários. Ao usar a política sudoers, a opção -U é restrita ao usuário root e aos usuários que têm o privilégio "list" para o usuário especificado ou a capacidade de executar qualquer comando como root ou usuário no host atual.
-T timeout, --command-timeout=timeout
Usado para definir um tempo limite para o comando. Se o tempo limite expirar antes que o comando seja encerrado, o comando será terminado. A política de segurança pode restringir a capacidade do usuário de definir tempos limite. A política sudoers exige que os tempos limite especificados pelo usuário sejam explicitamente habilitados.
-u user, --user=user
Executa o comando como um usuário diferente do usuário de destino padrão (geralmente root). O usuário pode ser um nome de usuário ou um ID de usuário numérico (UID) prefixado com o caractere '#' (por exemplo, '#0' para UID 0). Ao executar comandos como um UID, muitos shells exigem que o '#' seja escapado com uma barra invertida ('\'). Algumas políticas de segurança podem restringir os UIDs aos listados no banco de dados de senhas. A política sudoers permite UIDs que não estão no banco de dados de senhas, desde que a opção targetpw não esteja definida. Outras políticas de segurança podem não oferecer suporte a isso.
-V, --version
Imprime a string de versão do sudo, bem como a string de versão de quaisquer plugins configurados. Se o usuário que invocou o comando já for root, a opção -V exibirá as opções passadas para configure quando o sudo foi compilado; os plugins podem exibir informações adicionais, como opções padrão.
-v, --validate
Atualiza as credenciais armazenadas em cache do usuário, autenticando o usuário, se necessário. Para o plugin sudoers, isso estende o tempo limite do sudo por mais 15 minutos por padrão, mas não executa um comando. Nem todas as políticas de segurança oferecem suporte a credenciais armazenadas em cache.
--
O "--" é usado para delimitar o final das opções do sudo. Opções subsequentes são passadas para o comando.
As opções que recebem um valor só podem ser especificadas uma vez, a menos que indicado de outra forma na descrição. Isso é para ajudar a evitar problemas causados por scripts mal escritos que invocam o sudo com entrada controlada pelo usuário.
As variáveis de ambiente a serem definidas para o comando também podem ser passadas como opções para o sudo no formato VAR=valor, por exemplo, LD_LIBRARY_PATH=/usr/local/pkg/lib. As variáveis de ambiente podem estar sujeitas a restrições impostas pelo plugin da política de segurança. A política sudoers sujeita as variáveis de ambiente passadas como opções às mesmas restrições das variáveis de ambiente existentes, com uma diferença importante. Se a opção setenv estiver definida no sudoers, o comando a ser executado tiver a tag SETENV ou o comando correspondente for ALL, o usuário poderá definir variáveis que, de outra forma, seriam proibidas. Consulte sudoers(5) para obter mais informações.
EXECUÇÃO DE COMANDOS
Quando o sudo executa um comando, a política de segurança especifica o ambiente de execução para o comando. Tipicamente, os IDs de usuário e grupo reais e efetivos são definidos para corresponder aos do usuário de destino, conforme especificado no banco de dados de senhas, e o vetor de grupo é inicializado com base no banco de dados de grupos (a menos que a opção -P tenha sido especificada).
Os seguintes parâmetros podem ser especificados pela política de segurança:
ID de usuário real e efetivo
ID de grupo real e efetivo
IDs de grupo suplementares
a lista de ambiente
diretório de trabalho atual
máscara de criação de arquivo (umask)
função e tipo SELinux
prioridade de agendamento (também conhecida como valor "nice")
Modelo de processo
Existem duas maneiras distintas pelas quais o sudo pode executar um comando.
Se um plugin de registro de E/S estiver configurado para registrar a E/S do terminal ou se a política de segurança solicitar explicitamente, um novo pseudo-terminal ("pty") é alocado e fork(2) é usado para criar um segundo processo sudo, referido como o monitor. O monitor cria uma nova sessão de terminal com ele mesmo como líder e o pty como seu terminal de controle, chama fork(2) novamente, configura o ambiente de execução conforme descrito acima e, em seguida, usa a chamada de sistema execve(2) para executar o comando no processo filho. O monitor existe para retransmitir os sinais de controle de trabalho entre o terminal do usuário e o pty em que o comando está sendo executado. Isso torna possível suspender e retomar o comando normalmente. Sem o monitor, o comando estaria no que o POSIX chama de "grupo de processos órfão" e não receberia nenhum sinal de controle de trabalho do kernel. Quando o comando sai ou é terminado por um sinal, o monitor passa o status de saída do comando para o processo sudo principal e sai. Depois de receber o status de saída do comando, o processo sudo principal passa o status de saída do comando para a função de fechamento da política de segurança, bem como para a função de fechamento de qualquer plugin de auditoria configurado, e sai. Este é o modo padrão para versões do sudo 1.9.14 e superiores ao usar a política sudoers.
Se nenhum pty for usado, o sudo chama fork(2), configura o ambiente de execução conforme descrito acima e usa a chamada de sistema execve(2) para executar o comando no processo filho. O processo sudo principal aguarda até que o comando seja concluído, passa o status de saída do comando para a função de fechamento da política de segurança, bem como para a função de fechamento de quaisquer plugins de auditoria configurados, e sai. Como um caso especial, se o plugin de política não definir uma função de fechamento, o sudo executará o comando diretamente, em vez de chamar fork(2) primeiro. O plugin de política sudoers definirá uma função de fechamento somente quando o registro de E/S estiver habilitado, um pty for necessário, uma função SELinux for especificada, o comando tiver um tempo limite associado ou as opções pam_session ou pam_setcred estiverem habilitadas. Tanto pam_session quanto pam_setcred são habilitados por padrão em sistemas que usam o PAM. Este é o modo padrão para versões do sudo anteriores à 1.9.14 ao usar a política sudoers.
Em sistemas que usam PAM, a função de fechamento da política de segurança é responsável por fechar a sessão PAM. Ela também pode registrar o status de saída do comando.
Tratamento de sinais
Quando o comando é executado como um processo filho do processo sudo, o sudo retransmitirá os sinais que receber ao comando. Os sinais SIGINT e SIGQUIT são retransmitidos apenas quando o comando está sendo executado em um novo pty ou quando o sinal foi enviado por um processo de usuário, e não pelo kernel. Isso impede que o comando receba SIGINT duas vezes cada vez que o usuário pressiona Ctrl+C. Alguns sinais, como SIGSTOP e SIGKILL, não podem ser capturados e, portanto, não serão retransmitidos ao comando. Como regra geral, SIGTSTP deve ser usado em vez de SIGSTOP quando você deseja suspender um comando que está sendo executado por sudo.
Como um caso especial, o sudo não retransmitirá sinais que foram enviados pelo comando que está executando. Isso impede que o comando se mate acidentalmente. Em alguns sistemas, o utilitário reboot(8) envia SIGTERM a todos os processos não de sistema, exceto a si mesmo, antes de reiniciar o sistema. Isso impede que o sudo retransmita o sinal SIGTERM que recebeu de volta para reboot(8), o que poderia então sair antes que o sistema fosse realmente reiniciado, deixando-o em um estado semelhante ao modo de usuário único. Observe, no entanto, que esta verificação se aplica apenas ao comando executado pelo sudo e não a quaisquer outros processos que o comando possa criar. Como resultado, executar um script que chama reboot(8) ou shutdown(8) via sudo pode fazer com que o sistema termine neste estado indefinido, a menos que reboot(8) ou shutdown(8) sejam executados usando a família de funções exec() em vez de system() (que interpõe um shell entre o comando e o processo de chamada).
Plugins
Os plugins podem ser especificados por meio de diretivas de Plugin no arquivo sudo.conf(5). Eles podem ser carregados como objetos compartilhados dinâmicos (em sistemas que os suportam) ou compilados diretamente no binário sudo. Se nenhum arquivo sudo.conf(5) estiver presente ou se ele não contiver nenhuma linha Plugin, o sudo usará sudoers(5) para os plugins de política, auditoria e registro de E/S. Consulte o manual sudo.conf(5) para obter detalhes sobre o arquivo /etc/sudo.conf e o manual sudo_plugin(5) para obter mais informações sobre a arquitetura de plugin sudo.
VALOR DE SAÍDA
Após a execução bem-sucedida de um comando, o status de saída do sudo será o status de saída do programa que foi executado. Se o comando for encerrado devido ao recebimento de um sinal, o sudo enviará o mesmo sinal para si mesmo que encerrou o comando.
Se a opção -l for especificada sem um comando, o sudo sairá com um valor de 0 se o usuário tiver permissão para executar o sudo e autenticar com sucesso (conforme exigido pela política de segurança). Se um comando for especificado com a opção -l, o valor de saída será 0 somente se o comando for permitido pela política de segurança; caso contrário, será 1.
Se houver falha na autenticação, um problema de configuração/permissão ou se o comando especificado não puder ser executado, o sudo sairá com um valor de 1. Neste último caso, a string de erro será impressa no erro padrão. Se o sudo não conseguir stat(2) uma ou mais entradas no PATH do usuário, um erro será impresso no erro padrão. (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 acontecer em circunstâncias normais. A razão mais comum para stat(2) retornar "permissão negada" é se você estiver executando um automounter e um dos diretórios em seu PATH estiver em uma máquina que atualmente não está acessível.
NOTAS DE SEGURANÇA
O sudo tenta ser seguro ao executar comandos externos.
Para evitar a falsificação de comandos, o sudo verifica "." e "" (ambos denotando o diretório atual) por último ao procurar um comando no PATH do usuário (se um ou ambos estiverem no PATH). Dependendo da política de segurança, a variável de ambiente PATH do usuário pode ser modificada, substituída ou passada inalterada para o programa que o sudo executa.
Os usuários nunca devem receber privilégios de sudo para executar arquivos que sejam graváveis pelo usuário ou que residam em um diretório que seja gravável pelo usuário. Se o usuário puder modificar ou substituir o comando, não há como limitar quais comandos adicionais ele pode executar.
Por padrão, 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 a partir desse shell não estarão sujeitos à política de segurança do sudo. O mesmo é verdade para comandos que oferecem escapes de shell (incluindo a maioria dos editores). Se o registro de E/S estiver habilitado, os comandos subsequentes terão sua entrada e/ou saída registrados, mas não haverá registros tradicionais para esses comandos. Devido a isso, deve-se ter cuidado ao conceder aos usuários acesso a comandos por meio do sudo para verificar se o comando não concede inadvertidamente ao usuário um shell root efetivo. Para obter informações sobre maneiras de abordar isso, consulte a seção Prevenindo escapes de shell em sudoers(5).
Para evitar a divulgação de informações potencialmente confidenciais, o sudo desativa os despejos de memória (core dumps) por padrão enquanto está em execução (eles são reativados para o comando que é executado). Essa prática histórica remonta a uma época em que a maioria dos sistemas operacionais permitia que processos com ID de usuário definido despejassem a memória por padrão. Para auxiliar na depuração de travamentos do sudo, você pode querer reativar os despejos de memória definindo "disable_coredump" como falso no arquivo sudo.conf(5) da seguinte forma:
Defina disable_coredump como falso.
Consulte o manual sudo.conf(5) para obter mais informações.
AMBIENTE
O sudo utiliza as seguintes variáveis de ambiente. A política de segurança controla o conteúdo real do ambiente do comando.
EDITOR
Editor padrão a ser usado no modo -e (sudoedit), caso nem SUDO\_EDITOR nem VISUAL estejam definidos.
MAIL
Definido para o spool de e-mail do usuário de destino quando a opção -i é especificada ou quando env\_reset está habilitado no sudoers (a menos que MAIL esteja presente na lista env\_keep).
HOME
Definido para o diretório inicial do usuário de destino quando as opções -i ou -H são especificadas, quando a opção -s é especificada e set\_home está definido em sudoers, quando always\_set\_home está habilitado em sudoers ou quando env\_reset está habilitado em sudoers e HOME não está presente na lista env\_keep.
LOGNAME
Definido para o nome de login do usuário de destino quando a opção -i é especificada, quando a opção set\_logname está habilitada em sudoers ou quando a opção env\_reset está habilitada em sudoers (a menos que LOGNAME esteja presente na lista env\_keep).
PATH
Pode ser substituído pela política de segurança.
SHELL
Usado para determinar o shell a ser executado com a opção -s.
SUDO\_ASKPASS
Especifica o caminho para um programa auxiliar usado para ler a senha se nenhum terminal estiver disponível ou se a opção -A for especificada.
SUDO\_COMMAND
Definido para o comando executado pelo sudo, incluindo quaisquer argumentos. Os argumentos são truncados em 4096 caracteres para evitar um possível erro de execução.
SUDO\_EDITOR
Editor padrão a ser usado no modo -e (sudoedit).
SUDO\_GID
Definido como o ID do grupo do usuário que invocou o sudo.
SUDO\_HOME
Definido como o diretório inicial do usuário que invocou o sudo.
SUDO\_PROMPT
Usado como o prompt de senha padrão, a menos que a opção -p tenha sido especificada.
SUDO\_PS1
Se definido, PS1 será definido para seu valor para o programa que está sendo executado.
SUDO\_TTY
Definido para o dispositivo de terminal do usuário que invocou o sudo, se um estiver presente.
SUDO\_UID
Definido como o ID do usuário do usuário que invocou o sudo.
SUDO\_USER
Definido como o nome de login do usuário que invocou o sudo.
USER
Definido para o mesmo valor de LOGNAME, conforme descrito acima.
VISUAL
Editor padrão a ser usado no modo -e (sudoedit), caso SUDO\_EDITOR não esteja definido.
ARQUIVOS
/etc/sudo.conf Configuração da interface frontal do sudo.
EXEMPLOS
Os exemplos a seguir presumem uma política de segurança configurada corretamente.
Para obter uma listagem de arquivos de um diretório inacessível:
$ sudo ls /usr/local/protected
Para listar o diretório inicial do usuário yaz em uma máquina onde o sistema de arquivos que contém \~yaz não é exportado como root:
$ sudo -u yaz ls ~yaz
Para editar o arquivo index.html como usuário www:
$ sudoedit -u www ~www/htdocs/index.html
Para visualizar os logs do sistema, acessíveis apenas ao root e aos usuários do grupo adm:
$ sudo -g adm more /var/log/syslog
Para executar um editor como jim com um grupo primário diferente:
$ sudoedit -u jim -g audio ~jim/sound.txt
Para desligar uma máquina:
$ sudo shutdown -r +15 "reboot rápido"
Para criar uma lista de uso dos diretórios na partição /home. Os comandos são executados em um subshell para permitir que os comandos ‘cd’ e o redirecionamento de arquivos funcionem.
$ sudo sh -c "cd /home ; du -s * | sort -rn > USAGE"
DIAGNÓSTICOS
As mensagens de erro produzidas pelo sudo incluem:
editar arquivos em um diretório gravável não é permitido
Por padrão, o sudoedit não permite editar um arquivo quando qualquer um dos diretórios pai é gravável pelo usuário que o invoca. Isso evita uma condição de corrida que poderia permitir que o usuário sobrescrevesse um arquivo arbitrário. Consulte a opção sudoedit_checkdir em sudoers(5) para obter mais informações.
editar links simbólicos não é permitido
Por padrão, o sudoedit não segue links simbólicos ao abrir arquivos. Consulte a opção sudoedit_follow em sudoers(5) para obter mais informações.
o UID efetivo não é 0, o sudo está instalado com o bit setuid root?
O sudo não foi executado com privilégios de root. O binário sudo deve ser de propriedade do usuário root e ter o bit set-user-ID definido. Além disso, ele não deve estar localizado em um sistema de arquivos montado com a opção ‘nosuid’ ou em um sistema de arquivos NFS que mapeie o UID 0 para um UID não privilegiado.
o UID efetivo não é 0, o sudo está em um sistema de arquivos com a opção 'nosuid' definida ou em um sistema de arquivos NFS sem privilégios de root?
O sudo não foi executado com privilégios de root. O binário sudo tem o proprietário e as permissões corretos, mas ainda assim não foi executado com privilégios de root. A razão mais comum para isso é que o sistema de arquivos no qual o binário sudo está localizado é montado com a opção ‘nosuid’ ou é um sistema de arquivos NFS que mapeia o UID 0 para um UID não privilegiado.
erro fatal, incapaz de carregar plugins
Ocorreu um erro ao carregar ou inicializar os plugins especificados em sudo.conf(5).
nome de variável de ambiente inválido
Um ou mais nomes de variáveis de ambiente especificados por meio da opção -E continham um sinal de igual (=). Os argumentos para a opção -E devem ser nomes de variáveis de ambiente sem um valor associado.
nenhuma senha foi fornecida
Quando o sudo tentou ler a senha, ele não recebeu nenhum caractere. Isso pode acontecer se nenhum terminal estiver disponível (ou a opção -S for especificada) e a entrada padrão tiver sido redirecionada de /dev/null.
um terminal é necessário para ler a senha
O sudo precisa ler a senha, mas não há nenhum mecanismo disponível para fazê-lo. Os comandos remotos executados via ssh(1) não têm um terminal disponível por padrão; passar a opção -t para ssh(1) fará com que ele aloque um terminal, o que deve permitir que o sudo leia a senha. Para permitir que o sudo execute comandos locais sem um terminal, a opção -S pode ser usada para ler uma senha da entrada padrão ou um auxiliar askpass pode ser configurado por meio do arquivo sudo.conf(5) ou definindo a variável de ambiente SUDO_ASKPASS.
Nenhum diretório temporário gravável encontrado.
O `sudoedit` não conseguiu encontrar um diretório temporário utilizável para armazenar seus arquivos intermediários.
A flag "sem novos privilégios" está definida, o que impede que o `sudo` seja executado como root.
O `sudo` foi executado por um processo que tem a flag "sem novos privilégios" do Linux definida. Isso faz com que o bit set-user-ID seja ignorado ao executar um executável, o que impedirá que o `sudo` funcione. A causa mais provável é executar o `sudo` dentro de um contêiner que define esta flag. Verifique a documentação para ver se é possível configurar o contêiner de forma que a flag não seja definida.
O `sudo` deve ser de propriedade do uid 0 e ter o bit setuid definido.
O `sudo` não foi executado com privilégios de root. O binário `sudo` não tem o proprietário ou as permissões corretas. Ele deve ser de propriedade do usuário root e ter o bit set-user-ID definido.
O `sudoedit` não é suportado nesta plataforma.
É possível executar o `sudoedit` apenas em sistemas que suportam a definição do ID de usuário efetivo.
Tempo limite para leitura da senha.
O usuário não inseriu uma senha antes que o tempo limite da senha (5 minutos por padrão) expirasse.
Você não existe no banco de dados de senhas.
O ID do seu usuário não aparece no banco de dados de senhas do sistema.
Você não pode especificar variáveis de ambiente no modo de edição.
É possível especificar variáveis de ambiente apenas ao executar um comando. Ao editar um arquivo, o editor é executado com o ambiente do usuário inalterado.
VEJA TAMBÉM
su(1), stat(2), login_cap(3), passwd(5), sudo.conf(5), sudo_plugin(5), sudoers(5), sudoers_timestamp(5), sudoreplay(8), visudo(8)
HISTÓRICO
Veja o arquivo HISTORY.md na distribuição do sudo (https://www.sudo.ws/about/history/) para um breve histórico do sudo.
AUTORES
Muitas pessoas trabalharam no sudo ao longo dos anos; esta versão consiste em código escrito principalmente por:
Todd C. Miller
Veja o arquivo CONTRIBUTORS.md na distribuição do sudo (https://www.sudo.ws/about/contributors/) para uma lista exaustiva de pessoas que contribuíram para o sudo.
RESSALVAS
Não há uma maneira fácil de impedir que um usuário obtenha um shell root se esse usuário tiver permissão para executar comandos arbitrários por meio do sudo. Além disso, muitos programas (como editores) permitem que o usuário execute comandos por meio de escapes de shell, evitando assim as verificações do sudo. No entanto, na maioria dos sistemas, é possível impedir escapes de shell com a funcionalidade noexec do plugin sudoers(5).
Não é significativo executar o comando cd diretamente por meio do sudo, por exemplo:
$ sudo cd /usr/local/protected
porque, quando o comando for concluído, o processo pai (seu shell) ainda será o mesmo. A opção `-D` pode ser usada para executar um comando em um diretório específico.
Executar scripts shell por meio do sudo pode expor os mesmos bugs do kernel que tornam os scripts shell com set-user-ID inseguros em alguns sistemas operacionais (se o seu sistema operacional tiver um diretório /dev/fd/, os scripts shell com set-user-ID geralmente são seguros).
BUGS
Se você acredita ter encontrado um bug no sudo, você pode registrar um relatório de bug no banco de dados de bugs do sudo, https://bugzilla.sudo.ws/, ou abrir uma solicitação em https://github.com/sudo-project/sudo/issues. Se você preferir usar e-mail, as mensagens podem ser enviadas para a lista de discussão sudo-workers, https://www.sudo.ws/mailman/listinfo/sudo-workers (pública) ou <_> (privada).
Por favor, não relate vulnerabilidades de segurança através de problemas públicos no GitHub, Bugzilla ou listas de discussão. Em vez disso, relate-as por e-mail para <_>. Você pode criptografar sua mensagem com PGP, se desejar, usando a chave encontrada em https://www.sudo.ws/dist/PGPKEYS.
SUPORTE
Suporte gratuito limitado está disponível através da lista de discussão sudo-users, consulte https://www.sudo.ws/mailman/listinfo/sudo-users para se inscrever ou pesquisar nos arquivos.
AVISO LEGAL
O sudo é fornecido “COMO ESTÁ” e quaisquer garantias expressas ou implícitas, incluindo, mas não se limitando a, as garantias implícitas de comercialização e adequação a um propósito específico, são rejeitadas. Consulte o arquivo LICENSE.md distribuído com o sudo ou https://www.sudo.ws/about/license/ para obter detalhes completos.