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 sudo
para 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 sudo
si 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