信頼できる開発者グループがあり、サーバーにsudo権限を与えましたが、sudoとして実行されないようにいくつかのプログラムを除外したいと思います。たとえば、su
sudoでコマンドの実行を無効にし、ユーザーにコマンドを実行させたいとします。
どうすればいいですか?
答え1
sudoerを使用してコマンドを除外できます。たとえば、
Cmnd_Alias DEV_EXCEPTIONS=/bin/su, /usr/bin/vi
%devgrp ALL = ALL, !DEV_EXCEPTIONS
明らかにする
User XYZ may run the following commands on this host:
(root) ALL, (root) !/bin/su, !/usr/bin/vi
ユーザーはまだsuコマンドを実行できます。
答え2
これはできません安全ではない。
実際には構成構文がありますsudo
が、必要に応じて機能しません。システムへのルートアクセスを許可すると、ブラックリスト関連のタスクをどれだけ多くしても、システムは再びロックされません。 Linuxファイルシステムとプロセス権限モデルはこれを許可しません。
ザイルズコメント理由を示唆し始めます。
これは可能ですが、まったく役に立ちません。無効にしても、はへのシンボリックリンクであり、、、、、、次に実行されるシェルスクリプトは引き続き
sudo su
許可されます。sudo env su
sudo sh -c su
sudo /totally/not/su
/totally/not/su
/bin/su
sudo ~/bin/ls
~/bin/ls
su
sudo bash
sudo zsh
sudo python
sudo vi
:shell
しかし、これは可能性の表面にのみ傷が付いているだけです。
ブラックリストに乗らないでください。ホワイトリスト。
発生したくないブラックリストの操作〜する負けたゲームです。ブラックリストのアプローチを使用すると、せいぜい無視されたエラーをキャッチすることができ、ユーザーに他の方法で何かをしたいと思うし、そのようなことをしないように強制することはできません。
限られたシステムが必要な場合、唯一の祈りは、非常に特定の種類のタスクをホワイトリストに追加することです。フルルートアクセスでシステムを開かずにホワイトリストに追加できるのは、ユーザーが制御できる入力を処理せずに固定操作を実行する固定場所の実行可能ファイルです。つまり、あなたは許可されません
実行可能ファイルまたは setuid として表示されるか、ルートによって解析および操作されるすべてのファイルへの書き込みアクセス権。
驚くべきことに、これには多くのプログラムの設定ファイルが含まれる場合があります。表には無害に見える
*.ini
、、、*.yaml
または*.conf
基盤形式にもプログラムに構成値に基づいて他のプロセスを実行させるオプションがある場合が多いです。フォルダごとにすばやく探してみると、/etc
最初に設定への書き込み権限しかなかった場合は、完全なルートエスカレーションを達成するために利用できなかった設定ファイルがほとんどないことが明らかになりました。ユーザー入力に基づいて異なるプロセスを生成するプロセスを実行します。
環境変数、ユーザー入力処理などを介して制御できるスクリプトへのアクセスを許可することに特別な注意を払ってください。実際には安全なものはあまりありません。
簡単に言えば、sudo
すべての人のためにすべてを完全に制御していることをⓐ理解するか、ⓑホワイトリストに追加した慎重に制御された単一の操作の影響を完全に理解していない限り、いかなる種類のアクセスも許可しないでください。
1私はこれが矛盾であることを知っていますその他 回答しかし、この質問が他の場所で「解決策」として好きなのを見て、質問訪問者が読むことができるように答えに注目する価値があると思いました。ザイルズコメント十分に真剣に受け入れられませんでした。
答え3
私を見てここで詳細な解決策を確認してください。あなたのソリューションはほぼ同じです。あなたがしなければならないもう1つのことは、複数を使用してCmnd_Alias
より簡単に新しいコマンドをデバッグして追加することです。 DarkHeartが答えで指摘したように、否定演算子と一緒にこれらのいくつかのエイリアス文字列を使用できます。