다른 편집자와 함께 sudoer를 편집할 가능성을 줄이려면 어떻게 해야 합니까?

다른 편집자와 함께 sudoer를 편집할 가능성을 줄이려면 어떻게 해야 합니까?

예,추천하다sudoers 파일을 편집 합니다 visudo. 하지만 입소문으로만 추천받는 것에는 만족하지 않습니다. 파일을 잘못된 방식으로 편집하면 쉘이 경고하거나 확인을 요청할 수 있습니까?

나는 다음과 같은 상황을 포착하고 싶다.

$ sudo vim /etc/sudoers
/etc $ sudo nano sudoers
$ sudo cp what/ever/file /etc/sudoers.d/a

답변1

참고: 저는 다음 작업을 수행하지 않습니다. 이는 안전하지 않으며 시스템을 손상시킬 수 있는 다른 가능성도 충분히 있습니다. 왜 이것을 선택합니까?

큰 힘에는 sudo큰 책임이 따른다.


그러나 파일 root편집을 방지하려면 다음을 실행하여 파일을 불변으로 만들 수 있습니다.sudoers

sudo chattr +i /etc/sudoers

.rc그런 다음 또는 파일 에 다음 별칭을 추가합니다. .profile.bashrc:

alias visudo="sudo chattr -i /etc/sudoers; sudo visudo; sudo chattr +i /etc/sudoers;"
alias sudo='sudo '

먼저 불변 플래그를 재설정한 다음 실행 하고 마지막으로 다시 실행하도록 visudo명령을 변경합니다 . 바라보다visudoimmutable여기두 번째 별칭이 필요한 이유는 무엇입니까?

리소스 파일은 정상적으로 사용할 수 있지만 쉘을 다시 시작한 후에 sudo visudo는 편집할 수 없습니다 .


visudo이는 일반적인 아이디어일 뿐이며 아래 파일의 기타 매개변수를 활성화하려면 개선이 필요합니다 /etc/sudoers.d/. 별칭 대신 함수나 스크립트를 사용할 수도 있습니다.


이는 실제로 안전하지 않습니다.

  • visudo실행할 때 파일이 돌로 설정되지 않습니다.
  • 모든 sudo사용자는 chattr -i언제든지 다음을 실행하여 불변 플래그를 설정 해제 할 수 있습니다.
  • 당신은 어떤 일을 하기 전에 생각하지 않고 그것을 할 수 있도록 자신을 훈련합니다

답변2

나는 여기에 어색한 해결책을 제시합니다. 저는 zsh 위젯(명령줄 플러그인)인 zsh를 사용하고 있습니다.

zsh는 명령이 "cd" 또는 "visudo"가 아닌 이상 현재 디렉터리가 sudoders.d이거나 명령줄에 가 포함되어 있으면 경고를 표시합니다.sudoers

이 코드는 vim, nano, cp, rm, cat > 및 기타 시나리오를 다룹니다.

당신이 더 잘할 수 있다고 확신하지만 이것이 기본 아이디어입니다.

#! /usr/bin/zsh


function catchEditSudoers {
    if ([[ $BUFFER =~ .*sudoers.* ]] && [[ ! $BUFFER =~ .*visudo.* ]] && [[ ! $BUFFER =~ "cd .*" ]]) ||
        ([[ $PWD =~ ".*/sudoers.d" ]] && [[ ! $BUFFER =~ .*visudo.* ]] && [[ ! $BUFFER =~ "cd .*" ]]); then
        zle -R "It's recommanded to use visudo to edit sudoers. Continue anyway? (y/n)"
        read -k reply
        if [[ $reply == y ]]; then
            zle accept-line
        else
            zle send-break
        fi

    else
        zle accept-line
    fi
}

zle -N catchEditSudoers_widget catchEditSudoers

bindkey '^M' catchEditSudoers_widget

.zshrc에서 파일을 가져옵니다.

관련 정보