FreeBSDでは、すべてのグラフィックターミナルプログラム(xterm、rxvtなど)がsetuidルートがインストールされているか、setuidルートラッパーを使用しているように見えます。
Linuxでは、私が使用したディストリビューションでもこれは起こりません。
FreeBSDに端末プログラム用のsetuid実行可能ファイルまたはラッパーが必要なのはなぜですか?これは特権の昇格の脆弱性を導入する良い方法のようです。
答え1
xterm
これはset-uidプログラムであることがわかりました。 1つの理由は、誰がどのデバイスを使用しているかを記録するためにファイルに書き込むことができる必要があるためですutmp
。もう1つの理由は、xterm
標準入力/出力として使用される擬似ttyデバイスの所有権を取得し、そのデバイスにアクセスするユーザーに所有権を設定する必要があるためです。
他のほとんどのUnix / Unixファミリーオペレーティングシステムは、同じ目標を達成するためにsetuidまたはsetgidビットを使用せずに代わりにより安全な他の方法を使用しますが、FreeBSDは元のソリューションを維持しているようです。
答え2
いくつかの一時的なバグ報告/修正(ポートの変更ログにはありません)を除いて、FreeBSDはuidを設定するためにxtermを必要とせず、xtermと一緒には使用されません。2011年から。ポートメンテナンス者の意見によると
- Don't set suid bit. In our implementation, grantpt() and unlockpt() don't
actually have any use, because PTY's are created on the fly and already have
proper permissions upon creation (see src/lib/libc/stdlib/ptsname.c) [1]
変更されたことを言います。2008年に:
The pts(4) driver also implements this feature, which means
posix_openpt() will now return PTY's that are created on the fly.
この問題を見ると2014年OPが古いシステムで作業しているようです。あるいは、(そしてこれが起こります)、OPシステムが誰かによって修正されたかもしれません。次へ追加setuid ビット。
プラットフォーム(およびその年齢)に応じて、xtermは次の操作にsetuidまたはsetgidを使用します。
- 擬似端末を開く
- utmp(またはutmpx)の更新
もともとBSD(および他の)疑似端末実装では、アプリケーションは特別なデバイスを見つけて、次のようにして開く必要がありました。根setuid権限。 Unix98は最初の部分(特別なデバイスを探す)をキャンセルして開始しました。1999年。 2005年頃には、ほとんどの擬似端末実装でインストーラを使用する必要がなくなりました。設定値。何らかの理由でFreeBSDでは無視されます。
同様に、アプリケーションにはグループ権限が必要になる場合があります(以下を介して)。設定last
)utmp(またはutmpx)ファイルを更新して使用しましたwho
。 xterm
この目的のためにutempterライブラリを使用するように指定されました。2000年以降。 xtermのFreeBSDポートはこの機能を使用するため、setgidも必要ありません。
他のプログラムは次のようにインストールできます。設定値または設定同じタスクに対して2014年現在、ターミナルプログラムがない可能性が高いです。必要setuid権限根ユーザー。他のプログラム(例:urxvt)で使用すると、管理者がこれを見落とした可能性があります。
答え3
良いことは、それでもそれが本当であるかどうかは知りませんでした。それがもたらすダメージを制限する方法があります。おそらく彼らはこの新しい唐辛子を研究しているでしょう。しかし、私はすべてのX(Xorg)アプリケーションについてWaylandを最初に紹介する必要があると言いたいと思います。その後、Xを実行しているコンピュータのセキュリティについて実際に話すことができます。 xtermが端末に通知するなどの小さな問題は5分で解決できます。 Xorgは巨大なセキュリティホールです。