Я только что прочитал еще раз этот пост: Где хранятся оскорбления sudo?
Но у меня просто естькрасивыйвопрос об этих оскорблениях:
Можем ли мы добавить новые, добавив другие файлы (вместо изменения заголовка внутри plugins/sudoers
)?
Текущие файлы оскорблений sudo:
ins_2001.h
ins_classic.h
ins_csops.h
ins_goons.h
insults.h
решение1
Нет, вы не можете просто «добавить» оскорбления в каталог и ожидать, что они сработают. Единственный способ добавить новые оскорбления — перекомпилировать sudo
так, чтобы он включил эти оскорбления во время компиляции.
Ссылка из вашего вопроса (Где хранятся оскорбления sudo?) объясняет, что это за файлы:
Файл abuses.h содержит инструкции компилятору о том, какие из вышеперечисленных оскорблений следует включить в скомпилированное ядро. Действительно, вы можете создать свой собственный файл оскорблений, добавить его имя в abuses.h и перекомпилировать...
Но вам НУЖНО будет добавить оскорбления и затем перекомпилировать, чтобы включить их. Однако, делая это, вам придется перекомпилировать, sudo
если есть обновления безопасности и т. д., и, скорее всего, это может вызвать проблемы безопасности в будущем, если вы не перекомпилируете с включенными исправлениями безопасности.
решение2
Добавлять новые оскорбления можно только путем замены существующих оскорблений такой же или большей длины.
Из второго ответа по вашей ссылке есть такие фразы:
ins_2001.h (оскорбления из «Космической одиссеи 2001 года»):
/* * HAL insults (paraphrased) from 2001. */ "Just what do you think you're doing Dave?", "It can only be attributed to human error.",
Найти файл
$ grepall "Just what do you think you're doing Dave?"
Binary file /usr/lib/sudo/sudoers.so matches
Хорошо, теперь мы знаем имя файла. Это была легкая часть.
Сделайте резервную копию файла
Сначала сделайте резервную копию (ведь мы всегда помним об этом, верно?):
$ 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
Сделать сценарий
Затем назовем наш скрипт 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
Создать файл данных
Надеюсь, не нужно объяснять, как создать текстовый файл (подсказка: 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.
Запустите скрипт и проверьте результаты.
$ 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