Ich habe diesen Beitrag gerade ein anderes Mal gelesen: Wo werden die Beleidigungen von sudo gespeichert?
Aber ich habe nur eineSchönFrage zu diesen Beleidigungen:
Können wir neue hinzufügen, indem wir weitere Dateien hinzufügen (anstatt einen Header darin zu ändern plugins/sudoers
)?
Aktuelle Sudo-Beleidigungsdateien sind:
ins_2001.h
ins_classic.h
ins_csops.h
ins_goons.h
insults.h
Antwort1
Nein, Sie können nicht einfach Beleidigungen zu einem Verzeichnis „hinzufügen“ und erwarten, dass sie funktionieren. Die einzige Möglichkeit, neue Beleidigungen hinzuzufügen, besteht darin, das Programm neu zu kompilieren, sudo
sodass diese Beleidigungen zur Kompilierzeit einbezogen werden.
Der Link aus Ihrer Frage (Wo werden die Beleidigungen von sudo gespeichert?) erklärt, was diese Dateien sind:
Die Datei „insulties.h“ enthält Compileranweisungen, welche der oben genannten Beleidigungen in den kompilierten Kernel aufgenommen werden sollen. Sie können tatsächlich Ihre eigene „insulties“-Datei erstellen, den Namen zu „insulties.h“ hinzufügen und neu kompilieren …
Aber Sie MÜSSEN Beleidigungen hinzufügen und dann neu kompilieren, um sie einzuschließen. Dies bedeutet jedoch, dass Sie neu kompilieren müssen, sudo
wenn Sicherheitsupdates usw. verfügbar sind, und es ist wahrscheinlich, dass dies später zu Sicherheitsproblemen führen kann, wenn Sie nicht mit enthaltenen Sicherheitspatches neu kompilieren.
Antwort2
Sie können neue Beleidigungen nur hinzufügen, indem Sie vorhandene Beleidigungen gleicher oder größerer Länge ersetzen.
Aus der zweiten Antwort in Ihrem Link stammen diese Sätze:
ins_2001.h (Beleidigungen aus „Odyssee im Weltraum“ 2001):
/* * HAL insults (paraphrased) from 2001. */ "Just what do you think you're doing Dave?", "It can only be attributed to human error.",
Suchen Sie die Datei
$ grepall "Just what do you think you're doing Dave?"
Binary file /usr/lib/sudo/sudoers.so matches
OK, wir kennen jetzt den Dateinamen. Das war der einfache Teil.
Sichern Sie die Datei
Erstellen Sie zunächst ein Backup (denn daran denken wir immer, nicht wahr?):
$ 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
Erstellen Sie das Skript
Dann erstellen Sie unser Skript mit dem Namen 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
Erstellen der Datendatei
Hoffentlich muss nicht erklärt werden, wie man eine Textdatei erstellt (Hinweis 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.
Führen Sie das Skript aus und überprüfen Sie die Ergebnisse
$ 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