Adicionando novos insultos sudo

Adicionando novos insultos sudo

Acabei de ler outra vez esse post: Onde os insultos do sudo são armazenados?

Mas eu só tenho umlindopergunta sobre esses insultos:

Podemos adicionar novos adicionando outros arquivos (em vez de modificar um cabeçalho dentro plugins/sudoers)?

Os arquivos atuais de insultos do sudo são:

  • ins_2001.h
  • ins_classic.h
  • ins_csops.h
  • ins_goons.h
  • insults.h

Responder1

Não, você não pode simplesmente “adicionar” insultos a um diretório e esperar que funcionem. A única maneira de adicionar novos insultos é recompilar sudopara incluir esses insultos em tempo de compilação.

O link da sua pergunta (Onde os insultos do sudo são armazenados?) explica o que são esses arquivos:

O arquivo insults.h contém instruções do compilador sobre quais dos insultos acima incluir no kernel compilado. Na verdade, você poderia criar seu próprio arquivo de insultos, adicionar o nome a insults.h e recompilar...

Mas você PRECISARÁ adicionar insultos e recompilar para incluí-los. Fazer isso, no entanto, significará que você terá que recompilar sudose houver atualizações de segurança, etc. e é provável que isso possa causar problemas de segurança no futuro se você não recompilar com os patches de segurança incluídos.

Responder2

Você pode adicionar novos insultos apenas substituindo os insultos existentes de duração igual ou superior.

Da segunda resposta em seu link estão estas frases:

ins_2001.h (insultos da Odisseia no Espaço de 2001):

/*
 * HAL insults (paraphrased) from 2001.
 */

"Just what do you think you're doing Dave?",
"It can only be attributed to human error.",

Encontre o arquivo

$ grepall "Just what do you think you're doing Dave?"
Binary file /usr/lib/sudo/sudoers.so matches

OK, agora sabemos o nome do arquivo. Essa era a parte fácil.

Faça backup do arquivo

Primeiro faça um backup (porque a gente sempre lembra de fazer isso né?):

$ sudo cp -a /usr/lib/sudo/sudoers{.so,.so.bak}

$ ll /usr/lib/sudo/sudoers{.so,.so.bak}
-rw-r--r-- 1 root root 316768 Oct 11 06:01 /usr/lib/sudo/sudoers.so
-rw-r--r-- 1 root root 316768 Oct 11 06:01 /usr/lib/sudo/sudoers.so.bak

Faça o roteiro

Então faça nosso script chamado sudoinsults:

#!/bin/bash

# NAME: sudoinsult
# PATH: $HOME/askubuntu/
# DESC: For: https://askubuntu.com/questions/1188779/adding-new-sudo-insults
# DATE: November 14, 2019.

# NOTE: Change sudo insults to personal favorites

# Build array of insults from disk
IFS=$'\n' Arr=( $(cat sudoinsult.txt) )

# Initialize variables
File="/usr/lib/sudo/sudoers.so"
upper=0
Spaces="                                                                     "
Spaces="$Spaces""                                                            "

[[ ${#Arr[@]} -gt 0 ]] && upper=$(( ${#Arr[@]} - 1 ))
[[ $upper -gt 0 ]] && for (( i=0; i<upper; i=i+2 )) ; do
    Search="${Arr[i]}"      # Move array indices to named variables
    Replace="${Arr[i+1]}"   #  for a simpler life.

    printf "Replacing: '%s'\n     With: '%s'\n" "$Search" "$Replace"
    if [[ "${#Search}" -lt "${#Replace}" ]] ; then
        echo "Replacement can't be longer than original"
        continue
    elif [[ "${#Search}" -lt 8 ]] ; then
        echo "Original insult cannot be less than 8 characters"
        continue
    elif [[ "${#Search}" -gt "${#Spaces}" ]] ; then
        echo "Original insult cannot be longer than ${#Spaces} characters"
        continue
    elif [[ "${#Replace}" -lt 1 ]] ; then
        echo "Replacement insult cannot be less than 1 character"
        continue
    elif ! grep "$Search" "$File" >/dev/null ; then
        echo "Search insult not found in $File"
        continue
    fi

    # Pad replacement with spaces as needed.
    ReplaceS="$Replace${Spaces:0:$((${#Search} - ${#Replace}))}"
    [[ "${#ReplaceS}" -ne "${#Search}" ]] && \
        { echo Internal error ReplaceS different length than Search; exit; }

# Looks wrong: https://unix.stackexchange.com/a/354493/200094
#y="${y:0:40}${forty:0:$((40 - ${#y}))}"
#echo "'${y}'"
    sed -i "s/$Search/$ReplaceS/" "$File"
    (( InsultCount++ ))

done

if [[ $upper -gt 0 ]] ; then
    echo "$InsultCount Insults replaced."
else
    echo "Insult file (sudoinsult.txt) does not exist or only has one line." >2
fi

Crie o arquivo de dados

Esperamos que não seja necessário explicar como criar um arquivo de texto (dica gedit:)

$ cat sudoinsult.txt

Just what do you think you're doing Dave?
Just what do you think you're doing Rick?
It can only be attributed to human error.
It can only be attributed to the beer.

Execute o script e verifique os resultados

$ sudo ./sudoinsult

Replacing: 'Just what do you think you're doing Dave?'
     With: 'Just what do you think you're doing Rick?'
Replacing: 'It can only be attributed to human error.'
     With: 'It can only be attributed to the beer.'
2 Insults replaced.

$ ll /usr/lib/sudo/sudoers{.so,.so.bak}

-rw-r--r-- 1 root root 316768 Nov 14 17:43 /usr/lib/sudo/sudoers.so
-rw-r--r-- 1 root root 316768 Oct 11 06:01 /usr/lib/sudo/sudoers.so.bak

$ grep "Just what do you think you're doing Rick?" /usr/lib/sudo/sudoers.so

Binary file /usr/lib/sudo/sudoers.so matches

$ grep "It can only be attributed to the beer." /usr/lib/sudo/sudoers.so

Binary file /usr/lib/sudo/sudoers.so matches

informação relacionada