sudo
パスワードなしでルートを取得するのを防ぐことはできますか?現在のセッションでのみ(例:bashシェルプロセス?)
私はRubybundle
がsudo
。とにかく私はこの素晴らしいツールについて十分に知らないかもしれませんが、再構成せずに一時的に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 bundle
(sudo
ここではコマンドではなくグループ名を表します)、プログラムが呼び出されるbundle
(sudo
コマンド)ときに続行するには、パスワードの入力を求められます。