権限のない通常のユーザーが環境変数を /bin/login に渡す

権限のない通常のユーザーが環境変数を /bin/login に渡す

FreeBSD (または Linux かもしれません) に、権限のない通常のユーザー (スーパーユーザーではない) がいるとします。また、このユーザーの下で (このユーザーが所有する) 実行されている telnet スタンドアロン (telnet は通常 inetd の下で実行されることは知っています) があります。(元の root 所有の telnet は実行されていないものとします。) この telnet サーバーは、setuid が設定されている root 所有の /bin/login に渡す前に ld_* 環境変数をチェックしないようにプログラムされています。

質問は次のようになります: 1. この telnet は機能しますか? 2. 機能する場合、環境変数を /bin/login に渡すことさえできますか?

答え1

FreeBSD (または Linux) に、権限のないスーパーユーザーが存在するとします。

「非特権スーパーユーザー」というのは矛盾した用語です。「スーパーユーザー」という言葉自体は、すべての権限を持つユーザーを意味します。

このtelnetサーバーはld_*環境変数をチェックしないようにプログラムされています

これが関連しているかどうかはわかりません。Telnet サーバーには特別な権限がないため、LD_*変数を削除してもあまり役に立ちません...

  1. この telnet は動作しますか? 2. 動作する場合には、環境変数を /bin/login に渡すことさえできるでしょうか?

部分的には動作しますが、CAP_NET_BIND_SERVICE 権限がないため、標準の Telnet ポートにバインドできない可能性があります。

はい、他のプロセスと同様に、環境変数を に渡すことができますlogin。ただし、少なくとも Linux では、ローダー (ld-linux.so) はLD_*setuid プログラムを実行する前にすべての変数を破棄するため、setuid はloginそれらの影響を受けません。

関連情報