ずっと前の私たちの企業環境では、一部のウィズがユーザー「mysql
」をLDAPに入れることにしました。
アカウントが無効になっています:
$ Sudo su - mysql
This account is currently not available.
...しかし、そのIDはまだ存在します:
$ id mysql
uid=2050913(mysql) gid=867(ENG) groups=867(ENG)
これにより、CentOS7でのmariadbのインストールが失敗します。これは、/var/run/mariadb
がmysqlが所有するディレクトリを割り当てようとするtmpfileルールによって作成されるためです。ただし、LDAP /ネットワークが稼働するまでmysqlは存在せず、ユーザーはすでにldapに存在するため、mariadbインストールはmysql
ユーザーを作成しません。
LDAPでユーザーmysqlを無視するようにPAM(または何か)をローカルに強制する方法はありますか?または、ldap mysql
ユーザーの名前をmysql_ldap
に変更しますか?
/etc/passwd
にエントリを手動で追加する唯一の回避策はありますか? (または、別のユーザー名を使用するようにmariadb構成を変更します。)rpmから取得する構成ファイルとsystemdファイルに最小限の変更を加えたいと思います。
(そして、LDAPからmysql
を削除することは、多くのレガシーインフラストラクチャを破壊する可能性があるため、あまり期待していません。)
ところで、変更を実装するためにansibleを使用します。
追加:
質問のタイトルを変更しました:
LDAP「mysql
」ユーザーのユーザーIDが所有するファイルがない限り、ローカルの「mysql
」ユーザーを追加しても問題ないことがわかりました。ファイルをls -la
すると、nscd(またはsssd)キャッシュが汚染され、「mysql
」がLDAPユーザーに再度解決されます。私が本当に望んでいるのは、このLDAP "mysql
"ユーザーを非表示にするために、アカウントのPAMフィルターを何らかの方法で構築することです。
これが私の最終的な解決策であり、ansibleでコーディングされています:
- name: Disable ldap users
ini_file: dest=/etc/sssd/sssd.conf section='nss'
option=filter_users value={{ filter_ldap_users | join(",") }}
register: sssd_conf_users
- name: Disable ldap groups
ini_file: dest=/etc/sssd/sssd.conf section='nss'
option=filter_groups value={{ filter_ldap_groups | join(",") }}
register: sssd_conf_groups
- name: Restart SSSD
when: sssd_conf_users.changed or sssd_conf_groups.changed
service: name=sssd state=restarted
- name: Flush NSCD cache
when: sssd_conf_users.changed or sssd_conf_groups.changed
Shell: "for db in /var/db/nscd/*; do nscd -i $(basename $db); done"
- name: Flush SSSD cache
when: sssd_conf_users.changed or sssd_conf_groups.changed
command: /usr/sbin/sss_cache -E
PAMレベル:
必要なのは、LDAPのユーザーを無視することだけです。したがって、使用している特定のLDAPクライアントを設定します。CentOSでは、「mysql」レコードを無視するカスタムLDAP UID/GIDルックアップファイラーを使用するのはsssdです。既存のシステムでは、sssdキャッシュをクリーンアップして再起動する必要があり、ユーザーがいなくなります。 mariadbを再インストールすると、ローカルのmysqlユーザーが作成されます。
パッケージレベル:
カスタムYumリポジトリをネットワーク上のどこかにセットアップし、インストール後のスクリプトを含むパッケージを含めて、mysqlユーザーの問題を修正します。また、そのリポジトリ内のmariadbパッケージ次に、そのパッケージとmariadbを含むパッケージグループを定義してインストールします。
または、mysqlユーザーの作成を処理する、更新された、よりインテリジェントなインストール後のスクリプトを使用して、mariaDBパッケージを再構築することもできます。
私はAと一緒に行きます-Bはやや難読化されています:)
これが私が現在回避策として使用しているものです。 LDAPを有効化/セットアップする前に、これをキックスタートファイルに追加して%post
で実行しました。
# Install and de-install mariadb-server to create mysql
# user before LDAP is enabled.
yum -d1 -e1 -y install yum-plugin-remove-with-leaves mariadb-server
yum -d1 -e1 -y erase mariadb-server --remove-leaves
mariadb-server
スペックファイルを読んだ後、手動でuseradd
を実行するつもりでした: http://pkgs.fedoraproject.org/cgit/mariadb.git/tree/mariadb.spec
%pre server
/usr/sbin/groupadd -g 27 -o -r mysql >/dev/null 2>&1 || :
/usr/sbin/useradd -M -N -g mysql -o -r -d %{mysqluserhome} -s /sbin/nologin \
-c "MySQL Server" -u 27 mysql >/dev/null 2>&1 || :
...しかし、rpmをインストールすることから直接それを取る方が快適です。
Ldap "mysql"ユーザーIDを持つファイルを見つけた場合、ユーザーIDの逆ルックアップにより、間違った "mysql"ユーザーでnscdまたはsssdが汚染されるため、これにも完全には満足していません。
私は実際に追加することをお勧めします:
filter_users = mysql
filter_groups = mysql
LDAPフィルターをカスタマイズする代わりに、sssd.confの[nss]
セクションに移動します。 LDAPフィルター方式を使用する場合、検索がLDAPサーバーにヒットし、一致しないことを除いて、同じことを行う必要があります。
対照的に、filter_users/filter_groups
はmysqlユーザーをSSSDのネガティブキャッシュに入力し、sssd_beプロセスとLDAPサーバーに移動せずに、NSSレスポンダーから直接「見つかりません」を返します。
あなたがしたいのがLDAPユーザーを解決することだけではない場合。 /etc/nsswitch.confを編集し、ユーザーとグループのエントリのsssd(またはldap)エントリを削除します。次に、nscdキャッシュをフラッシュします