Agregar nuevos insultos sudo

Agregar nuevos insultos sudo

Acabo de leer otra vez esa publicación: ¿Dónde se almacenan los insultos de Sudo?

Pero solo tengo unhermosopregunta sobre estos insultos:

¿Podemos agregar otros nuevos agregando otros archivos (en lugar de modificar un encabezado dentro plugins/sudoers)?

Los archivos sudo insults actuales son:

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

Respuesta1

No, no puedes simplemente "agregar" insultos a un directorio y esperar que funcionen. La única forma de agregar nuevos insultos es volver a compilar sudopara que incluya esos insultos en el momento de la compilación.

El enlace de su pregunta (¿Dónde se almacenan los insultos de Sudo?) explica cuáles son esos archivos:

El archivo insults.h contiene instrucciones del compilador sobre cuál de los insultos anteriores incluir en el kernel compilado. De hecho, puedes crear tu propio archivo de insultos, agregar el nombre a insults.h y volver a compilarlo...

Pero TENDRÁS que agregar insultos y luego volver a compilarlos para incluirlos. Sin embargo, hacer esto significará que tendrá que volver a compilar sudosi hay actualizaciones de seguridad, etc. y es probable que esto pueda causar problemas de seguridad en el futuro si no vuelve a compilar con los parches de seguridad incluidos.

Respuesta2

Puede agregar nuevos insultos solo reemplazando insultos existentes de igual o mayor longitud.

De la segunda respuesta en tu enlace están estas frases:

ins_2001.h (insultos de Odisea en el espacio de 2001):

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

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

Encuentra el archivo

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

Bien, ahora sabemos el nombre del archivo. Esa fue la parte fácil.

Copia de seguridad del archivo

Primero haz una copia de seguridad (porque siempre nos acordamos de hacerlo ¿no?):

$ 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

hacer el guión

Luego haz que nuestro script se llame 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

Crear el archivo de datos

Con suerte, no será necesario explicar cómo crear un archivo de texto (pista 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.

Ejecute el script y verifique los 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

información relacionada