Como fazer com que as permissões de superusuário durem mais do que usar o sudo?

25

Existe uma maneira pela qual eu possa fazer com que o sudocomando me dê permissões por um período maior que o tempo padrão?

Pode ser uma dor ter que continuar digitando a sudosenha, ao exigir a instalação de muitos pacotes, por isso seria bom se existe um comando ou configuração que possa ser feito para afetar o período de uso.

Diga-me o porquê
fonte
3
Então, ninguém usa sumais? Sempre?
Sr. Lister
9
@MrLister sudo -ie você tem um shell de root, pronto para qualquer um ajuda shoothing-se nos pés durante o máximo de uma só vez como ...
Rmano
1
@ DevRobot, você tem uma fonte para isso? Acho meio difícil acreditar que a Canonical remova um comando tão importante, e não consigo encontrar nada sobre isso no google.
DJMcMayhem
9
O @DevRobot suprecisa de root para ter uma senha. Por padrão, o usuário root do Ubuntu não tem uma senha. Portanto, você não pode sufazer o root. suestá funcionando como pretendido aqui. Tente com qualquer usuário que tenha uma senha.
muru 7/09/15
3
O @muru sudo sufunciona muito bem, embora um pouco repetitivo.
coteyr

Respostas:

27

O comportamento de sudoestá configurado no /etc/sudoersarquivo. Existe a timestamp_timeoutopção responsável por solicitar novamente a senha do usuário após um período específico de tempo.

De homens sudoers

timestamp_timeout
                       Number of minutes that can elapse before sudo will ask
                       for a passwd again.  The timeout may include a frac‐
                       tional component if minute granularity is insufficient,
                       for example 2.5.  The default is 15.  Set this to 0 to
                       always prompt for a password.  If set to a value less
                       than 0 the user's time stamp will never expire.

Para alterar essa configuração, faça o seguinte:

  1. No terminal sudo visudo. visudoé usado especificamente para editar /etc/sudoersarquivos e, por padrão, usa o nanoeditor de texto.
  2. Encontre as linhas que começam com Defaults. Adicione a seguinte linha

    Defaults        timestamp_timeout=x
    

    onde x é a quantidade de minutos que você deseja entre reprompts

  3. Salve o arquivo com Ctrl+O

Sergiy Kolodyazhnyy
fonte
12

De man sudoers:

timestamp_timeout
                       Number of minutes that can elapse before sudo will ask
                       for a passwd again.  The timeout may include a frac‐
                       tional component if minute granularity is insufficient,
                       for example 2.5.  The default is 15.  Set this to 0 to
                       always prompt for a password.  If set to a value less
                       than 0 the user's time stamp will never expire.  This
                       can be used to allow users to create or delete their
                       own time stamps via “sudo -v” and “sudo -k” respec‐
                       tively.

Como você pode ver, o tempo limite padrão sudoé de 15 minutos. Você pode alterar esse valor em /etc/sudoers.

Você não edita diretamente /etc/sudoers. Em vez disso, use visudo-o.

De man visudo:

     visudo edits the sudoers file in a safe fashion, analogous to vipw(8).
     visudo locks the sudoers file against multiple simultaneous edits, pro‐
     vides basic sanity checks, and checks for parse errors.  If the sudoers
     file is currently being edited you will receive a message to try again
     later.

Então, digite sudo visudoum terminal que abrirá o /etc/sudoersarquivo no nanoeditor de texto.

Procure esta linha:

Defaults    env_reset

E adicione onde X é o tempo que você deseja definir em minutos.timestamp_timeout=X

Então, como um exemplo:

Defaults    env_reset,timestamp_timeout=5

Se você especificar 0, sempre será solicitada a senha. Se você especificar um valor negativo, o tempo limite nunca expirará.

Uma vez feito, salve e saia.

Consulte RootSudoTimeout

Ron
fonte
Bata-me por 29 segundos =)
Sergiy Kolodyazhnyy
1
Você é bom -_- b Estou em um laptop. . . Talvez eu precise de mais café
Sergiy Kolodyazhnyy
Você também pode definir, por exemplo, -1 como tempo limite - se nunca desejar que um prompt de senha seja acionado.
Michał Żywiecki
8

Tente isso.

  1. Execute o seguinte comando em um terminal:

    sudo visudo
    
  2. Role para baixo até a linha que se parece com isso:

    Defaults        env_reset
    
  3. Altere para, por exemplo:

    Defaults        env_reset,timestamp_timeout=30
    

Altere 30 para o tempo, em minutos, que você deseja aguardar antes de atingir o tempo limite. Você também pode alterá-lo para 0 se desejar um prompt de senha toda vez que executar o sudo, ou -1 se nunca desejar um prompt de senha. Pressione Ctrl+ Xpara concluir a edição, Y para salvar as alterações e Enter para sair.

Aqui está a fonte: http://lifehacker.com/make-sudo-sessions-last-longer-in-linux-1221545774

Michał Żywiecki
fonte
5

Você pode editar o /etc/sudoersarquivo (com sudo visudo: cuidado) e adicionar uma linha como

Defaults:myname timestamp_timeout=15 

onde mynameestá seu ID de usuário. O valor do tempo limite é em minutos. Você pode usar um valor de -1 para nunca expirar e, em seguida, digitar sudo -kpara eliminar a autenticação, e precisará de uma senha novamente.

Ou você pode adicionar uma entrada para dizer que um comando específico não precisa de uma senha.

meuh
fonte
1
+1 por mencionar sudo -ka invalidação manual da autenticação em cache.
Byte Commander
5

Não acredito que o comando mais simples:

sudo -s

não é mencionado aqui. A opção "-s" fornece um console com permissões de root, que dura até você sair dele. Não há necessidade de mexer nas configurações padrão.

Oliver Friedrich
fonte
1
Por que isso foi votado?
coteyr
3
Não diminuí a votação, mas isso derrota uma vantagem do uso sudo: todos os comandos são registrados (para que você possa ver o que fez). Você perde esse log ao abrir um shell raiz.
guntbert 9/09/15
1
@guntbert certamente tem todos os comandos registrados, mas na história do usuário root.
Oliver Friedrich
@ BeowulfOF não necessariamente - o histórico do bash é algo completamente diferente do log do sistema.
guntbert
1
Realmente, @guntbert, se você usar o log de autenticação como esse, terá problemas diferentes.
Oliver Friedrich
1

Até agora, todas as outras respostas parecem estar centradas na alteração do tempo limite padrão por quanto tempo antes que você precise digitar sua senha novamente sudo. No entanto, se você quiser apenas executar comandos como root sem anexar todos os comandos sudo, poderá obter um shell raiz com:

sudo -i

ou

sudo bash

ou

sudo <your preferred shell here>

Embora tudo isso inicie um único processo como root, o único processo em questão é um shell que permitirá que você inicie quantos outros processos desejar como root sem precisar digitar sudoou senha. :)

Claro, com grande poder vem uma grande responsabilidade, não faça coisas estúpidas, etc.

reirab
fonte
1
TENHA MUITO CUIDADO COM ISSO. Com efeito, você estará executando um shell raiz.
hmayag 7/09/2015
4
Por que isso é prejudicado?
coteyr
@hmayag Sim, se você iniciar um shell raiz, estará executando um shell raiz. Daí a razão do aviso no final.
reirab 7/09/15
@coteyr Possivelmente pelo mesmo motivo que a resposta do BeoWulf.
guntbert
1

Depois de ver muitas perguntas dos usuários que modificaram os arquivos de configuração e ficaram confusas sobre o motivo de suas alterações serem substituídas após a atualização do pacote, observarei que, se você deseja modificar timestamp_timeout, é melhor fazê-lo criando um arquivo em /etc/sudoers.dvez de modificar /etc/sudoersdiretamente.

Então você deveria fazer

sudo visudo -f /etc/sudoers.d/timeout

(o nome do arquivo pode ser o que você quiser, desde que não contenha um ponto ( .) nem termine com um til ( ~)). Em vez de abrir /etc/sudoersno seu editor de escolha, ele será aberto /etc/sudoers.d/timeout, normalmente como um arquivo vazio, pois não existe. Coloque o seu

Defaults timestamp_timeout=X

nele e salve como de costume. Então, se uma nova versão for lançada /etc/sudoers, você não precisará escolher entre instalar a versão mais recente ou manter as alterações - você terá as duas automaticamente.

Fkraiem
fonte
1

Se você estiver procurando por uma solução que não altere o arquivo de configuração , por exemplo, quando desejar que o token dure mais por uma sessão específica ou que seja aplicado somente após uma ação explícita, tente o seguinte:

# Work as is with Bash 4.1.2(1)-release and later, this might require some adaptation for other shells
(while [ true ]; do sudo -v; sleep $((60*4)); done)&

Basicamente, o código anterior atualiza o token sudo a cada 4 minutos , por meio de um processo iniciado em segundo plano.

De fato, de acordo com o sudomanual: "o tempo limite padrão do prompt de senha para a política de segurança dos sudoers é de 5 minutos ". Portanto, dependendo da política específica do sistema, você pode ajustar a quantidade de tempo que o loop passa no modo de suspensão entre dois ciclos.

escravo
fonte