Sim. Como a sudo
de autorização está vinculada a uma combinação de seu nome de usuário e tty e um timestamp, qualquer comando executado a partir desse shell poderia transmitir a capacidade de elevar privilégios via sudo sem digitar sua senha (supondo que você não tenha timestamp_timeout=0
no seu arquivo /etc/sudoers
).
Contanto que esses scripts sejam executados em qualquer tempo que você tenha definido (padrão = 15 minutos).
arquivo test.sh:
#!/bin/bash
echo "test: \$SHLVL is: $SHLVL"
echo "test: I am $(id) on $(tty)"
echo "test: with sudo I am $(sudo id) on $(tty)"
/bin/bash -l ./sudotest.sh
arquivo sudotest.sh:
#!/bin/bash
echo "sudotest: \$SHLVL is: $SHLVL"
echo "sudotest: I am $(id) on $(tty)"
echo "sudotest: with sudo I am $(sudo id) on $(tty)"
resulta em:
test: $SHLVL is: 2
test: I am uid=1000(tim) gid=1000(tim) groups=1000(tim) on /dev/pts/7
[sudo] password for tim:
test: with sudo I am uid=0(root) gid=0(root) groups=0(root) on /dev/pts/7
sudotest: $SHLVL is: 3
sudotest: I am uid=1000(tim) gid=1000(tim) groups=1000(tim) on /dev/pts/7
sudotest: with sudo I am uid=0(root) gid=0(root) groups=0(root) on /dev/pts/7
Nesse caso, a primeira chamada para sudo estava em test.sh
, mas sudotest.sh
foi não chamado com sudo, mas como meu nome de usuário e tty ainda são os mesmos, sudo reconheceu que processo como sendo elegível para privilégios elevados e não solicitou uma senha durante a execução de sudotest.sh
.
E se eu executar novamente depois de alguns minutos, mas antes do tempo limite:
test: $SHLVL is: 2
test: I am uid=1000(tim) gid=1000(tim) groups=1000(tim) on /dev/pts/7
test: with sudo I am uid=0(root) gid=0(root) groups=0(root) on /dev/pts/7
sudotest: $SHLVL is: 3
sudotest: I am uid=1000(tim) gid=1000(tim) groups=1000(tim) on /dev/pts/7
sudotest: with sudo I am uid=0(root) gid=0(root) groups=0(root) on /dev/pts/7
Eu não sou solicitado. E eu não faria isso até o limite de tempo timestamp_timeout
passar.
Você pode ver que o tty permanece o mesmo durante as execuções, e que SHLVL
está incrementando, porque cada processo de shell executado pelo script é um nível mais profundo do shell de chamada. Meu shell interativo, SHLVL = 1
, chama test.sh
, que recebe SHLVL = 2
, que chama sudotest.sh
, que recebe SHLVL = 3
.
Uma possível ressalva para isso é se você tiver uma versão mais antiga do sudo, em que a opção tty_tickets
não está definida, o que remove a granularidade username + tty para sessões sudo e limita a granularidade somente ao nome de usuário e registro de data e hora. p>
Outras opções de sudoers
também podem ter impacto, como requiretty
.
Desde que as chamadas subseqüentes a sudo
dos scripts chamados pelo shell original sejam emitidas dentro do limite de tempo na retenção de credenciais do sudo, elas poderão se elevar como o mesmo usuário. Quando o limite de tempo estiver esgotado, eles precisarão ter uma maneira de inserir novamente a senha se você quiser que eles continuem a elevar os privilégios. (ou você pode alterar o tempo limite ou desativar os requisitos de senha para um usuário ou um comando ... mas esses estão fora do escopo para essa resposta).