新しいsudo侮辱を追加する

新しいsudo侮辱を追加する

私はその投稿をもう一度読みました: sudo の侮辱はどこに保存されますか?

でも、私は美しいこれらの侮辱についての質問:

別のファイルを追加することで新しいものを追加できますか (内部のヘッダーを変更する代わりにplugins/sudoers)?

現在の sudo 侮辱ファイルは次のとおりです:

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

答え1

いいえ、ディレクトリに侮辱を単に「追加」するだけでは、機能しません。新しい侮辱を追加する唯一の方法は、sudoコンパイル時にそれらの侮辱が含まれるように再コンパイルすることです。

質問のリンク(sudo の侮辱はどこに保存されますか?) では、それらのファイルが何であるかを説明します。

ファイル insults.h には、コンパイルされたカーネルに上記の侮辱のどれを含めるかに関するコンパイラーの指示が含まれています。実際、独自の侮辱ファイルを作成し、その名前を insults.h に追加して再コンパイルすることもできます...

ただし、侮辱を追加して、それを組み込むために再コンパイルする必要があります。ただし、これを行うと、sudoセキュリティ更新などがある場合に再コンパイルする必要があり、セキュリティ パッチを含めて再コンパイルしないと、将来的にセキュリティ上の問題が発生する可能性があります。

答え2

同じかそれ以上の長さの既存の侮辱を置き換えることによってのみ、新しい侮辱を追加できます。

リンクの 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

関連情報