現在のシェルに対して自分のsudoを無効にしますか?

現在のシェルに対して自分のsudoを無効にしますか?

sudoパスワードなしでルートを取得するのを防ぐことはできますか?現在のセッションでのみ(例:bashシェルプロセス?)

私はRubybundlesudo。とにかく私はこの素晴らしいツールについて十分に知らないかもしれませんが、再構成せずに一時的にsudoの祝福を撤回する方法はありますか/etc/sudoers*

編集する:現在NOPASSWDこのsudoグループを有効にしており、このグループのメンバーです。 NOPASSWDを放棄するよりも、現在のプロセスがそうすることができないようにするほうが良いですsudo(たとえば、このようなものを使用して)。newgrp

答え1

$エイリアス sudo="エコスドン"

$ sudo su -root

sudon't su -root

/usr/bin/sudoのようなフルパスを呼び出さない限り、呼び出された場所でのみsudoが中断されます。

答え2

setgroups(2)あなたのアイデアは、このグループを除くすべての現在のgetgroups(2)グループ(下)に対してtを実行してsudo効果的に削除する小さな「set-userID-root」プログラムを使用して簡単に実装できます。 set-userID-rootsetgroups(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 bundlesudoここではコマンドではなくグループ名を表します)、プログラムが呼び出されるbundlesudoコマンド)ときに続行するには、パスワードの入力を求められます。

関連情報