Winbindのグループ検索がひどく遅い

Winbindのグループ検索がひどく遅い

RHEL 6 システムで winbind を実行しています。グループ検索以外はすべて正常に動作しますが、多くのコマンド ( を含むsudo) が非常に遅くなります。straceを実行したところ、winbind が現在のユーザーのすべてのグループと各グループ内のすべてのユーザーを検索することがわかりました。これらのグループの一部には 20000 人以上のユーザーがいるため、単純なコマンドでもsudo完了するまでに 60 秒かかることがあります。

私が本当に関心があるのは、sudo コマンドの高速化だけです。理想的な解決策は、次のいずれかです。

  1. X を超えるユーザー数を持つグループは検索されません。
  2. sudo はグループの検索を完全にバイパスします。

これが私の現在の「smb.conf」ですウィンバインド:

workgroup = EXAMPLE
password server = AD1.EXAMPLE.ORG
realm = EXAMPLE.ORG
security = ads
idmap uid = 10000-19999
idmap gid = 10000-19999
idmap config EXAMPLE:backend = rid
idmap config EXAMPLE:range = 10000000-19999999
winbind enum users = no
winbind enum groups = no
winbind separator = +
template homedir = /home/%U
template shell = /bin/bash
winbind use default domain = yes
winbind offline logon = false

答え1

sudo をアップグレードした後、同じ問題が発生しました。Red Hat から、sudo が sudo-1.7.4p5-13.el6_3.x86_64 から sudo-1.8.6p3-7.el6.x86_64 に移行したときに、グループ メンバーシップ解決アルゴリズムが変更されたことがわかりました。sudo-1.7.4 では、/etc/sudoers にリストされているすべてのグループのグループ メンバーシップが解決され、ユーザー名がリストに見つかった場合は、sudo 権限が付与されました。sudo-1.8.6 では、これが逆に変更されました。sudo は、ユーザーがメンバーであるグループのリストを取得し、それらのグループのいずれかが sudoers にリストされているかどうかを確認します。

これにより、ユーザーが所属するすべてのグループに対して getgrgid() が実行されるため、一部のグループが大きい場合は、処理速度がかなり遅くなります。sudo をダウングレードするか、ローカルの /etc/group ファイルに大きいグループを空のグループとして配置して、AD がそれらのグループにアクセスしないようにすることができます (Linux システムがアクセス制御のために大きいグループを参照しないことを前提としています)。

答え2

古い方法 (つまり 1.7.x) は、グループ プラグインによって元に戻すことができます。

Defaults group_plugin="system_group.so"

あるいは、強制的にのみ使用します/etc/group(winbind ルックアップなどはありません)。

Defaults group_plugin="group_file.so /etc/group"

答え3

ネストされたグループを無効にする winbind nested groups = false

答え4

または、/etc/samba/smb.cnf ファイルに「winbind expand groups = 0」を追加します (その後、ローカル ルート アカウントに切り替えて、「/etc/init.d/winbind stop; /etc/init.d/samba restart; /etc/init.d/winbind start」を実行します)。

再起動後の最初の sudo には少し時間がかかる場合があります (ただし、あなたが経験しているような非常に長い時間はかかりません)。その後は、予想どおり (高速) になります。それ以外の場合は、sudo コマンドにローカル管理者アカウントを使用するだけで済みます (ローカル アカウントを 1 つ作成する必要があるため)。

関連情報