Sudo valida argumentos de linha de comando via expressão regular incorretamente

Sudo valida argumentos de linha de comando via expressão regular incorretamente

Digamos que temos dois usuários: Alex e Alexa. Queremos permitir que alex seja executado htopcomo root para ver as estatísticas de uso do disco, mas não queremos que eles vejam os processos de outros usuários que o root pode fazer. Então é necessário permitir que eles executem htopcom o -usinalizador sendo seu próprio nome de usuário(nota importante: como @HBruijn mencionou, especificar o sinalizador do usuário htopnão impede que o executor altere o filtro do usuário pela tecla U; vamos fingir que o sinalizador limita o executor para ilustrar o problema). Mas também precisamos verificar se o último -uargumento especificado é alex, além de não querermos forçá-lo a ser o último argumento especificado. O regexp vem da seguinte forma:

^.*(--user=alex|-u alex)\b((?!-u).)*$
  • ^indica o início da string
  • (--user=alex|-u alex)- o grupo de captura para o -uparâmetro
  • \b- limite da palavra (então Alex não pôde especificar -u alexa)
  • ((?!-u).)*- lookahead negativo que nega qualquer -upassagem após a válida ( -u alex) ter sido passada

E nós escrevemos no /etc/sudoersarquivo:

echo "alex ALL=(ALL) NOPASSWD: /usr/bin/htop ^.*(--user=alex|-u alex)\b((?!-u).)*$" >> /etc/sudoers

No entanto, quando Alex tenta executar um comando normal, sudo os nega:

$ sudo /usr/bin/htop -u alex 
[sudo] password for alex: 
Sorry, user alex is not allowed to execute '/usr/bin/htop -u alex' as root on machine.

Ao verificar o regexp por meio egrep(a documentação do sudo afirma que é semelhante à forma como valida strings por meio do regexp), ele funciona conforme o esperado:

$ echo '-u alex' | egrep '^.*(--user=alex|-u alex)\b((?!-u).)*$'
-u alex

O que causa esse comportamento do sudo ignorando essa correspondência? Usando Ubuntu 22.04, Sudo 1.9.14p3.

informação relacionada