web-dev-qa-db-ja.com

Ubuntu 16.04 Sudo w / NISが遅すぎる、bind(2)lottaポート、NISドメインサーバー間のlotta接続のまま

タイトルはすべてを言います。とにかく、サーバーを14.04 LTSから16.04 LTSにアップグレードしたところ、Sudoの実行が14.04よりも非常に遅いことがわかりました。

私は追跡し、次の結果を得ました:

$ Sudo strace Sudo true

 -  -  -  -  -  -  -  -  -  -  -  -  -  -  をちょきちょきと切る  -  -  -  -  -  -  -  - --------------- 
 
 ... 
 socket(PF_INET、SOCK_STREAM、IPPROTO_TCP)= 9 
 bind( 9、{sa_family = AF_INET、sin_port = htons(722)、sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(アドレスは既に使用されています)
 bind(9、{sa_family = AF_INET、sin_port = htons(723)、sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(アドレスはすでに使用されています)
 bind(9、{sa_family = AF_INET、sin_port = htons (724)、sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(アドレスはすでに使用されています)
 bind(9、{sa_family = AF_INET、sin_port = htons(725)、sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(アドレスは既に使用されています)
 bind(9、{sa_family = AF_INET、sin_port = htons(726)、sin_addr = inet_addr( "0.0 .0.0 ")}、16)= -1 EADDRINUSE(アドレスはすでに使用されています)
 bind(9、{sa_family = AF_INET、sin_port = htons(727)、sin_addr = inet_addr(" 0.0.0.0 ")} 、16)= -1 EADDRINUSE(アドレスはすでに使用されています)
 bind(9、{sa_family = AF_INET、sin_port = htons(728)、 sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(アドレスはすでに使用されています)
 bind(9、{sa_family = AF_INET、sin_port = htons(729)、sin_addr = inet_addr( " 0.0.0.0 ")}、16)= -1 EADDRINUSE(アドレスはすでに使用されています)
 bind(9、{sa_family = AF_INET、sin_port = htons(730)、sin_addr = inet_addr(" 0.0.0.0 ") }、16)= -1 EADDRINUSE(アドレスはすでに使用中)
 bind(9、{sa_family = AF_INET、sin_port = htons(731)、sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(すでに使用されているアドレス)
 bind(9、{sa_family = AF_INET、sin_port = htons(732)、sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(アドレス既に使用中)
 bind(9、{sa_family = AF_INET、sin_port = htons(733)、sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(アドレスはすでに使用中)
 bind(9、{sa_family = AF_INET、sin_port = htons(734)、sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(アドレスは既に使用中)
 bind (9、{sa_family = AF_INET、sin_port = htons(735)、sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(アドレスは既に使用中)
 bind(9、{sa_family = AF_INET、sin_port = htons(736)、sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(アドレスはすでに使用中)
 bind(9、{sa_family = AF_INET、sin_port = htons(737)、sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(既に使用されているアドレス)
 bind( 9、{sa_family = AF_INET、sin_port = htons(738)、sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(アドレスは既に使用されています)
 bind(9、{sa_family = AF_INET、sin_port = htons(739)、sin_addr = inet_addr( "0.0.0.0")}、16)= -1 EADDRINUSE(アドレスはすでに使用されています)
 ... 
 
 -  -  -  -  -  -  -  -  -  -  -  -  -  -  をちょきちょきと切る  -  -  -  -  -  -  -  -  -  - ----------- 

Sudoコマンド自体は成功しましたが、5秒などの非常に長い時間がかかりました。

ポート範囲は512〜1023で、スーパーユーザー特権を持っていることを保証するなどの目的で特権ポートをバインドしようとしているようです。

そして、須藤が成功した後、netstat -anショー:

 -  -  -  -  -  -  -  -  -  -  -  -  -  -  をちょきちょきと切る  -  -  -  -  -  -  -  - --------------- 
 
 ... 
 tcp 0 0 192.168.0.10:959 192.168.0.1:617 TIME_WAIT 
 tcp 0 0 192.168.0.10:910 192.168.0.1:617 TIME_WAIT 
 tcp 0 0 192.168.0.10:932 192.168.0.1:617 TIME_WAIT 
 tcp 0 0 192.168.0.10:34470 192.168。 0.1:111 TIME_WAIT 
 tcp 0 0 192.168.0.10:966 192.168.0.1:617 TIME_WAIT 
 tcp 0 0 192.168.0.10:903 192.168.0.1:617 TIME_WAIT 
 tcp 0 0 192.168.0.10:875 192.168.0.1:617 TIME_WAIT 
 tcp 0 0 192.168.0.10:45452 192.168.0.1:111 TIME_WAIT 
 tcp 0 0 192.168.0.10:970 192.168.0.1:617 TIME_WAIT 
 tcp 0 0 192.168.0.10:907 192.168.0.1:617 TIME_WAIT 
 tcp 0 0 192.168.0.10:41063 192.168.0.1:111 TIME_WAIT 
 tcp 0 0 192.168.0.10:45659 192.168.0.1:111 TIME_WAIT 
 tcp 0 0 192.168.0.10:948 192.168.0.1:617 TIME_WAIT 
 tcp 0 0 192.168.0.10:50370 192.168.0.1:111 TIME_WAIT 
 tcp 0 0 192.168.0.10:56145 192.168.0.1:111 TIME_WAIT 
 tcp 0 0 192.168.0.10:929 192.168.0.1:617 TIME_WAIT 
 tcp 0 0 192.168.0.10 :909 192.168.0.1:617 TIME_WAIT 
 tcp 0 0 192.168.0.10:33648 192.168.0.1:111 TIME_WAIT 
 tcp 0 0 192.168.0.10:33556 192.168.0.1:111 TIME_WAIT 
 tcp 0 0 192.168.0.10:55209 192.168.0.1:111 TIME_WAIT 
 tcp 0 0 192.168.0.10:975 192.168.0.1:617 TIME_WAIT 
 tcp 0 0 192.168.0.10:969 192.168.0.1 :617 TIME_WAIT 
 tcp 0 0 192.168.0.10:35903 192.168.0.1:111 TIME_WAIT 
 tcp 0 0 192.168.0.10:888 192.168.0.1:617 TIME_WAIT 
 ... 
 
 -------------------------- -  をちょきちょきと切る  -  -  -  -  -  -  -  -  -  -  -  -  -  -  - -

ここで、192.168.0.10は私のサーバーで、192.168.0.1はNISサーバーです。

サーバー上のypbindを停止してSudoを実行すると、サーバーとNISサーバー間で無駄なbind(2)とTIME_WAITが観察されなくなります。

ypbindを止めることができず、古いアジャイルSudoの速度を非常に悪い状態に戻したいB)

私に何ができる?

ありがとうございました

1
Taverna Unci

いくつかのシステムを16.04 LTSにアップグレードした後、同じ動作に遭遇しました。 NISとの互換モードを使用して、/ etc/passwdの+ @ netgroupと+ userを介して、より大きなNISドメインからシステムにアクセスできるユーザーを選択します。

私の同僚-すべてのクレジットを取得する必要がありますが、StackExchangeのことはしていません-互換モードを維持し、/ etc/passwdで+ @ netgroupと+ userを使用できるようにする回避策を見つけました。 passwdとshadowの互換モードを終了しますが、/ etc/nsswitch.confのグループに「files nis」を使用します。

passwd:    compat
shadow:    compat
group:     files nis

/ etc/groupの「compat」モードは、NISグループマップ全体を含めたい場合に「files nis」と同等です。

これがあなたの状況に合うかどうか聞いてみたいと思います。

1
Jon Kuroda

NISグループとユーザーを使用して同じ問題が発生しました。各ユーザー認証は非常に遅くなります。クライアントとNISサーバー間のトラフィックをtcpdumpすることもできます。この場合、2つの間で1分間程度の異常なパケットストームが発生するのを確認できます。

私は設定をいじりに行って、設定を変更するというアイデアを思いつきました。それにより、auth、login、Sudoの動作が完全に変更されました。/etc/passwd、/ etc/shadow、/ etc/group、およびnsswitch.confファイルから「+ ::::」を削除して、次の行を変更します。

passwd:         files nis
group:          files nis
shadow:        files nis

それがどうなるか教えてください。

1
blablabla