PAM을 통해 LDAP 사용자를 필터링하여 전혀 존재하지 않는 것처럼 보이도록 합니다.

PAM을 통해 LDAP 사용자를 필터링하여 전혀 존재하지 않는 것처럼 보이도록 합니다.

우리 회사 환경에서 오래 전 일부 마법사는 사용자 " 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 설치가 실패하게 만듭니다 . 그러나 mysql은 LDAP/네트워킹이 시작되어 실행될 때까지 존재하지 않으며 mysql사용자가 이미 ldap에 존재하기 때문에 mariadb 설치에서는 사용자를 생성하지 않습니다.

PAM(또는 다른 것)이 LDAP에서 mysql 사용자를 무시하도록 로컬에서 강제하는 방법이 있습니까? 아니면 LDAP mysql사용자의 이름을 로 바꾸시겠습니까 mysql_ldap?

에 항목을 수동으로 추가하는 유일한 해결 방법이 있습니까 /etc/passwd? (또는 다른 사용자 이름을 사용하도록 mariadb 구성을 변경하십시오.) 저는 rpm에서 제공되는 구성 및 시스템 파일을 최소한으로 변경하고 싶습니다.

mysql(그리고 많은 레거시 인프라를 손상시킬 수 있으므로 LDAP에서 제거할 희망은 없습니다 .)

변경 사항을 구현하기 위해 ansible btw를 사용할 것입니다.

추가의:

질문 제목을 다음과 같이 변경했습니다.

mysqlLDAP " " 사용자의 사용자 ID가 소유한 파일이 없으면 로컬 " " 사용자를 추가하면 제대로 작동한다는 것을 알았습니다 mysql. 파일이 있으면 ls -lanscd(또는 sssd) 캐시가 오염되고 " mysql"는 다시 LDAP 사용자로 확인됩니다. 내가 정말로 원하는 것은 어떻게든 계정에 대한 PAM 필터를 구성하여 이 LDAP " " 사용자를 사라지게 만드는 것 같습니다 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에서는 "mysql" 레코드를 무시하는 사용자 정의 LDAP UID/GID 조회 파일터를 사용하기 위해 sssd가 됩니다. 기존 시스템에서는 SSD 캐시를 정리하고 다시 시작해야 사용자가 사라집니다. 그런 다음 mariadb를 다시 설치하면 로컬 mysql 사용자가 생성됩니다.

패키지 수준:
설치 후 스크립트가 포함된 패키지를 포함하는 사용자 정의 Yum 저장소를 네트워크 어딘가에 설정하여 mysql 사용자 문제를 해결합니다. 또한 해당 저장소에 mariadb 패키지를 넣어야 합니다. 그런 다음 해당 패키지와 mariadb를 포함할 패키지 그룹을 정의하고 설치합니다.
또는 mysql 사용자 생성을 처리하는 업데이트되고 보다 지능적인 설치 후 스크립트를 사용하여 mariaDB 패키지를 다시 빌드할 수 있습니다.

나는 A와 함께 갈 것입니다 - B는 다소 난독합니다 :)

답변3

현재 해결 방법으로 사용하고 있는 것이 있습니다. %postLDAP를 활성화/설정하기 전에 실행할 킥스타트 파일에 다음을 추가했습니다 .

# 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.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를 오염시키기 때문입니다.

답변4

당신이 원하는 것은 LDAP 사용자를 확인하는 것이 아닙니다. /etc/nsswitch.conf를 편집하고 사용자 및 그룹 항목에 대해 sssd(또는 ldap) 항목을 제거합니다. 그런 다음 nscd 캐시를 플러시합니다.

관련 정보