현재 쉘에 대해 내 자신의 sudo를 비활성화하시겠습니까?

현재 쉘에 대해 내 자신의 sudo를 비활성화하시겠습니까?

sudo비밀번호 없이 루트를 얻는 것을 방지할 수 있습니까 ?현재 세션에서만(예: bash 쉘 프로세스?)

나는 Ruby bundlesudo. 어쨌든 제가 이 훌륭한 도구에 대해 충분히 알지 못할 수도 있지만 재구성하지 않고 일시적으로 sudo의 축복을 철회할 수 있는 방법이 있습니까 /etc/sudoers*?

편집하다: 현재 NOPASSWDsudo그룹을 활성화했으며 이 그룹의 구성원입니다. NOPASSWD를 포기하는 것보다 현재 프로세스가 그렇게 할 수 없게 만드는 편이 낫습니다 sudo(예: 이와 같은 것을 사용하여 ).newgrp

답변1

$ 별칭 sudo="에코 수돈"

$ sudo su -루트

sudon't su -root

/usr/bin/sudo와 같은 전체 경로를 호출하지 않는 한 호출되는 곳에서만 sudo가 중단됩니다.

답변2

setgroups(2)귀하의 아이디어는 이 그룹을 제외한 getgroups(2)모든 현재 그룹(아래)에 대해 t를 수행하여 sudo효과적으로 제거하는 작은 "set-userID-root" 프로그램을 사용하여 쉽게 구현할 수 있습니다 . set-userID-root setgroups(2)는 권한 있는 작업이므로 필요합니다 .

Linux에서는 set-userID-root 대신 capabilities(7)실행 파일을 setcap(8)-ed 로 만들 수 있으므로 훨씬 더 간단할 수 있습니다 . CAP_SETGID당시에는 이러한 전문 프로그램은 를 capset(2)실행할 수 있는 기능 자체만 있으면 충분했습니다 setgroups(2).

반면에, 하지만,실수로 그룹 멤버십을 삭제/변경하지 않도록 주의하세요., 그룹의 구성원으로서 우리도 익숙하기 때문입니다.줄이다특별히 배치된 ACL을 통해 파일 및 디렉터리와 같은 액세스 권한.

즉, (Linux 관련) setpriv(1)명령(시스템에서 사용 가능한 경우)을 활용하면 아래와 같이 쉘 함수로 만들어진 개념 증명을 활용할 수 있습니다. 여기서 저는 sudo그 자체를 사용합니다(사용자가 가정 NOPASSWD). -userID -root 활성자":

# NOTE: this one uses Bash facilities
dropgrp() {
    local groups grp="${1:?Specify group to drop}" IFS=; shift
    IFS=: read -ra grent < <(getent group "$grp")
    groups=(${GROUPS[@]/${grent[2]}})
    IFS=,; sudo setpriv --reuid "$EUID" --regid "$GROUPS" --groups "${groups[*]}" "$@"
}

그런 다음 실행하고 $ dropgrp sudo bundle( sudo여기서 는 명령이 아닌 그룹 이름을 나타냄) bundle프로그램이 호출 sudo(명령)할 때 계속하려면 암호를 묻는 메시지가 표시됩니다.

관련 정보