私たちの企業環境では、ずっと昔に、ある賢者がユーザー「mysql
」を LDAP に入れることを決定しました。
アカウントが無効になっています:
$ sudo su - mysql
This account is currently not available.
...しかし、その ID はまだ存在します:
$ id mysql
uid=2050913(mysql) gid=867(ENG) groups=867(ENG)
/var/run/mariadb
これにより、ディレクトリを mysql が所有するように割り当てようとする tmpfile ルールによって作成されるため、CentOS7 での mariadb のインストールが失敗します。ただし、LDAP/ネットワークが起動して実行されるまで mysql は存在せず、mysql
ユーザーがすでに ldap に存在するため、mariadb インストールではユーザーが作成されません。
PAM (または何か) をローカルで強制して、LDAP 内のユーザー mysql を無視させる方法はありますか? または、ldapmysql
ユーザーの名前を に変更しますかmysql_ldap
?
唯一の回避策は、エントリを手動で追加することですか/etc/passwd
? (または、別のユーザー名を使用するように mariadb 設定を変更します。) rpm から取得される config ファイルと systemd ファイルへの変更は最小限に抑えたいと思います。
mysql
( LDAP から削除すると、多くのレガシー インフラストラクチャが破壊される可能性があるため、あまり期待していません。)
ちなみに、変更を実装するには Ansible を使用します。
追加:
質問のタイトルを変更しました:
ローカルの " " ユーザーを追加すると、mysql
LDAP " mysql
" ユーザーのユーザー ID が所有するファイルがなければ、問題なく動作することがわかりました。ls -la
ファイルを追加すると、nscd (または sssd) キャッシュが汚染され、 " mysql
" が再び LDAP ユーザーに解決されます。私が本当に望んでいるのは、この LDAP " " ユーザーを消すために、何らかの方法でアカウントの PAM フィルターを構築することのようですmysql
。
答え1
これが、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
答え2
PAM レベル:
必要なのは、LDAP 内のユーザーを無視することだけです。したがって、使用している特定の LDAP クライアント (CentOS では sssd) を設定し、カスタム LDAP UID/GID ルックアップ フィルターを使用して "mysql" レコードを無視します。既存のシステムでは、sssd キャッシュを消去して再起動すると、ユーザーはなくなります。mariadb を再インストールすると、ローカルの mysql ユーザーが作成されます。
パッケージ レベル:
ネットワーク上のどこかに、mysql ユーザーの問題を修正するポスト インストール スクリプトを含むパッケージを含むカスタム Yum リポジトリを設定します。また、そのリポジトリに mariadb パッケージを配置する必要があります。次に、そのパッケージと mariadb を含むパッケージ グループを定義してインストールします。
または、mysql ユーザーの作成を処理する更新された、よりインテリジェントなポスト インストール スクリプトを使用して mariaDB パッケージを再構築することもできます。
私は A を選びます - B は少しわかりにくいです :)
答え3
%post
これは私が現在回避策として使用しているものです。LDAPを有効化/セットアップする前に、これをキックスタート ファイルに追加して実行します。
# 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
useradd
仕様ファイルを読んで手動で実行するつもりでしたmariadb-server
:詳細は、こちらを参照してください。
%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 の逆引きによって、nscd または sssd が間違った「mysql」ユーザーで汚染されてしまうからです。
答え4
ldapユーザーを解決したくない場合は、/etc/nsswitch.confを編集し、ユーザーとグループのエントリからsssd(またはldap)エントリを削除します。次に、nscdキャッシュをフラッシュします。