web-dev-qa-db-ja.com

「Sudo vi / etc / hosts」を実行した後に非rootユーザーがrootアクセスを取得する

Linuxマシンでは、非rootユーザーがファイルを開き、

$ Sudo vi /etc/hosts

:sh

rootアクセスを取得します。

1)以上で、非rootユーザーはどのようにrootユーザーになりますか?

2)なぜLinuxは、セキュリティを侵害するためにそのようなハッキングアプローチを許可するのですか?

6
overexchange

非rootユーザーは、Sudoを正常に実行するとすぐにrootになりました(想定されるrootターゲットユーザーを想定)。彼らはrootとしてviを実行し始めました。 viにシェルを要求すると、現在のユーザーとしてrootとしてシェルが実行されます。シェルを求めているので、:shコマンドでviを「終了」しないでください。代わりに:qで終了します。

Linuxがそのような機能を許可するのは、それがSudoが意図することだからです!たぶん、須藤さんの講演を見たことがあるでしょう。

地元のシステム管理者から通常の講義を受けたと信じています。通常、次の3つに要約されます。

#1)他人のプライバシーを尊重します。

#2)入力する前に考えてください。

#3)大きな力には大きな責任が伴います。

Sudoは、「すべて」のアクセスを許可する場合、!否定演算子の形式でこれに限定的な「スピードバンプ」を提供します。

jill        SERVERS = /usr/bin/, !SU, !SHELLS

jillには、/ usr/binからプログラムを実行する権限が付与されていますが、SUまたはSHELLSエイリアスにリストされているものは付与されていません。

sudoers man page には、Sudoを介して大規模なアクセスを許可し、それを制限しようとする場合、「セキュリティに関する注意事項」セクション全体があります。

「!」演算子の制限

一般に、「!」演算子を使用してALLからコマンドを「減算」することは効果的ではありません。ユーザーは、目的のコマンドを別の名前にコピーして実行することにより、これを簡単に回避できます。

そして

一般に、ユーザーがSudo ALLを持っている場合、ユーザー指定の「!」要素に関係なく、ルートシェルを提供する独自のプログラムを作成する(またはシェルの独自のコピーを作成する)ことを妨げるものはありません。

そしてより適切に:

シェルエスケープの防止

Sudoがプログラムを実行すると、そのプログラムは他のプログラムの実行を含め、自由に実行できます。プログラムがシェルエスケープを許可することは珍しくありません。これにより、ユーザーはSudoのアクセス制御とロギングをバイパスできます。シェルエスケープを許可する一般的なプログラムには、シェル(明らかに)、editors、ページ編集者、メールおよび端末プログラムが含まれます

33
Jeff Schaller

Sudo vi /etc/hostsが成功した場合、システム管理者がユーザーにvi /etc/hostsをrootとして実行することを許可していることを意味します。これがSudoの要点です。これにより、システム管理者は特定のユーザーに追加の特権で特定のコマンドを実行することを許可できます。

viを実行する権限をユーザーに与えると、:shがシェルを実行し、:wがシステム上のファイルを上書きすることを含め、viコマンドを実行する権限がユーザーに付与されます。 vi /etc/hostsの実行のみを許可するルールは、ユーザーが任意のコマンドを実行できるようにするため、意味がありません。

関与する「ハッキング」はありません。セキュリティ違反は、セキュリティモデルの穴ではなく、設定の誤りが原因です。 Sudoは特に、設定ミスを防止しようとはしていません。そのドキュメントは、理解するのが難しいことがよく知られています。疑問がある場合は、周りに尋ねて、あまりにも複雑なことをしようとしないでください。

一般的に、ユーザーに意図した以上の権限を与えずに特定の権限を与えることは難しい問題です。彼らにviのような対話型プログラムを実行する権利を与えるようなブルドーザーのアプローチは失敗するでしょう。一般的なアドバイスは、タスクを実行するために必要な最小限の特権を与えることです。ユーザーが1つのファイルを変更できるようにする場合は、エディターを実行する権限を付与しないでください。代わりに、次のいずれか:

  • それらにファイルへの書き込み許可を与えます。これは、意図していないことを行うリスクが最も少ない、最も簡単な方法です。

    setfacl u:bob:rw /etc/hosts
    
  • Sudo経由でファイルを編集する権限を彼らに与えます。そのためには、エディターを実行する権限を与えないでください。 Sudoのドキュメントで説明されているように、sudoeditを実行する権限を付与します。これにより、エディタが起動します元のユーザーとしてとなり、追加の権限を使用してファイルを変更するだけです。

    bob ALL = sudoedit /etc/hosts
    

    Sudoメソッドは設定がより複雑であり、エディターでファイルを開くだけでなくsudoeditを呼び出す必要があるため、ユーザーにとって透過的ではありませんが、すべてのアクセスがログに記録されるという利点があります。

ユーザーに/etc/hostsの編集を許可すると、セキュリティインフラストラクチャに影響を与える可能性があることに注意してください。特定のマシンに対応するホスト名に依存している場所がある場合、そのユーザーは別のマシンを指すことができます。機械。 とにかくおそらく不要です と考えてください。