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