Como reutilizar o sudo para uma série de comandos em um script bash

4

Eu tenho um script que abre várias janelas de terminal executando iftop para observar várias atividades de portas.

Cada terminal que se abre pede-me a senha do sudo ... o que é um pouco doloroso, considerando que existem 5 terminais em geral.

Então, minha pergunta é: como eu digito a senha sudo uma vez e todas as janelas são executadas usando essa permissão, em vez de digitá-las por janela?

#!/bin/bash

TITLE="${USER}@${HOSTNAME}"' iftop (h=help, L=lin/log scales, t=line display mode, T=line totals, p=port display)'
gnome-terminal --title "$TITLE" -e 'sh -c "sudo iftop -P -f \"port 22\""' --hide-menubar --zoom=0.85

TITLE="${USER}@${HOSTNAME}"' iftop (h=help, L=lin/log scales, t=line display mode, T=line totals, p=port display)'
gnome-terminal --title "$TITLE" -e 'sh -c "sudo iftop -P -f \"port 33 or port 44\""' --hide-menubar --zoom=0.85

TITLE="${USER}@${HOSTNAME}"' iftop (h=help, L=lin/log scales, t=line display mode, T=line totals, p=port display)'
gnome-terminal --title "$TITLE" -e 'sh -c "sudo iftop -P -f \"(port 55) or (port 66)\""' --hide-menubar --zoom=0.85 

Eu tentei executar o script inteiro como sudo e isso resulta em todos os terminais sendo abertos também sendo um terminal sudo. O que eu preciso é de um terminal regular executando o sudo iftop .

    
por The Coordinator 11.02.2018 / 07:29

1 resposta

5

O timestamp_type em /etc/sudoers ou /etc/sudoers.d/* está definido como tty ou ppid ? tty é o padrão de acordo com a página de manual do sudo :

timestamp_type - sudoers uses per-user time stamp files for credential caching. The timestamp_type option can be used to specify the type of time stamp record used. It has the following possible values:

global A single time stamp record is used for all of a user's login sessions, regardless of the terminal or parent process ID. An additional record is used to serialize password prompts when sudo is used multiple times in a pipeline, but this does not affect authentication.

ppid A single time stamp record is used for all processes with the same parent process ID (usually the shell). Commands run from the same shell (or other common parent process) will not require a password for timestamp_timeout minutes (15 by default). Commands run via sudo with a different parent process ID, for example from a shell script, will be authenticated separately.

tty One time stamp record is used for each terminal, which means that a user's login sessions are authenticated separately. If no terminal is present, the behavior is the same as ppid. Commands run from the same terminal will not require a password for timestamp_timeout minutes (15 by default).

The default value is tty.

This setting is only supported by version 1.8.21 or higher.

Se estiver definido como tty ou ppid , isso explica por que você está sendo solicitado a fornecer uma senha todas as vezes. Cada comando sudo que você está executando está sendo executado em um gnome-terminal separado e, portanto, um tty AND diferente de um PID pai diferente.

Parece que global é a única configuração que permitirá o que você deseja.

Se isso não ajudar, qual é a sua configuração de timestamp_timeout ? Está definido para 0 ? O padrão deve ser de 15 minutos.

Verifique também as outras configurações de timestamp* ( timestampdir , timestampowner ). Eles poderiam causar este problema se timestampdir (o padrão em meu sistema sid debian for / run / sudo / ts ) não existir ou não for rwX por timestampowner (raiz padrão ).

sudo registrará uma mensagem de erro descritiva via syslog e enviará um e-mail ao administrador (root) se essas configurações resultarem em erro.

Uma outra opção é editar /etc/sudoers para que seu usuário possa executar iftop sem precisar digitar sua senha. por exemplo,

yourusernamehere ALL= NOPASSWD: /usr/sbin/iftop

Veja Como executar um programa específico como root sem um prompt de senha? para obter mais detalhes sobre isso.

    
por 11.02.2018 / 08:40