web-dev-qa-db-ja.com

LDAPユーザーをPAMでフィルタリングして、まったく存在しないように見せます

ずっと前の私たちの企業環境では、一部のウィズがユーザー「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フィルターを何らかの方法で構築することです。

5
rrauenza

これが私の最終的な解決策であり、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
rrauenza

PAMレベル:
必要なのは、LDAPのユーザーを無視することだけです。したがって、使用している特定のLDAPクライアントを設定します。CentOSでは、「mysql」レコードを無視するカスタムLDAP UID/GIDルックアップファイラーを使用するのはsssdです。既存のシステムでは、sssdキャッシュをクリーンアップして再起動する必要があり、ユーザーがいなくなります。 mariadbを再インストールすると、ローカルのmysqlユーザーが作成されます。

パッケージレベル:
カスタムYumリポジトリをネットワーク上のどこかにセットアップし、インストール後のスクリプトを含むパッケージを含めて、mysqlユーザーの問題を修正します。また、そのリポジトリ内のmariadbパッケージ次に、そのパッケージとmariadbを含むパッケージグループを定義してインストールします。
または、mysqlユーザーの作成を処理する、更新された、よりインテリジェントなインストール後のスクリプトを使用して、mariaDBパッケージを再構築することもできます。

私はAと一緒に行きます-Bはやや難読化されています:)

1
user65677

これが私が現在回避策として使用しているものです。 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が汚染されるため、これにも完全には満足していません。

1
rrauenza

私は実際に追加することをお勧めします:

filter_users = mysql
filter_groups = mysql

LDAPフィルターをカスタマイズする代わりに、sssd.confの[nss]セクションに移動します。 LDAPフィルター方式を使用する場合、検索がLDAPサーバーにヒットし、一致しないことを除いて、同じことを行う必要があります。

対照的に、filter_users/filter_groupsはmysqlユーザーをSSSDのネガティブキャッシュに入力し、sssd_beプロセスとLDAPサーバーに移動せずに、NSSレスポンダーから直接「見つかりません」を返します。

1
jhrozek

あなたがしたいのがLDAPユーザーを解決することだけではない場合。 /etc/nsswitch.confを編集し、ユーザーとグループのエントリのsssd(またはldap)エントリを削除します。次に、nscdキャッシュをフラッシュします

0
Barry