sudo
비밀번호 없이 루트를 얻는 것을 방지할 수 있습니까 ?현재 세션에서만(예: bash 쉘 프로세스?)
나는 Ruby bundle
가 sudo
. 어쨌든 제가 이 훌륭한 도구에 대해 충분히 알지 못할 수도 있지만 재구성하지 않고 일시적으로 sudo의 축복을 철회할 수 있는 방법이 있습니까 /etc/sudoers*
?
편집하다: 현재 NOPASSWD
이 sudo
그룹을 활성화했으며 이 그룹의 구성원입니다. 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
(명령)할 때 계속하려면 암호를 묻는 메시지가 표시됩니다.