새로운 sudo 모욕 추가

새로운 sudo 모욕 추가

방금 그 게시물을 읽었습니다. sudo의 모욕은 어디에 저장됩니까?

하지만 난 그냥아름다운이러한 모욕에 대한 질문:

내부 헤더를 수정하는 대신 다른 파일을 추가하여 새 파일을 추가할 수 있나요 plugins/sudoers?

현재 sudo 모욕 파일은 다음과 같습니다.

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

답변1

아니요, 단순히 디렉토리에 모욕적인 내용을 '추가'하고 그것이 작동할 것이라고 기대할 수는 없습니다. 새로운 모욕을 추가하는 유일한 방법은 sudo컴파일 타임에 해당 모욕을 포함하도록 다시 컴파일하는 것입니다.

귀하의 질문에 대한 링크(sudo의 모욕은 어디에 저장됩니까?) 해당 파일이 무엇인지 설명합니다.

모욕.h 파일에는 컴파일된 커널에 포함할 위의 모욕에 대한 컴파일러 지침이 포함되어 있습니다. 실제로, 자신만의 모욕 파일을 만들고, 모욕.h에 이름을 추가하고, 다시 컴파일할 수 있습니다...

하지만 모욕을 추가한 다음 이를 포함하려면 다시 컴파일해야 합니다. 그러나 이렇게 하면 보안 업데이트 등이 있는 경우 다시 컴파일해야 한다는 의미 sudo이며, 보안 패치가 포함된 상태로 다시 컴파일하지 않으면 향후 보안 문제가 발생할 수 있습니다.

답변2

길이가 같거나 더 긴 기존 모욕을 교체해야만 새 모욕을 추가할 수 있습니다.

링크의 두 번째 답변에는 다음 문구가 있습니다.

ins_2001.h (2001 Space Odyssey 모욕):

/*
 * 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

관련 정보