ユーザーが入力したコマンドが適用される前にこれを承認する方法はありますか?
たとえば、ユーザーがコマンドを入力するとコマンドは実行されず、ユーザーがcp file1 file2
入力したコマンドを「認証」するには、root / rootに対応するユーザーがログインする必要があります。
これを行うことができるツール/ソリューションはありますか?
答え1
使用を承認したいバイナリをオペレータに警告し、要求されたタスクを保存し、承認されるまで遅延するラッパーと置き換えることができます。ただ実行を削除そして読んでください(関連ユーザーに対して)関連プログラムの権限を付与し、そのユーザーパスのどこかに同じ名前のラッパーを配置します。 (該当するインタプリタにプログラムを付与してプログラムの実行を防止するには、読み取り権限を削除する必要があります。)
しかし、この詳細な規則の全体的なアイデアは何であるかを尋ねたいかもしれません。セキュリティSE。私にとっては、それが解決されるよりも多くの問題を引き起こしているようです(どんな問題でも解決される場合)。私の考えは、ハンマーでリンゴを打ってオムレツを調理しようとしていることです(例えば、間違った道具を間違って使用する場合)。何かを達成するための場所)。
答え2
ほとんど無意味なので、コマンドを承認するための基本的なメカニズムはありません。コアUnix権限メカニズムは、データへのアクセスを保護することです。データを読むことができれば、好きなように何でもできます。たとえば、「読み取りは許可しますが、コピーは許可しません」(コピーはある場所では読み取り、他の場所では書き込み)は不可能です。しかし、なぜ試してみますか?
ユーザーがファイルにアクセスしたくない場合は、ファイルへのアクセスを許可しないでください。
場合によっては、ユーザーがファイルへの制御されたアクセス権を必要とする場合は、電子メールを使用できます。 「こんにちはBob。wibble
何らかの理由でこのファイルにアクセスする必要があります。ファイルを送信してください。」
答え3
実行専用に設定sudo
して尋ねたrootユーザーに送信するコマンド
これは良い開始かもしれません(rootとしてログインした場合にのみ機能します)。
ps。まだテストしていないため、エラーがある可能性があります。
function asksudo {
# for users
write root "asksudo from $(whoami):"
write root "\"$(whoami)\" \"$(PWD)\" && $*"
}
execsudo {
# to authorize root executes this with yes/no and the last line of the message
if [ "$1" = "no" ]
then
write $2 "Your command '${*:3}' has been denied" && exit 0
exit 1 # fails to send the message
fi
[[ "$1" != "yes" ]] && echo "invalid decision" && exit 1;
cd $3 && ${*:4}
write $2 "Your command '${*:3}' has been executed"
}